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,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,angle(H)*180/pi,'-k','LineWidth',1); xlabel('\omega/\pi');ylabel('相位(度)'); grid on;哪里错啦
时间: 2024-03-27 22:39:03 浏览: 74
这段代码看起来没有语法错误,但是有可能出现以下问题:
1. 过渡带宽度的计算方式可能有误。应该使用max而不是min函数。因此,需要将tr_width的计算方式修改为:tr_width = max((wp1-ws1), (ws2-wp2));
2. firl函数的第一个参数应该为窗口长度,而不是滤波器的阶数。因此,应该将firl函数的第一个参数修改为N+1,即窗口长度为N+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;
```
经过修改后,这段代码应该可以正确运行并绘制出带通滤波器的幅频响应和相频响应。
阅读全文