wc=2*1000*tan(2*pi*400/(2*1000)); wt=2*1000*tan(2*pi*317/(2*1000)); [N,wn]=cheblord(wc,wt,0.5,19,'s'); [B,A]=cheby1(N,0.5,wn,'high','s'); [num,den]=bilinear(B,A,1000); [h,w]=freqz(num,den); f=w/pi*500; plot(f,20*log10(abs(h))); axis([0,500,- 80,10]); grid; xlabel('频率/Hz') ylabel('幅度/dB')
时间: 2024-04-29 17:19:42 浏览: 144
这是一个MATLAB代码段,通过Chebyshev Type I滤波器设计方法设计了一个高通滤波器,并使用双线性变换将其转换为离散时间域中的数字滤波器。这个数字滤波器的幅频响应被计算并绘制出来。其截止频率为400Hz,通带和阻带的上限分别为317Hz和500Hz,阻带衰减为0.5dB,阶数为19。代码的最后一行将绘制出的滤波器的幅频响应在频率范围内进行绘制。
相关问题
wc=2*1000*tan(2*pi*400/(2*1000)); wt=2*1000*tan(2*pi*317/(2*1000)); [N,wn]=cheb1ord(wc,wt,0.5,19,'s'); [B,A]=cheby1(N,0.5,wn,'high','s'); [num,den]=bilinear(B,A,1000); [h,w]=freqz(num,den); f=w/pi*500; subplot(2,1,2); plot(f,20*log10(abs(h))); axis([0,500,-80,10]); grid; xlabel('频率/Hz');ylabel('幅度/dB');讲解代码
这段代码的作用是设计一个Chebyshev Type I滤波器,其高通截止频率为400 Hz,通带最大衰减为0.5 dB,阻带最小衰减为19 dB,采样率为2 kHz,然后将其数字化,并绘制其频率响应图。
具体来说,代码的每一步操作如下:
1. 计算模拟滤波器的截止频率wc和过渡带截止频率wt,这里使用的是双切正弦函数法。
2. 使用Chebyshev Type I滤波器设计函数cheb1ord计算出滤波器的阶数N和截止频率wn。
3. 使用函数cheby1设计Chebyshev Type I滤波器的数字滤波器系数B和A。
4. 使用函数bilinear将模拟滤波器转换为数字滤波器,并计算数字滤波器的系数num和den。
5. 使用函数freqz计算数字滤波器的频率响应h和对应的频率w。
6. 将频率响应转换为对应的频率f,并绘制出其幅度响应图。
最后的subplot(2,1,2)表示将绘制的图形放在一个2行1列的图形窗口的第2个位置,xlabel和ylabel分别为横轴和纵轴添加标签,axis([0,500,-80,10])表示设置坐标轴范围为横轴0-500 Hz,纵轴-80到10 dB,grid表示添加网格线。
优化这段代码wc=5;T=0.1*pi/wc; N=100*2*pi/wc/T; D=2*pi/(N*T);w=(0:N-1)*D; M=floor(wc/D); H=[ones(1,M+1),zeros(1,N-2*M-1),ones(1,M)]; h=ifft(H/T); plot((0:N-1)*T,h);xlabel('t');ylabel('h(t)');
这段代码的功能是设计一个带通滤波器,并绘制其时域响应。
这里提供一个更加高效的实现:
```
wc = 5;
T = 0.1*pi/wc;
N = 100*2*pi/wc/T;
w = linspace(0, N-1, N) * 2*pi/N;
M = floor(wc/(2*pi/N));
H = [ones(1, 2*M+1), zeros(1, N-4*M-1), ones(1, 2*M+1)];
h = ifftshift(ifft(H));
t = linspace(-T*N/2, T*N/2, N);
plot(t, h); xlabel('t'); ylabel('h(t)');
```
这个实现中,使用了 `linspace` 函数来生成等间隔的频率点,避免了使用 `*D` 来计算频率增量。同时,使用 `ifftshift` 函数来调整频率响应的顺序,以便在时域中获得正确的响应。最后,使用 `linspace` 函数生成等间隔的时间点,以便在绘图时获得更好的分辨率。
阅读全文