【转载】matlab中freqz函数的使用

freqz函数计算线性系统的频率响应,包括幅频响应和相频响应,基本输入为线性系统的AMMA模型系数向量,一个典型的AMMA模型为

%               jw               -jw              -jmw
%        jw  B(e)    b(1) + b(2)e + .... + b(m+1)e
%     H(e) = ---- = ------------------------------------
%               jw               -jw              -jnw
%            A(e)    a(1) + a(2)e + .... + a(n+1)e

其中,向量A为IIR系统分母向量,对FIR系统为1;向量B为分子向量

函数使用零散傅立叶变换(fft)计算系统响应,计算范围为0~pi,即单位圆的上半部分,因为默认情况下对于实数系数系统响应关于DC对称.计算公式为上式的频域离散化形式.计算完成后在对目标解析度使用算术插值方法进行向量填充,填充形式取决于附加输入参数信息.

freqz的基本调用格式为freqz(b,a),此时函数内部默认进行512点算术插值,所以输出是512点的幅度值和对应的0~pi自变量向量,如果需要改变向量长度便于绘图,则可以附加维度信息,例如freqz(b,a,N)则进行N点插值

如果系统不是实系数的而是复数系统,则系统响应不再对称,0~pi的范围不足以反映整体特性,此时有两种选择:

1. 绘制整个主值区(-pi~pi),调用格式是增加字串型参数'whole',例如 freqz(b,a,n,'whole');

2. 绘制定制区域,则直接给定范围,该范围为给定自变量向量,例如 freqz(b,a,[-pi:2*pi/n:pi])

使用上述调用格式,输出为-pi~pi范围内的离散傅立叶变换计算结果,如果为绘图方便要标识频率信息,则调用时需要附加采样频率信息,例如freqz(b,a,[-fs/2:(fs/n):fs/2],fs);


freqz的基本使用方法是利用函数返回值进行后续分析处理,此时函数不会自动绘制曲线,如果直接调用而不指定返回接收变量,则函数自动按照通常标准绘制幅频/相频曲线,幅频曲线为对数格式

可以使用type freqz分析源代码

原文地址:https://www.cnblogs.com/Dontstop/p/4546969.html