clc;clear all;close all; ws1=0.2*pi;ws2=0.8*pi; wp1=0.35*pi;wp2=0.65*pi; tr_width=min((wp1-ws1),(ws2-wp2)); N=ceil(12*pi/tr_width)+1; wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2; wc=[wc1 wc2]; h=firl(N,wc/pi,blackman(N+1)); [H,w]=freqz(h,1,1000); mag=abs(H);db=20*log10(mag/max(mag)); subplot(2,1,1); plot(w/pi,db,'-b','LineWidth',1); xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-150,10]);grid on; subplot(2,1,2); plot(w/pi,w,'-k','LineWidth',1); xlabel('\omega/\pi');ylabel('相位(度)');grid on; 错哪里了?
时间: 2024-03-27 07:38:59 浏览: 14
这段代码是用于设计一个带通滤波器的FIR滤波器,但是有一些错误需要修正。
1. 首先,在计算过渡带宽度时,应该用max而不是min,因为过渡带宽度应该是两个过渡带宽度的最大值。因此,应该将tr_width的计算方式修改为:tr_width=max((wp1-ws1),(ws2-wp2));
2. 其次,由于采用了Blackman窗口函数,因此在firl函数中应该将窗口长度设为N+1,而不是N。
3. 最后,绘制相位响应时,应该将相位转换为角度,即将相位响应乘以180/pi。因此,应该将绘制相位响应的代码修改为:plot(w/pi,angle(H)*180/pi,'-k','LineWidth',1);
修改后的代码如下:
```
clc;clear all;close all;
ws1=0.2*pi;
ws2=0.8*pi;
wp1=0.35*pi;
wp2=0.65*pi;
tr_width=max((wp1-ws1),(ws2-wp2));
N=ceil(12*pi/tr_width)+1;
wc1=(ws1+wp1)/2;
wc2=(ws2+wp2)/2;
wc=[wc1 wc2];
h=firl(N+1,wc/pi,blackman(N+2));
[H,w]=freqz(h,1,1000);
mag=abs(H);
db=20*log10(mag/max(mag));
subplot(2,1,1);
plot(w/pi,db,'-b','LineWidth',1);
xlabel('\omega/\pi');ylabel('幅度(dB)');
axis([0,1,-150,10]);grid on;
subplot(2,1,2);
plot(w/pi,angle(H)*180/pi,'-k','LineWidth',1);
xlabel('\omega/\pi');ylabel('相位(度)');
grid on;
```