数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器

无限脉冲响应数字滤波器设计

一、数字滤波器概念

1、概念

输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分的器件。

2、从网络结构分类

无限脉冲响应(IIR) 有限脉冲响应(FIR)
存在反馈,h(n)无限长 不存在反馈,h(n)有限长

2、从功能分类

低通

数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第1张图片

高通

数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第2张图片

全通

数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第3张图片

带通

数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第4张图片

带阻

数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第5张图片

二、数字滤波器的设计方法

1、按要求确定滤波器的性能指标
2、用IIR或FIR系统函数去逼近这一性能要求
3、选择适当的运算结构去实现这个系统函数
4、用软件或者硬件实现

四、设计巴斯沃特低通滤波器

1.根据技术指标求出滤波器阶数N
数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第6张图片
2.根据公式或查表求出归一化极点,得到归一化传递函数
数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第7张图片
3.将归一化传输函数去归一化,得到实际的传输函数
数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第8张图片
数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第9张图片
N越大,幅度下降越快,过渡带越窄

五、算法实现

设计一个满足下列指标的巴特沃斯型模拟低通滤波器:
fp=1kHz,fs=2kHz,Ap<=1dB,As>=40dB

5.1代码

#include
#include
#include
#define pi 3.1416
int main()
{
     
    double Wp = 2*pi*1000, Ws = 2*pi*2000, Ap = 1, As = 40;
    //确定滤波器阶数N
    int N = ceil(log10((pow(10,0.1*As)-1)/(pow(10,0.1*Ap)-1))/(2*log10(Ws/Wp)));
    //确定3dB截频Wc
    double Wc = Ws / (pow(pow(10,0.1*As)-1,1.0/(2*N)));
    int i;
    double complex s[100];
    //求系统函数的极点
    for(i=1; i<=N; i++)
        s[i] = Wc*(cexp(I*pi*(1.0/2+1.0*(2*i-1)/(2*N))));
    //求系统函数
    int w;
    for(w=0; w<=2*pi*3000; w++)
    {
     
	double complex H=1, t;
	for(i=1; i<=N; i++)
        {
     
	    t = (-s[i]) / (I*w-s[i]);
            H = H * t;
        }
        printf("%f\t%f\n", w/(2*pi), 20*log10(cabs(H)));
    }
}

5.2 gnuplot绘图

数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器_第10张图片

你可能感兴趣的:(数字信号处理,数字信号处理,iir滤波器)