32 #ifdef DOXYGEN_ENGLISH
35 #ifdef DOXYGEN_RUSSIAN
150 fft_t* pfft,
double fs,
151 int flag,
double* ppsd,
double* pfrq)
156 fft_t *ptr_fft = NULL;
160 pdgr = (
double*)malloc(nfft *
sizeof(
double));
167 memset(ptr_fft, 0,
sizeof(
fft_t));
172 memset(ppsd, 0, nfft *
sizeof(
double));
173 while(pos + nfft <= n)
175 err = fft_mag(x + pos, nfft, ptr_fft, fs,
176 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
179 for(k = 0; k < nfft; k++)
186 tmp = (
double*)malloc(nfft *
sizeof(
double));
192 memset(tmp ,0, nfft *
sizeof(
double));
193 memcpy(tmp, x + pos, (n - pos)*
sizeof(
double));
195 err = fft_mag(tmp, nfft, ptr_fft, fs,
196 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
200 for(k = 0; k < nfft; k++)
207 if(flag & DSPL_FLAG_FFT_SHIFT)
209 err =
linspace(-fs*0.5 + fs*0.5/(
double)nfft,
210 fs*0.5 - fs*0.5/(
double)nfft,
211 n, DSPL_SYMMETRIC, pfrq);
213 err =
linspace(-fs*0.5, fs*0.5, nfft, DSPL_PERIODIC, pfrq);
215 err =
linspace(0, fs, nfft, DSPL_PERIODIC, pfrq);
219 if(flag & DSPL_FLAG_LOGMAG)
221 for(k = 0; k < nfft; k++)
222 ppsd[k] = 10.0 * log10(ppsd[k] / (
double)n / fs);
226 for(k = 0; k < nfft; k++)
227 ppsd[k] /= (
double)n * fs;
236 if(ptr_fft && (ptr_fft != pfft))
250 #ifdef DOXYGEN_ENGLISH
253 #ifdef DOXYGEN_RUSSIAN
368 fft_t* pfft,
double fs,
369 int flag,
double* ppsd,
double* pfrq)
374 fft_t *ptr_fft = NULL;
378 pdgr = (
double*)malloc(nfft *
sizeof(
double));
385 memset(ptr_fft, 0,
sizeof(
fft_t));
390 memset(ppsd, 0, nfft *
sizeof(
double));
391 while(pos + nfft <= n)
393 err = fft_mag_cmplx(x + pos, nfft, ptr_fft, fs,
394 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
397 for(k = 0; k < nfft; k++)
410 memset(tmp ,0, nfft *
sizeof(
complex_t));
411 memcpy(tmp, x + pos, (n - pos)*
sizeof(
complex_t));
413 err = fft_mag_cmplx(tmp, nfft, ptr_fft, fs,
414 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
418 for(k = 0; k < nfft; k++)
425 if(flag & DSPL_FLAG_FFT_SHIFT)
427 err =
linspace(-fs*0.5 + fs*0.5/(
double)nfft,
428 fs*0.5 - fs*0.5/(
double)nfft,
429 n, DSPL_SYMMETRIC, pfrq);
431 err =
linspace(-fs*0.5, fs*0.5, nfft, DSPL_PERIODIC, pfrq);
433 err =
linspace(0, fs, nfft, DSPL_PERIODIC, pfrq);
437 if(flag & DSPL_FLAG_LOGMAG)
439 for(k = 0; k < nfft; k++)
440 ppsd[k] = 10.0 * log10(ppsd[k] / (
double)n / fs);
444 for(k = 0; k < nfft; k++)
445 ppsd[k] /= (
double)n * fs;
454 if(ptr_fft && (ptr_fft != pfft))
467 #ifdef DOXYGEN_ENGLISH
470 #ifdef DOXYGEN_RUSSIAN
591 int win_type,
double win_param,
592 fft_t* pfft,
double fs,
593 int flag,
double* ppsd,
double* pfrq)
599 fft_t *ptr_fft = NULL;
613 memset(ptr_fft, 0,
sizeof(
fft_t));
619 if(win_type != DSPL_WIN_RECT)
624 w = (
double*)malloc(n*
sizeof(
double));
632 err =
window(w, n, win_type, win_param);
638 for(k = 0; k < n; k++)
642 s = (
double*)malloc(n*
sizeof(
double));
650 for(k = 0; k < n; k++)
661 err = fft_mag(s, n, ptr_fft, fs, flag, ppsd, pfrq);
666 if(flag & DSPL_FLAG_LOGMAG)
669 u = 10.0 * log10(wn * fs);
670 for(k = 0; k < n; k++)
677 for(k = 0; k < n; k++)
686 if(ptr_fft && (ptr_fft != pfft))
696 #ifdef DOXYGEN_ENGLISH
699 #ifdef DOXYGEN_RUSSIAN
819 int win_type,
double win_param,
820 fft_t* pfft,
double fs,
821 int flag,
double* ppsd,
double* pfrq)
827 fft_t *ptr_fft = NULL;
841 memset(ptr_fft, 0,
sizeof(
fft_t));
847 if(win_type != DSPL_WIN_RECT)
852 w = (
double*)malloc(n*
sizeof(
double));
860 err =
window(w, n, win_type, win_param);
866 for(k = 0; k < n; k++)
878 for(k = 0; k < n; k++)
880 RE(s[k]) =
RE(x[k]) * w[k];
881 IM(s[k]) =
IM(x[k]) * w[k];
892 err = fft_mag_cmplx(s, n, ptr_fft, fs, flag, ppsd, pfrq);
897 if(flag & DSPL_FLAG_LOGMAG)
900 u = 10.0 * log10(wn * fs);
901 for(k = 0; k < n; k++)
908 for(k = 0; k < n; k++)
917 if(ptr_fft && (ptr_fft != pfft))
928 #ifdef DOXYGEN_ENGLISH
931 #ifdef DOXYGEN_RUSSIAN
1061 int win_type,
double win_param,
1062 int nfft,
int noverlap,
fft_t* pfft,
double fs,
1063 int flag,
double* ppsd,
double* pfrq)
1065 int err, pos, cnt, k;
1066 double *pdgr = NULL;
1069 fft_t *ptr_fft = NULL;
1074 pdgr = (
double*)malloc(nfft *
sizeof(
double));
1078 tmp = (
double*) malloc(nfft *
sizeof(
double));
1083 w = (
double*)malloc(nfft*
sizeof(
double));
1091 err =
window(w, nfft, win_type, win_param);
1097 for(k = 0; k < nfft; k++)
1104 memset(ptr_fft, 0,
sizeof(
fft_t));
1112 memset(ppsd, 0, nfft *
sizeof(
double));
1113 while(pos + nfft <= n)
1115 for(k = 0; k < nfft; k++)
1116 tmp[k] = x[pos+k] * w[k];
1117 err = fft_mag(tmp, nfft, ptr_fft, fs,
1118 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
1121 for(k = 0; k < nfft; k++)
1130 memset(tmp ,0, nfft *
sizeof(
double));
1131 for(k = 0; k < n - pos; k++)
1132 tmp[k] = x[pos+k] * w[k];
1135 err = fft_mag(tmp, nfft, ptr_fft, fs,
1136 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
1140 for(k = 0; k < nfft; k++)
1149 if(flag & DSPL_FLAG_FFT_SHIFT)
1151 err =
linspace(-fs*0.5 + fs*0.5/(
double)nfft,
1152 fs*0.5 - fs*0.5/(
double)nfft,
1153 n, DSPL_SYMMETRIC, pfrq);
1155 err =
linspace(-fs*0.5, fs*0.5, nfft, DSPL_PERIODIC, pfrq);
1157 err =
linspace(0, fs, nfft, DSPL_PERIODIC, pfrq);
1161 if(flag & DSPL_FLAG_LOGMAG)
1163 printf(
"wn = %f\n", wn);
1164 for(k = 0; k < nfft; k++)
1165 ppsd[k] = 10.0 * log10(ppsd[k] / (fs * wn * (
double)cnt));
1169 for(k = 0; k < nfft; k++)
1170 ppsd[k] /= fs * wn * (
double)cnt;
1181 if(ptr_fft && (ptr_fft != pfft))
1190 #ifdef DOXYGEN_ENGLISH
1193 #ifdef DOXYGEN_RUSSIAN
1322 int win_type,
double win_param,
1323 int nfft,
int noverlap,
fft_t* pfft,
double fs,
1324 int flag,
double* ppsd,
double* pfrq)
1326 int err, pos, cnt, k;
1327 double *pdgr = NULL;
1330 fft_t *ptr_fft = NULL;
1335 pdgr = (
double*)malloc(nfft *
sizeof(
double));
1345 w = (
double*)malloc(nfft*
sizeof(
double));
1353 err =
window(w, nfft, win_type, win_param);
1359 for(k = 0; k < nfft; k++)
1366 memset(ptr_fft, 0,
sizeof(
fft_t));
1374 memset(ppsd, 0, nfft *
sizeof(
double));
1375 while(pos + nfft <= n)
1377 for(k = 0; k < nfft; k++)
1379 RE(tmp[k]) =
RE(x[pos+k]) * w[k];
1380 IM(tmp[k]) =
IM(x[pos+k]) * w[k];
1382 err = fft_mag_cmplx(tmp, nfft, ptr_fft, fs,
1383 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
1386 for(k = 0; k < nfft; k++)
1395 memset(tmp ,0, nfft *
sizeof(
complex_t));
1396 for(k = 0; k < n - pos; k++)
1398 RE(tmp[k]) =
RE(x[pos+k]) * w[k];
1399 IM(tmp[k]) =
IM(x[pos+k]) * w[k];
1402 err = fft_mag_cmplx(tmp, nfft, ptr_fft, fs,
1403 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
1407 for(k = 0; k < nfft; k++)
1416 if(flag & DSPL_FLAG_FFT_SHIFT)
1418 err =
linspace(- fs * 0.5 + fs * 0.5 / (
double)nfft,
1419 fs * 0.5 - fs * 0.5 / (
double)nfft,
1420 n, DSPL_SYMMETRIC, pfrq);
1422 err =
linspace(-fs*0.5, fs*0.5, nfft, DSPL_PERIODIC, pfrq);
1424 err =
linspace(0, fs, nfft, DSPL_PERIODIC, pfrq);
1428 if(flag & DSPL_FLAG_LOGMAG)
1430 for(k = 0; k < nfft; k++)
1431 ppsd[k] = 10.0 * log10(ppsd[k] / (fs * wn * (
double)cnt));
1435 for(k = 0; k < nfft; k++)
1436 ppsd[k] /= fs * wn * (
double)cnt;
1447 if(ptr_fft && (ptr_fft != pfft))