使用freqz进行归一化频率响应

时间:2017-08-21 22:17:49

标签: matlab filter

我有FIR滤波器的系数b0-b31,我试图绘制滤波器的幅度和相位响应。

coeff = [-8 -2 9 16 20 15 3 -19 -36 -41 -26 11 69 126 187 208 208 187 126 65 11 -26 -41 -36 -19 0 15 20 16 10 -2 -8];

当我使用freqz绘制它时,它给出了未经规范化的幅度,如下所示: enter image description here

我正在使用:

freqz(coeff,1,[],5000000) 有没有办法获得y轴的幅度和相位的归一化图?意思是,幅度的最大值是0,图表从它开始?如下图所示: enter image description here

2 个答案:

答案 0 :(得分:2)

有很多可能性:

A)一种方法是告诉fvtool诺威尔化输出

fvt = fvtool(....)
fvt.NormalizeMagnitudeto1 = 'on';

B)另一种选择是按以下方式标准化系数:

normalize_coeff=coeff/sum(coeff);

立即致电

freqz(normalize_coeff, 1,[],5000000)

将导致您所需的频率幅度响应。

如前所述,为了在一个图中得到两者,你可以使用fvtool。

或者您首先使用命令freqz

来计算频率响应
fs=5000000;
[H,F]=freqz(normalize_coeff, 1,[],fs);

和相位响应使用:

[phi,w] = phasez(normalize_coeff,1,fs);

并将两个结果绘制成一个图表

figure(1001)
plot(w,phi,'r')
hold on
plot(pi*(F/(fs/2)),20*log10(abs(H)))
hold off
legend('phase','magnitude')

对于不同的y轴,您还可以使用命令plotyy。

答案 1 :(得分:1)

一种方法是使用freqz的输出计算DC增益,然后使用fvtool绘制标准化滤波器。

示例:

coeff = [-8 -2 7 16 20 15 0 -19 -36 -41 -26 11 65 126 178 208 208 178 126 65 11 -26 -41 -36 -19 0 15 20 16 7 -2 -8];

[h,w] = freqz(coeff);
fvtool(coeff/h(1),'freq');

enter image description here