主要内容

prony

R2026b

用于滤波器设计的 Prony 方法

描述

[b,a] = prony(h,bord,aord) 返回因果有理传递函数的分子系数和分母系数(冲激响应为 h,分子阶数为 bord,分母阶数为 aord)。

示例

示例

全部折叠

对低通滤波器的冲激响应进行 4 阶 IIR 模型拟合。绘制原始冲激响应和 Prony 设计的冲激响应。

d = designfilt("lowpassiir",NumeratorOrder=4,DenominatorOrder=4, ...
    HalfPowerFrequency=0.2,DesignMethod="butter");

h = filter(d,[1 zeros(1,31)]);
bord = 4;
aord = 4;
[b,a] = prony(h,bord,aord);

tiledlayout("flow")
nexttile
stem(impz(b,a,length(h)))
title("Impulse Response with Prony Design")
nexttile
stem(h)
title("Input Impulse Response")

Figure contains 2 axes objects. Axes object 1 with title Impulse Response with Prony Design contains an object of type stem. Axes object 2 with title Input Impulse Response contains an object of type stem.

对高通滤波器的冲激响应进行 10 阶 FIR 模型拟合。绘制原始频率响应和 Prony 设计的频率响应。响应匹配精确度很高。

d = designfilt("highpassfir",FilterOrder=10,CutoffFrequency=0.8);

h = filter(d,[1 zeros(1,31)]);
bord = 10;
aord = 0;
[b,a] = prony(h,bord,aord);

[hp,f] = freqz(b,a);
[hd,fd] = freqz(d);

figure
plot(f/pi,mag2db(abs(hp)),fd/pi,mag2db(abs(hd)))
legend(["Prony" "Original"])

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Prony, Original.

输入参数

全部折叠

冲激响应,指定为向量。

示例: impz(fir1(20,0.5)) 指定一个 20 阶 FIR 滤波器的冲激响应,其归一化截止频率为 π/2 弧度/采样点。

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

分子和分母阶数,指定为正整数标量。如果 h 的长度小于 max(bord,aord),则该函数用零填充冲激响应。

  • 如果您需要全极点传递函数,请将 bord 指定为 0。

  • 如果您需要全零点传递函数,请将 aord 指定为 0。

数据类型: single | double

输出参量

全部折叠

传递函数系数,以向量形式返回。b 的长度为 bord + 1,a 的长度为 aord + 1。

详细信息

全部折叠

参考

[1] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York, NY, USA: Wiley-Interscience, 1987.

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2006a 之前推出

全部展开