在matlab上编写能产生矩形窗,升余弦窗,改进升余弦窗和二阶升余弦窗的窗函数子程序,也可以调用Matlab相关函数。再编写fir数字滤波器主程序
时间: 2024-12-21 17:27:57 浏览: 11
在MATLAB中,创建各种窗函数的子程序可以分为两部分:定义窗口函数和设计FIR滤波器。首先,我们来创建子程序生成常见的窗函数:
```matlab
function window = rectangle_window(size)
% 矩形窗函数 (单位脉冲响应)
window = ones(1, size);
end
function window = cosine_window(size, type)
if strcmpi(type, 'hanning')
% 升余弦窗 (Hann窗)
window = 0.5 * (cos(2*pi*(0:(size-1))/size) + 1);
elseif strcmpi(type, 'hamming')
% 改进升余弦窗 (Hamming窗)
window = 0.54 - 0.46*cos(2*pi*(0:(size-1))/size);
elseif strcmpi(type, 'blackman')
% 黑曼窗 (Blackman窗)
a = [0.35875, 0.48829, 0.14128];
window = a .* cos(2*pi*(0:(size-1))./(size-1))';
elseif strcmpi(type, 'blackmanharris')
% 二次升余弦窗 (Blackman-Harris窗)
a = [0.355768, 0.487397, 0.144232, 0.012604];
window = a .* cos(2*pi*(0:(size-1))./(size-2)).';
else
error('Invalid window type');
end
end
```
接下来,我们将创建一个简单的FIR滤波器设计主程序:
```matlab
function fir_filter = design_fir滤波器(cutoff, fs, window_type, order)
% 设定滤波器参数
[b, a] = fir1(order, cutoff, 'low', 'window', window_type);
% 计算窗长
win_len = round(order*2); % 使用双边带近似,一般取滤波器长度的两倍
% 创建并显示窗函数
win = eval(['window = ' window_type '(win_len);']);
% 计算FIR滤波器系数
fir_filter = firwin(win_len, b, a, win);
% 显示滤波器频率响应
freqz(fir_filter, 1, fs/2);
end
```
在这个例子中,你可以通过`design_fir滤波器(cutoff, fs, 'type', order)`来调用这个函数,其中`cutoff`是截止频率,`fs`是采样率,`type`是窗口类型(如'hanning'、'hamming'等),`order`是滤波器的阶数。
阅读全文