Application example of FftReal class. FftReal クラスの使用例.
Dependencies: Array_Matrix mbed UIT_FFT_Real
main.cpp@0:5bed9d6dc43b, 2014-12-19 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Dec 19 12:12:12 2014 +0000
- Revision:
- 0:5bed9d6dc43b
- Child:
- 1:f070e455cea0
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:5bed9d6dc43b | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:5bed9d6dc43b | 2 | // Test of FftReal class |
MikamiUitOpen | 0:5bed9d6dc43b | 3 | // Copyright (c) 2014 MIKAMI, Naoki, 2014/12/19 |
MikamiUitOpen | 0:5bed9d6dc43b | 4 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:5bed9d6dc43b | 5 | |
MikamiUitOpen | 0:5bed9d6dc43b | 6 | #include "dftComplex.hpp" |
MikamiUitOpen | 0:5bed9d6dc43b | 7 | #include "fftReal.hpp" |
MikamiUitOpen | 0:5bed9d6dc43b | 8 | |
MikamiUitOpen | 0:5bed9d6dc43b | 9 | #include "mbed.h" |
MikamiUitOpen | 0:5bed9d6dc43b | 10 | |
MikamiUitOpen | 0:5bed9d6dc43b | 11 | using namespace Mikami; |
MikamiUitOpen | 0:5bed9d6dc43b | 12 | |
MikamiUitOpen | 0:5bed9d6dc43b | 13 | int main() |
MikamiUitOpen | 0:5bed9d6dc43b | 14 | { |
MikamiUitOpen | 0:5bed9d6dc43b | 15 | const int N = 256;//16; // 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 | 0:5bed9d6dc43b | 20 | srand(1234); |
MikamiUitOpen | 0:5bed9d6dc43b | 21 | for (int n=0; n<N; n++) |
MikamiUitOpen | 0:5bed9d6dc43b | 22 | x1[n] = 2.0f*rand()/(float)RAND_MAX - 1.0f; |
MikamiUitOpen | 0:5bed9d6dc43b | 23 | printf("\r\n#### Original data for DFT ####\r\n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 24 | for (int n=0; n<N; n++) |
MikamiUitOpen | 0:5bed9d6dc43b | 25 | printf("f[%2d]: %8.4f\r\n", n, x1[n]); |
MikamiUitOpen | 0:5bed9d6dc43b | 26 | |
MikamiUitOpen | 0:5bed9d6dc43b | 27 | DftComplex(x1, y1, N); |
MikamiUitOpen | 0:5bed9d6dc43b | 28 | printf("\r\n#### Result of direct DFT ####\r\n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 29 | printf(" real imaginary\r\n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 30 | for (int n=0; n<N; n++) |
MikamiUitOpen | 0:5bed9d6dc43b | 31 | printf("F[%2d]: %8.4f, %8.4f\r\n", n, y1[n].real(), y1[n].imag()); |
MikamiUitOpen | 0:5bed9d6dc43b | 32 | |
MikamiUitOpen | 0:5bed9d6dc43b | 33 | Timer tm; |
MikamiUitOpen | 0:5bed9d6dc43b | 34 | |
MikamiUitOpen | 0:5bed9d6dc43b | 35 | FftReal fft(N); |
MikamiUitOpen | 0:5bed9d6dc43b | 36 | tm.reset(); |
MikamiUitOpen | 0:5bed9d6dc43b | 37 | tm.start(); |
MikamiUitOpen | 0:5bed9d6dc43b | 38 | fft.Execute(x1, y2); |
MikamiUitOpen | 0:5bed9d6dc43b | 39 | tm.stop(); |
MikamiUitOpen | 0:5bed9d6dc43b | 40 | printf("\r\nExecution time (FFT): %d [us]\r\n", tm.read_us()); |
MikamiUitOpen | 0:5bed9d6dc43b | 41 | printf("\r\n#### Result of DFT using FFT ####\r\n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 42 | for (int n=0; n<=N/2; n++) |
MikamiUitOpen | 0:5bed9d6dc43b | 43 | printf("F[%2d]: %8.4f, %8.4f\r\n", n, y2[n].real(), y2[n].imag()); |
MikamiUitOpen | 0:5bed9d6dc43b | 44 | |
MikamiUitOpen | 0:5bed9d6dc43b | 45 | tm.reset(); |
MikamiUitOpen | 0:5bed9d6dc43b | 46 | tm.start(); |
MikamiUitOpen | 0:5bed9d6dc43b | 47 | fft.ExecuteIfft(y2, x2); |
MikamiUitOpen | 0:5bed9d6dc43b | 48 | tm.stop(); |
MikamiUitOpen | 0:5bed9d6dc43b | 49 | printf("\r\nExecution time (IFFT): %d [us]\r\n", tm.read_us()); |
MikamiUitOpen | 0:5bed9d6dc43b | 50 | printf("\r\n#### Result of IFFT ####\r\n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 51 | printf(" original IFFT of FFT\r\n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 52 | for (int n=0; n<N; n++) |
MikamiUitOpen | 0:5bed9d6dc43b | 53 | printf("f[%2d]: %8.4f, %8.4f\r\n", n, x1[n], x2[n]); |
MikamiUitOpen | 0:5bed9d6dc43b | 54 | } |