Mercurial > hg > silvet
comparison constant-q-cpp/src/ext/kissfft/test/test_vs_dft.c @ 366:5d0a2ebb4d17
Bring dependent libraries in to repo
author | Chris Cannam |
---|---|
date | Fri, 24 Jun 2016 14:47:45 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
365:112766f4c34b | 366:5d0a2ebb4d17 |
---|---|
1 #include "kiss_fft.h" | |
2 | |
3 | |
4 void check(kiss_fft_cpx * in,kiss_fft_cpx * out,int nfft,int isinverse) | |
5 { | |
6 int bin,k; | |
7 double errpow=0,sigpow=0; | |
8 | |
9 for (bin=0;bin<nfft;++bin) { | |
10 double ansr = 0; | |
11 double ansi = 0; | |
12 double difr; | |
13 double difi; | |
14 | |
15 for (k=0;k<nfft;++k) { | |
16 double phase = -2*M_PI*bin*k/nfft; | |
17 double re = cos(phase); | |
18 double im = sin(phase); | |
19 if (isinverse) | |
20 im = -im; | |
21 | |
22 #ifdef FIXED_POINT | |
23 re /= nfft; | |
24 im /= nfft; | |
25 #endif | |
26 | |
27 ansr += in[k].r * re - in[k].i * im; | |
28 ansi += in[k].r * im + in[k].i * re; | |
29 } | |
30 difr = ansr - out[bin].r; | |
31 difi = ansi - out[bin].i; | |
32 errpow += difr*difr + difi*difi; | |
33 sigpow += ansr*ansr+ansi*ansi; | |
34 } | |
35 printf("nfft=%d inverse=%d,snr = %f\n",nfft,isinverse,10*log10(sigpow/errpow) ); | |
36 } | |
37 | |
38 void test1d(int nfft,int isinverse) | |
39 { | |
40 size_t buflen = sizeof(kiss_fft_cpx)*nfft; | |
41 | |
42 kiss_fft_cpx * in = (kiss_fft_cpx*)malloc(buflen); | |
43 kiss_fft_cpx * out= (kiss_fft_cpx*)malloc(buflen); | |
44 kiss_fft_cfg cfg = kiss_fft_alloc(nfft,isinverse,0,0); | |
45 int k; | |
46 | |
47 for (k=0;k<nfft;++k) { | |
48 in[k].r = (rand() % 65536) - 32768; | |
49 in[k].i = (rand() % 65536) - 32768; | |
50 } | |
51 | |
52 kiss_fft(cfg,in,out); | |
53 | |
54 check(in,out,nfft,isinverse); | |
55 | |
56 free(in); | |
57 free(out); | |
58 free(cfg); | |
59 } | |
60 | |
61 int main(int argc,char ** argv) | |
62 { | |
63 if (argc>1) { | |
64 int k; | |
65 for (k=1;k<argc;++k) { | |
66 test1d(atoi(argv[k]),0); | |
67 test1d(atoi(argv[k]),1); | |
68 } | |
69 }else{ | |
70 test1d(32,0); | |
71 test1d(32,1); | |
72 } | |
73 return 0; | |
74 } |