MATLAB自定义freqz函数代码
时间: 2024-12-06 15:20:20 浏览: 29
在MATLAB中,`freqz`函数是内置的用于计算数字滤波器频率响应的函数,但如果需要自定义频率响应的计算,你可以创建一个函数来实现特定的数学模型。以下是一个简单的例子,展示如何编写一个名为`custom_freqz`的自定义函数,它接受一组系统函数系数(如多项式系数)并返回对应的频率响应:
```matlab
function H = custom_freqz(b, a, Fs, worN)
% b和a分别是系统的零点和极点系数
% Fs是采样率
% worN是计算频率响应的复数点的数量
if nargin < 4
warning('Insufficient number of input arguments. Using default values.');
worN = logspace(-1, 1, 1000); % 使用默认的1000个等间距点
end
% 确保系数数组是列向量
if size(b, 2) == 1
b = b.';
end
if size(a, 2) == 1
a = a.';
end
% 创建z变换
z = exp(1i * 2*pi * worN/Fs);
% 计算频率响应
H = (b.*z)./((1-z).^size(a, 2));
% 可能会包含无穷大,所以归一化到0dB
H = db(H);
end
```
使用这个自定义函数的例子:
```matlab
% 示例:计算低通滤波器的频率响应
b = [1]; % 零点
a = [1 -0.5]; % 极点
H_custom = custom_freqz(b, a, 1000, 'ones'); % 采样率1000Hz
plot(worN, H_custom)
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Custom Lowpass Filter Frequency Response')
阅读全文