resample_spline_filter_interp.c

Данная программа производит расчет импульсной характеристики и АЧХ фильтра Фарроу цифровой интерполяции сигнала с использованием кубических сплайнов Эрмита.

Производится расчет реакции фильтра-интерполятора (коэффициента интерполяции \(P=10\)) на единичный импульс и построение АЧХ полученного фильтра-интерполятора.

Результаты работы программы сохраняются в файлы:

dat/resample_spline_filter_time.txt - отсчеты импульсной характеристики фильтра интерполятора.

dat/resample_spline_filter_freq.txt - АЧХ.

Импульсная характеристика \(h(n)\) и АЧХ фильтра \(\left| H\left( \operatorname{e}^{j \cdot \omega}\right)\right|^2\), построенные по данным из сохраненных файлов показаны на рисунке красным (синим показаны характеристики фильтра интерполятора на основе полиномов Лагранжа).

resample_spline_ex_filter_interp.png
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "dspl.h"
#define P 10
#define Q 1
#define K 512
#define N 5
int main()
{
HINSTANCE hDSPL; /* dspl handle */
double s[N] = {0.0, 0.0, 1.0, 0.0, 0.0};
double *t=NULL; /* time */
double *h=NULL; /* Filter impulse response */
double w[K]; /* Normalized Angular frequency */
double HR[K]; /* Filter frequency response real part */
double HI[K]; /* Filter frequency response image part */
double H[K]; /* Filter magnitude */
int k, nh;
/* Load dspl.dll */
hDSPL = dspl_load();
if(!hDSPL)
{
printf("dspl.dll loading ERROR!\n");
return 0;
}
dspl_resample_spline(s, N, P, Q, 0, &h, &nh);
t = (double*) malloc(nh*sizeof(double));
dspl_linspace(0, nh, nh, DSPL_PERIODIC, t);
dspl_writetxt(t,h,nh,"dat/resample_spline_filter_time.txt");
dspl_linspace(0, M_PI, K, DSPL_PERIODIC, w);
dspl_freqz(h, NULL, nh-1, w, K, HR, HI);
for(k = 0; k < K; k++)
H[k] = 10.0*log10((HR[k]*HR[k] + HI[k]*HI[k]));
dspl_writetxt(w,H,K,"dat/resample_spline_filter_freq.txt");
/* clear dspl handle */
FreeLibrary(hDSPL);
free(h);
free(t);
return 0;
}

Oбнаружили ошибку в тексте? Выделите ее мышкой и нажмите