|
libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
|
29 #ifdef DOXYGEN_ENGLISH
32 #ifdef DOXYGEN_RUSSIAN
145 fft_t* pfft,
double fs,
146 int flag,
double* ppsd,
double* pfrq)
151 fft_t *ptr_fft = NULL;
155 pdgr = (
double*)malloc(nfft *
sizeof(
double));
162 memset(ptr_fft, 0,
sizeof(
fft_t));
167 memset(ppsd, 0, nfft *
sizeof(
double));
168 while(pos + nfft <= n)
170 err = fft_mag(x + pos, nfft, ptr_fft, fs,
171 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
174 for(k = 0; k < nfft; k++)
181 tmp = (
double*)malloc(nfft *
sizeof(
double));
187 memset(tmp ,0, nfft *
sizeof(
double));
188 memcpy(tmp, x + pos, (n - pos)*
sizeof(
double));
190 err = fft_mag(tmp, nfft, ptr_fft, fs,
191 flag & DSPL_FLAG_FFT_SHIFT, pdgr, NULL);
195 for(k = 0; k < nfft; k++)
202 if(flag & DSPL_FLAG_FFT_SHIFT)
204 err =
linspace(-fs*0.5 + fs*0.5/(
double)nfft,
205 fs*0.5 - fs*0.5/(
double)nfft,
206 n, DSPL_SYMMETRIC, pfrq);
208 err =
linspace(-fs*0.5, fs*0.5, nfft, DSPL_PERIODIC, pfrq);
210 err =
linspace(0, fs, nfft, DSPL_PERIODIC, pfrq);
214 if(flag & DSPL_FLAG_LOGMAG)
216 for(k = 0; k < nfft; k++)
217 ppsd[k] = 10.0 * log10(ppsd[k] / (
double)n / fs);
221 for(k = 0; k < nfft; k++)
222 ppsd[k] /= (
double)n * fs;
231 if(ptr_fft && (ptr_fft != pfft))
void fft_free(fft_t *pfft)
Очистить структуру fft_t алгоритма БПФ
int psd_bartlett(double *x, int n, int nfft, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) вещественного сигнала методом Бартлетт...
Структура данных объекта быстрого преобразования Фурье
#define RES_OK
Функция завершилась корректно. Ошибки отсутствуют.
int linspace(double x0, double x1, int n, int type, double *x)
Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1
#define ERROR_MALLOC
Ошибка динамического выделения памяти. Данная ошибка означает, что при динамическом выделении памяти ...