前面几篇是IIR常用滤波器和三大模型转换部分函数的实现。
在IIR滤波器实现中存在将低通滤波器(LPF)的设计转换成其他类型的滤波器的函数,即lp2lp、lp2hp、lp2bp和lp2bs函数组,下面是对应的C实现:
lp2lp
void lp2lp(int n, double *a, double *b, double wo)
{
for (int i = 0; i < n * n; i++)
{
a[i] = wo * a[i];
}
for (int i = 0; i < n; i++)
{
b[i] = wo * b[i];
}
}
lp2hp
void lp2hp(int n, double *a, double *b, double *c, double *d, double wo)
{
double *at = (double *)malloc(sizeof(double) * n * n);
double *bt = (double *)malloc(sizeof(double) * n);
double *ct = (double *)malloc(sizeof(double) * n);
double *dt = (double *)malloc(sizeof(double) * n);
for (size_t i = 0; i < n * n; i++)
{
at[i] = a[i];
}
rinv(at, n);
trmul(at, b, n, n, 1, bt);
trmul(c, at, n, n, 1, ct);
trmul(ct, at, n, n, 1, dt);
for (size_t i = 0; i < n * n; i++)
{
at[i] = wo * at[i];
}
for (size_t i = 0; i < n; i++)
{
bt[i] = -wo * bt[i];
dt[i] = *d - dt[i];
}
for (int i = 0; i < n * n; i++)
{
a[i] = at[i];
}
for (int i = 0; i < n; i++

文章介绍了用于IIR滤波器设计的lp2lp,lp2hp,lp2bp和lp2bs函数的C语言实现,展示了低通滤波器如何转换为高通、带通和带阻滤波器,并通过测试验证了其正确性。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



