Application example of FftReal class. FftReal クラスの使用例.

Dependencies:   Array_Matrix mbed UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Mon Jan 13 08:57:54 2020 +0000
Revision:
3:4ef52c7f5281
Parent:
2:03e1399ed9eb
Child:
4:8248d5b5cdc9
4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:5bed9d6dc43b 1 //--------------------------------------------------------------
MikamiUitOpen 1:f070e455cea0 2 // Demo program of FftReal class
MikamiUitOpen 3:4ef52c7f5281 3 //
MikamiUitOpen 3:4ef52c7f5281 4 // Copyright (c) 2020 MIKAMI, Naoki, 2020/01/13
MikamiUitOpen 0:5bed9d6dc43b 5 //--------------------------------------------------------------
MikamiUitOpen 0:5bed9d6dc43b 6
MikamiUitOpen 0:5bed9d6dc43b 7 #include "dftComplex.hpp"
MikamiUitOpen 0:5bed9d6dc43b 8 #include "fftReal.hpp"
MikamiUitOpen 0:5bed9d6dc43b 9
MikamiUitOpen 0:5bed9d6dc43b 10 using namespace Mikami;
MikamiUitOpen 0:5bed9d6dc43b 11
MikamiUitOpen 0:5bed9d6dc43b 12 int main()
MikamiUitOpen 0:5bed9d6dc43b 13 {
MikamiUitOpen 2:03e1399ed9eb 14 // const int N = 16; // number of date for FFT
MikamiUitOpen 2:03e1399ed9eb 15 const int N = 256; // number of date for FFT
MikamiUitOpen 0:5bed9d6dc43b 16
MikamiUitOpen 0:5bed9d6dc43b 17 float x1[N], x2[N];
MikamiUitOpen 0:5bed9d6dc43b 18 Complex y1[N], y2[N/2+1];
MikamiUitOpen 0:5bed9d6dc43b 19
MikamiUitOpen 1:f070e455cea0 20 // Generate random data
MikamiUitOpen 0:5bed9d6dc43b 21 srand(1234);
MikamiUitOpen 0:5bed9d6dc43b 22 for (int n=0; n<N; n++)
MikamiUitOpen 0:5bed9d6dc43b 23 x1[n] = 2.0f*rand()/(float)RAND_MAX - 1.0f;
MikamiUitOpen 0:5bed9d6dc43b 24 printf("\r\n#### Original data for DFT ####\r\n");
MikamiUitOpen 0:5bed9d6dc43b 25 for (int n=0; n<N; n++)
MikamiUitOpen 0:5bed9d6dc43b 26 printf("f[%2d]: %8.4f\r\n", n, x1[n]);
MikamiUitOpen 0:5bed9d6dc43b 27
MikamiUitOpen 3:4ef52c7f5281 28 Timer tm; // for measurement of execution time
MikamiUitOpen 3:4ef52c7f5281 29
MikamiUitOpen 1:f070e455cea0 30 // DFT, for comarison
MikamiUitOpen 3:4ef52c7f5281 31 tm.reset();
MikamiUitOpen 3:4ef52c7f5281 32 tm.start();
MikamiUitOpen 0:5bed9d6dc43b 33 DftComplex(x1, y1, N);
MikamiUitOpen 3:4ef52c7f5281 34 tm.stop();
MikamiUitOpen 3:4ef52c7f5281 35 printf("\r\nExecution time (DFT): %d [us]\r\n", tm.read_us());
MikamiUitOpen 0:5bed9d6dc43b 36 printf("\r\n#### Result of direct DFT ####\r\n");
MikamiUitOpen 0:5bed9d6dc43b 37 printf(" real imaginary\r\n");
MikamiUitOpen 0:5bed9d6dc43b 38 for (int n=0; n<N; n++)
MikamiUitOpen 0:5bed9d6dc43b 39 printf("F[%2d]: %8.4f, %8.4f\r\n", n, y1[n].real(), y1[n].imag());
MikamiUitOpen 0:5bed9d6dc43b 40
MikamiUitOpen 1:f070e455cea0 41 // FFT
MikamiUitOpen 0:5bed9d6dc43b 42 FftReal fft(N);
MikamiUitOpen 0:5bed9d6dc43b 43 tm.reset();
MikamiUitOpen 0:5bed9d6dc43b 44 tm.start();
MikamiUitOpen 0:5bed9d6dc43b 45 fft.Execute(x1, y2);
MikamiUitOpen 0:5bed9d6dc43b 46 tm.stop();
MikamiUitOpen 0:5bed9d6dc43b 47 printf("\r\nExecution time (FFT): %d [us]\r\n", tm.read_us());
MikamiUitOpen 0:5bed9d6dc43b 48 printf("\r\n#### Result of DFT using FFT ####\r\n");
MikamiUitOpen 0:5bed9d6dc43b 49 for (int n=0; n<=N/2; n++)
MikamiUitOpen 0:5bed9d6dc43b 50 printf("F[%2d]: %8.4f, %8.4f\r\n", n, y2[n].real(), y2[n].imag());
MikamiUitOpen 0:5bed9d6dc43b 51
MikamiUitOpen 1:f070e455cea0 52 // IFFT
MikamiUitOpen 0:5bed9d6dc43b 53 tm.reset();
MikamiUitOpen 0:5bed9d6dc43b 54 tm.start();
MikamiUitOpen 0:5bed9d6dc43b 55 fft.ExecuteIfft(y2, x2);
MikamiUitOpen 0:5bed9d6dc43b 56 tm.stop();
MikamiUitOpen 0:5bed9d6dc43b 57 printf("\r\nExecution time (IFFT): %d [us]\r\n", tm.read_us());
MikamiUitOpen 0:5bed9d6dc43b 58 printf("\r\n#### Result of IFFT ####\r\n");
MikamiUitOpen 0:5bed9d6dc43b 59 printf(" original IFFT of FFT\r\n");
MikamiUitOpen 0:5bed9d6dc43b 60 for (int n=0; n<N; n++)
MikamiUitOpen 0:5bed9d6dc43b 61 printf("f[%2d]: %8.4f, %8.4f\r\n", n, x1[n], x2[n]);
MikamiUitOpen 3:4ef52c7f5281 62 }