频率采样法实现带通滤波器MATLAB实现
时间: 2023-11-07 10:22:50 浏览: 84
实现带通滤波器的频率采样法MATLAB代码如下:
```matlab
% 设计一个带通滤波器
fs = 1000; % 采样频率
f1 = 50; % 通带截止频率
f2 = 150; % 通带截止频率
f3 = 200; % 阻带截止频率
f4 = 300; % 阻带截止频率
Wp = [f1 f2]/(fs/2); % 归一化通带截止频率
Ws = [f3 f4]/(fs/2); % 归一化阻带截止频率
Rp = 1; % 通带最大衰减
Rs = 30; % 阻带最小衰减
[n,Wn] = buttord(Wp,Ws,Rp,Rs); % 求取巴特沃斯滤波器的阶数和归一化截止频率
[b,a] = butter(n,Wn,'bandpass'); % 求取巴特沃斯滤波器的系数
% 频率采样法实现
N = 1024; % 采样点数
f = 0:fs/N:(N-1)*fs/N; % 频率向量
H = freqz(b,a,f,fs); % 计算巴特沃斯滤波器的频率响应
Hd = zeros(1,N); % 初始化理想滤波器的频率响应
Hd((f>=f1)&(f<=f2)) = 1; % 理想滤波器的频率响应
Hd((f>=f3)&(f<=f4)) = 0; % 理想滤波器的频率响应
hd = ifft(Hd); % 求取理想滤波器的时域响应
hd = fftshift(hd); % 使理想滤波器的时域响应中心对称
h = ifft(H); % 求取巴特沃斯滤波器的时域响应
h = fftshift(h); % 使巴特沃斯滤波器的时域响应中心对称
% 绘制滤波器的频率响应和时域响应
figure;
subplot(2,1,1);
plot(f,20*log10(abs(H)),'b',f,20*log10(abs(Hd)),'r--');
xlabel('频率/Hz');
ylabel('幅值/dB');
title('滤波器的频率响应');
legend('巴特沃斯滤波器','理想滤波器');
subplot(2,1,2);
plot(-N/2+1:N/2,abs(h),'b',-N/2+1:N/2,abs(hd),'r--');
xlabel('采样点');
ylabel('幅值');
title('滤波器的时域响应');
legend('巴特沃斯滤波器','理想滤波器');
```
带通滤波器的频率采样法实现的核心部分是计算理想滤波器的时域响应。在这里,我们假设理想滤波器是矩形窗口,也就是通带内的信号完全通过,阻带内的信号完全被过滤掉。因此,理想滤波器的频率响应可以通过定义一个零值向量,再将通带内的元素赋值为1,阻带内的元素赋值为0来实现。根据理想滤波器的频率响应,可以通过频域逆变换求出理想滤波器的时域响应。然后,我们使用巴特沃斯滤波器的系数计算巴特沃斯滤波器的时域响应,最后绘制出滤波器的频率响应和时域响应。