matlab理想带通滤波器子函数
时间: 2023-07-13 19:08:32 浏览: 56
以下是MATLAB实现的理想带通滤波器子函数:
```matlab
function [h, w] = ideal_bandpass_filter(fs, f1, f2, N)
% fs: 采样频率
% f1, f2: 带通边缘频率
% N: 滤波器阶数
% h: 滤波器系数
% w: 频率向量
if mod(N,2)==0 % 如果阶数为偶数,则加一,变为奇数
N = N + 1;
end
w = 0:fs/1000:fs/2; % 生成频率向量
M = length(w); % 频率向量长度
h = zeros(1,M);
for i = 1:M
if (w(i)>=f1) && (w(i)<=f2)
h(i) = 1;
else
h(i) = 0;
end
end
% 计算滤波器系数
h = fir1(N-1, [f1 f2]/(fs/2), 'bandpass');
```
使用方法:
```matlab
fs = 1000; % 采样频率
f1 = 50; % 带通边缘频率1
f2 = 150; % 带通边缘频率2
N = 51; % 滤波器阶数
[h, w] = ideal_bandpass_filter(fs, f1, f2, N); % 调用函数计算滤波器系数
% 绘制频率响应曲线
figure;
plot(w, abs(fft(h, 1000)));
xlabel('频率/Hz');
ylabel('幅度');
title('理想带通滤波器频率响应');
```
这个子函数将返回一个长度为M的滤波器系数向量h和对应的频率向量w。其中,h是一个理想带通滤波器的系数序列,w是频率向量,可以用于绘制理想带通滤波器的频率响应曲线。