Application example of FftReal class. FftReal クラスの使用例.
Dependencies: Array_Matrix mbed UIT_FFT_Real
main.cpp@3:4ef52c7f5281, 2020-01-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |