MATLAB函数freqz的使用

  (一)、它是数字滤波器的频率响应(包括幅频响应和相频响应)

(二)、主要的形式:

  • [h,w] = freqz(b,a,n)
  • [h,w] = freqz(sos,n)
  • [h,w] = freqz(d,n)
  • [h,w] = freqz(___,n,'whole')
  • [h,f] = freqz(___,n,fs)
  • [h,f] = freqz(___,n,'whole',fs)
  • h = freqz(___,w)
  • h = freqz(___,f,fs)
  • freqz(___)

(三)、解释:

  1. [h,w] = freqz(b,a,n)返回数字点滤波器的n点频率响应向量h和相应的角频率向量w,其中数字和分母多项式系数分别存储在b和a中。
  2. [h,w] = freqz(sos,n)返回与二阶部分矩阵sos相对应的n点复频响应。
  3. [h,w] = freqz(d,n)返回数字滤波器d的n点复频响应。注意:当知道滤波器的N个抽头系数之后,可以用这个形式来求滤波器的幅频和相频响应,n如果不指定其默认值为512,也就是返回值h,w的长度都是512点的
  4. [h,w] = freqz(___,n,'whole')返回整个单位圆周围n个采样点的频率响应。
  5. [h,f] = freqz(___,n,fs)返回给定数字分子和分母多项式系数分别存储在b和a中的数字滤波器的频率响应矢量h和相应的物理频率矢量f采样率fs。
  6. [h,f] = freqz(___,n,'whole',fs)返回介于0和fs之间的n个点处的频率。
  7. h = freqz(___,w)以w中提供的归一化频率返回频率响应矢量h。
  8. h = freqz(___,f,fs)以f中提供的物理频率返回频率响应矢量h。
  9. 没有输出参数的freqz(___)绘制滤波器的频率响应。

注意:如果freqz的输入是单精度的,则频率响应是使用单精度算法计算的。输出h是单精度
(四)、输入输出相关参数解释

  • 输入:
  1. b,a:传递函数的系数向量
    传递函数系数,指定为矢量。 用b和a表示传递函数


    例如:
    b = [1 3 3 1] / 6和a = [3 0 1 0] / 3指定具有标准化3-dB频率0.5πrad /样本的三阶巴特沃斯滤波器。
    数据类型:double | 单
    复数支持:是
  2. n —评估点数
    512(默认)| 正整数标量
    指定为不小于2的正整数标量的评估点数。如果不存在n,则默认为512。为获得最佳结果,请将n设置为大于过滤器阶数的值。

    数据类型:双精度

  3. sos —二阶截面系数矩阵
    二阶截面系数,指定为矩阵。
    sos是一个K×6矩阵,其中部分数K必须大于或等于2。如果部分数小于2,freqz会将输入视为分子向量。 sos的每一行都对应一个二阶(双二阶)滤波器的系数。 sos的第i行对应于[bi(1)bi(2)bi(3)ai(1)ai(2)ai(3)]。

    示例:s = [2 4 2 6 0 2; 3 3 0 6 0 0]指定具有标准化3-dB频率0.5πrad /样本的三阶巴特沃斯滤波器。

    数据类型:double | 单
    复数支持:是

  4. d-数字滤波器
    digitalFilter对象
    数字滤波器,指定为digitalFilter对象。 使用designfilt根据频率响应规范生成数字滤波器。

    示例:d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5)指定具有标准化3-dB频率0.5πrad /样本的三阶巴特沃斯滤波器。

  5. fs —采样率
    正标量
    采样率,指定为正标量。 当时间单位为秒时,fs以赫兹表示。

    数据类型:双精度

  6. w —角频率
    向量
    角频率,指定为向量,以弧度/样本表示。 w必须至少包含两个元素。 w =π对应于奈奎斯特频率。

  7. f —频率
    向量
    频率,指定为向量。 f必须至少包含两个元素。 当时间单位为秒时,f以赫兹表示。

    数据类型:双精度
     

  • 输出:
  1. h-频率响应向量
    频率响应,以向量形式返回。如果指定n,则h的长度为n。如果您未指定n或将n指定为空向量,则h的长度为512。
  2. w —角频率向量
    角频率,作为矢量返回。 w的取值范围是0到π。如果在输入中指定“ whole”,则w中的值范围为0到2π。如果指定n,则w的长度为n。如果您未指定n或将n指定为空向量,则w的长度为512。
  3. f —频率向量
    频率,作为以赫兹表示的向量返回。 f的取值范围是0到fs / 2 Hz。如果在输入中指定“ whole”,则f中的值范围为0到fs Hz。如果指定n,则f的长度为n。如果您未指定n或将n指定为空向量,则f的长度为512。
  • 算法
    数字滤波器的频率响应可以解释为在z =ejω[1]处评估的传递函数。
    freqz从您指定的(实数或复数)分子和分母多项式确定传递函数,并返回数字滤波器的复数频率响应H(ejω)。在使用的语法确定的采样点上评估频率响应。
    当您不提供频率向量作为输入参数时,freqz通常使用FFT算法来计算频率响应。它将频率响应计算为变换后的分子和分母系数的比率,并用零填充到所需的长度。
    当您确实提供了一个频率向量作为输入参数时,freqz使用霍纳的嵌套多项式求值方法对每个频率点处的多项式求值,将分子响应除以分母响应。

(五)使用举例:

  1. 计算并显示由以下传递函数描述的三阶IIR低通滤波器的幅度响应:

    将分子和分母表示为多项式卷积。 在整个单位圆上的2001个点处找到频率响应。
    b0 = 0.05634;
    b1 = [1  1];
    b2 = [1 -1.0166 1];
    a1 = [1 -0.683];
    a2 = [1 -1.4461 0.7957];
    
    b = b0*conv(b1,b2);
    a = conv(a1,a2);
    
    [h,w] = freqz(b,a,'whole',2001);
    plot(w/pi,20*log10(abs(h)))
    ax = gca;
    ax.YLim = [-100 20];
    ax.XTick = 0:.5:2;
    xlabel('Normalized Frequency (\times\pi rad/sample)')
    ylabel('Magnitude (dB)')

  2.  
  3. 使用的Kaiser窗口设计80阶FIR低通滤波器。 指定归一化截止频率rad / sample。
    显示滤波器的幅度和相位响应。
    b = fir1(80,0.5,kaiser(81,8));
    freqz(b,1)


    用designfilt设计相同的滤波器,用fdatool绘制它的幅频和相频响应:
     

    d = designfilt('lowpassfir','FilterOrder',80, ...
                   'CutoffFrequency',0.5,'Window',{'kaiser',8});
    freqz(d)
    
发布了38 篇原创文章 · 获赞 73 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/woshiyuzhoushizhe/article/details/102494769