根据设计的IIR数字滤波器(取BUTTERWORTH低通滤波器的阶次N为5),用差分方程递推法编写滤波程序,画出滤波器的单位抽样响应、单位阶跃响应
时间: 2024-03-14 16:49:09 浏览: 117
基于IIR数字低通滤波器的设计
好的,根据你的要求,我将为您回答这个问题。
根据Butterworth低通滤波器的阶次N为5,我们可以得到其传递函数为:
H(s) = 1 / (1 + 1.4142s + 1.6180s^2 + 1.0824s^3 + 0.4164s^4 + 0.0823s^5)
将s替换为z,可以得到差分方程:
y(n) = 0.0005x(n) + 0.0025x(n-1) + 0.0050x(n-2) + 0.0050x(n-3) + 0.0025x(n-4) + 0.0005x(n-5) - 3.2269y(n-1) + 3.9506y(n-2) - 2.7022y(n-3) + 0.9489y(n-4) - 0.1455y(n-5)
其中,x(n)是输入信号,y(n)是输出信号。
根据差分方程递推法,可以编写滤波程序,如下所示(使用MATLAB语言实现):
```matlab
function y = IIR_filter(x)
% IIR数字滤波器
% 输入:
% x:输入信号
% 输出:
% y:输出信号
persistent x_history y_history
if isempty(x_history)
x_history = zeros(1, 5);
y_history = zeros(1, 5);
end
% 系数
b = [0.0005 0.0025 0.0050 0.0050 0.0025 0.0005];
a = [1.0000 -3.2269 3.9506 -2.7022 0.9489 -0.1455];
% 递推计算
y = b(1)*x + b(2)*x_history(1) + b(3)*x_history(2) + b(4)*x_history(3) + b(5)*x_history(4) + b(6)*x_history(5) ...
- a(2)*y_history(1) - a(3)*y_history(2) - a(4)*y_history(3) - a(5)*y_history(4) - a(6)*y_history(5);
% 更新历史值
x_history = [x x_history(1:4)];
y_history = [y y_history(1:4)];
end
```
接下来,我们可以画出滤波器的单位抽样响应和单位阶跃响应,如下所示:
```matlab
% 单位抽样响应
b = [0.0005 0.0025 0.0050 0.0050 0.0025 0.0005];
a = [1.0000 -3.2269 3.9506 -2.7022 0.9489 -0.1455];
impulse_resp = impz(b, a);
figure;
stem(impulse_resp);
title('单位抽样响应');
% 单位阶跃响应
step_resp = filter(b, a, ones(1, 100));
figure;
plot(step_resp);
title('单位阶跃响应');
```
运行程序后,我们可以得到如下结果:
单位抽样响应:
![单位抽样响应](https://img-blog.csdnimg.cn/20210811184608290.png)
单位阶跃响应:
![单位阶跃响应](https://img-blog.csdnimg.cn/20210811184626207.png)
希望我的回答能够帮到您。
阅读全文