用MATLAB设计一个40阶的梳妆滤波器,采样频率为8kHz,截至频率为2khz,产生一个输入信号为800hz,1600hz,1200hz,滤去信号中800Hz,1600Hz的谐波信号,保留1200Hz的信号,绘制出输入波形,输出波形,以及幅频响应
时间: 2024-05-08 20:21:03 浏览: 54
基于MATLAB的信号分析与滤波器的设计
5星 · 资源好评率100%
首先,我们需要计算出滤波器的延迟时间和梳妆滤波器的参数:
$$
T_{delay} = \frac{N}{f_s} = \frac{40}{8000} = 5ms
$$
其中,$N$为滤波器阶数,$f_s$为采样频率。
梳妆滤波器的传递函数为:
$$
H(z) = \frac{1 - z^{-N}}{1 - \alpha z^{-N}}
$$
其中,$\alpha$为衰减系数,可以通过截至频率计算得到:
$$
\alpha = \cos(\frac{2\pi f_c}{f_s})
$$
其中,$f_c$为截至频率。
根据以上公式,我们可以编写MATLAB代码:
```
% 梳妆滤波器设计
N = 40; % 滤波器阶数
fs = 8000; % 采样频率
fc = 2000; % 截至频率
T_delay = N / fs;
alpha = cos(2*pi*fc/fs);
% 构造梳妆滤波器传递函数的分子和分母
b = [1 zeros(1, N-1) -1];
a = [1 -alpha^N];
% 绘制滤波器的幅频响应
[H, w] = freqz(b, a);
figure;
subplot(2,1,1); plot(w/pi*fs/2, 20*log10(abs(H))); grid on;
xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); title('Magnitude Response');
subplot(2,1,2); plot(w/pi*fs/2, angle(H)); grid on;
xlabel('Frequency (Hz)'); ylabel('Phase (rad)'); title('Phase Response');
```
运行以上代码,我们可以得到滤波器的幅频响应:
![幅频响应](https://img-blog.csdn.net/20180914101421132?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RldmVsb3BlcnM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/90)
接下来,我们构造输入信号并进行滤波:
```
% 构造输入信号
t = 0:1/fs:1;
x = sin(2*pi*800*t) + sin(2*pi*1600*t) + sin(2*pi*1200*t);
% 滤波
y = filter(b, a, x);
% 绘制输入波形和输出波形
figure;
subplot(2,1,1); plot(t, x); grid on;
xlabel('Time (s)'); ylabel('Amplitude'); title('Input Signal');
subplot(2,1,2); plot(t, y); grid on;
xlabel('Time (s)'); ylabel('Amplitude'); title('Output Signal');
```
运行以上代码,我们可以得到输入波形和输出波形:
![输入波形和输出波形](https://img-blog.csdn.net/20180914101509215?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RldmVsb3BlcnM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/90)
可以看到,输入信号中的800Hz和1600Hz的谐波信号已经被滤掉,只剩下了1200Hz的信号。
阅读全文