主要内容

freqz

数字滤波器的频率响应

说明

[h,w] = freqz(b,a,n) 返回指定数字滤波器的频率响应。指定一个具有分子系数 b 和分母系数 a 的数字滤波器。该函数在 h 中返回 n 点频率响应向量和返回对应的角频率向量 w

示例

[h,w] = freqz(B,A,"ctf",n) 返回表示为Cascaded Transfer Functions (CTF) 的数字滤波器的 n 点频率响应,分子系数为 B,分母系数为 A (自 R2024b 起)

示例

[h,w] = freqz({B,A,g},"ctf",n) 返回 CTF 格式的数字滤波器的 n 点频率响应。指定具有分子系数 B、分母系数 A 和跨滤波器节的尺度值 g 的滤波器。 (自 R2024b 起)

示例

[h,w] = freqz(d,n) 返回数字滤波器 dn 点复频率响应。

示例

[h,w] = freqz(sos,n) 返回与二阶节矩阵 sos 对应的 n 点复频率响应。

示例

[h,w] = freqz(___,n,"whole") 返回整个单位圆周围 n 个采样点的频率响应。

[h,f] = freqz(___,n,fs) 返回数字滤波器的频率响应向量 h 和对应的物理频率向量 f,该数字滤波器经过设计,可以对以速率 fs 采样的信号进行滤波。

[h,f] = freqz(___,n,"whole",fs) 返回介于 0 与 fs 之间的 n 个点的频率向量。

h = freqz(___,w) 返回以 w 中提供的归一化频率计算的频率响应向量 h

h = freqz(___,f,fs) 返回以 f 中提供的物理频率计算的频率响应向量 h

不带输出参量的 freqz(___) 用于绘制滤波器的频率响应。

示例

示例

全部折叠

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

H(z)=0.05634(1+z-1)(1-1.0166z-1+z-2)(1-0.683z-1)(1-1.4461z-1+0.7957z-2).

将分子和分母表示为多项式卷积。求分布在整个单位圆上的 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)')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

自 R2024b 起

设计一个 40 阶低通切比雪夫 II 型数字滤波器,阻带边缘频率为 0.4,阻带衰减为 50 dB。使用 CTF 格式的滤波器的系数绘制滤波器的频率响应。

[B,A] = cheby2(40,50,0.4,"ctf");

freqz(B,A,"ctf")

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

设计一个 30 阶带通椭圆数字滤波器,通带边缘频率为 0.3 和 0.7,通带波纹为 0.1 dB,阻带衰减为 50 dB。使用 CTF 格式的滤波器的系数和增益,绘制滤波器的频率响应。

[B,A,g] = ellip(30,0.1,50,[0.3 0.7],"ctf");
freqz({B,A,g},"ctf")

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

使用 β=8 的凯塞窗设计 80 阶 FIR 低通滤波器。指定归一化截止频率为 0.5π 弧度/采样点。显示滤波器的幅值和相位响应。

b = fir1(80,0.5,kaiser(81,8));
freqz(b,1)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

使用 designfilt 设计相同的滤波器。显示其幅值和相位响应。

d = designfilt("lowpassfir",FilterOrder=80, ...
    CutoffFrequency=0.5,Window={"kaiser",8});
freqz(d)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

设计一个 FIR 带通滤波器,通带在 0.35π0.8π 弧度/采样点之间,波纹为 3 dB。第一个阻带是从 00.1π 弧度/采样点,衰减为 40 dB。第二个阻带是从 0.9π 弧度/采样点到奈奎斯特频率,衰减为 30 dB。计算频率响应。同时以线性单位和分贝绘制其幅值。突出显示通带。

sf1 = 0.1;
pf1 = 0.35;
pf2 = 0.8;
sf2 = 0.9;
pb = linspace(pf1,pf2,1e3)*pi;

bp = designfilt("bandpassfir", ...
    StopbandAttenuation1=40,StopbandFrequency1=sf1, ...
    PassbandFrequency1=pf1,PassbandRipple=3, ...
    PassbandFrequency2=pf2,StopbandFrequency2=sf2, ...
    StopbandAttenuation2=30);

[h,w] = freqz(bp,1024);
hpb = freqz(bp,pb);

subplot(2,1,1)
plot(w/pi,abs(h),pb/pi,abs(hpb),'.-')
axis([0 1 -1 2])
legend("Response","Passband",Location="south")
ylabel("Magnitude")

subplot(2,1,2)
plot(w/pi,db(h),pb/pi,db(hpb),".-")
axis([0 1 -60 10])
xlabel("Normalized Frequency (\times\pi rad/sample)")
ylabel("Magnitude (dB)")

Figure contains 2 axes objects. Axes object 1 with ylabel Magnitude contains 2 objects of type line. These objects represent Response, Passband. Axes object 2 with xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains 2 objects of type line.

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

H(z)=0.05634(1+z-1)(1-1.0166z-1+z-2)(1-0.683z-1)(1-1.4461z-1+0.7957z-2).

用二阶节表示传递函数。求分布在整个单位圆上的 2001 个点上的频率响应。

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

sos1 = [b0*[b1 0] [a1 0]];
sos2 = [b2 a2];

[h,w] = freqz([sos1;sos2],'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)')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

输入参数

全部折叠

传递函数系数,指定为向量。用 ba 将传递函数表示为

H(z)=B(z)A(z)=b1+b2z1+bnz(n1)+bn+1zna1+a2z1+amz(m1)+am+1zm

示例: b = [1 3 3 1]/6a = [3 0 1 0]/3 用于指定归一化 3 dB 频率为 0.5π 弧度/采样点的三阶巴特沃斯滤波器。

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

要在其上计算响应的频率点的数量,指定为不小于 2 的正整数标量。当 n 不存在时,它默认为 512。为了获得最佳效果,请将 n 设置为大于滤波器阶数的值。

自 R2024b 起

级联传递函数 (CTF) 系数,指定为标量、向量或矩阵。BA 分别列出级联传递函数的分子系数和分母系数。

B 的大小必须为 L×(m + 1),A 的大小必须为 L×(n + 1),其中:

  • L 表示滤波器节的数量。

  • m 表示滤波器分子的阶。

  • n 表示滤波器分母的阶。

有关级联传递函数格式和系数矩阵的详细信息,请参阅以 CTF 格式指定数字滤波器

注意

如果 A(:,1) 的任一元素不等于 1,则 freqzA(:,1) 对滤波器系数进行归一化。在这种情况下,A(:,1) 必须为非零。

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

自 R2024b 起

尺度值,指定为具有 L + 1 个元素的实数值标量或实数值向量,其中 L 是 CTF 节的数量。尺度值表示滤波器增益在级联滤波器表示的各节之间的分布。

freqz 函数使用 scaleFilterSections 函数将增益应用于滤波器节,具体取决于您如何指定 g

  • 标量 - 函数将增益均匀分布在所有滤波器节上。

  • 向量 - 函数将前 L 个增益值应用于对应的滤波器节,并将最后一个增益值均匀分布在所有滤波器节上。

数据类型: double | single

数字滤波器,指定为 digitalFilter 对象。使用 designfilt 根据频率响应设定生成数字滤波器。

示例: d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) 用于指定归一化 3 dB 频率为 0.5π 弧度/采样点的三阶巴特沃斯滤波器。

二阶节系数,指定为矩阵。sosK×6 矩阵,其中节数 K 必须大于或等于 2。如果节数小于 2,该函数将输入视为分子向量。sos 的每行对应于二阶 (biquad) 滤波器的系数。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π 弧度/采样点的三阶巴特沃斯滤波器。

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

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

数据类型: double

角频率,指定为向量并以弧度/采样点表示。w 必须至少包含两个元素,否则该函数会将其解释为 nw = π 对应于奈奎斯特频率。

频率,指定为向量。f 必须至少包含两个元素,否则该函数会将其解释为 n。当时间单位为秒时,f 以赫兹表示。

数据类型: double

输出参量

全部折叠

频率响应,以向量形式返回。如果指定 n,则 h 的长度为 n。如果未指定 n,或指定 n 为空向量,则 h 的长度为 512。

如果 freqz 的输入是单精度值,则该函数使用单精度算术运算计算频率响应。输出 h 是单精度值。

角频率,以向量形式返回。w 值的范围是从 0 到 π。如果在输入中指定 'whole',则 w 中的值的范围是从 0 到 2π。如果指定 n,则 w 的长度为 n。如果未指定 n,或指定 n 为空向量,则 w 的长度为 512。

频率,以单位为赫兹的向量形式返回。f 的值的范围是从 0 到 fs/2 Hz。如果在输入中指定 'whole',则 f 中的值的范围是从 0 到 fs Hz。如果指定 n,则 f 的长度为 n。如果未指定 n,或指定 n 为空向量,则 f 的长度为 512。

详细信息

全部折叠

提示

  • 您可以获得 CTF 格式的滤波器,包括缩放增益。使用数字 IIR 滤波器设计函数的输出,例如 buttercheby1cheby2ellip。在这些函数中指定 "ctf" 滤波器类型参量,并指定返回 BAg 以获取尺度值。 (自 R2024b 起)

  • 如果您有不可约多速率滤波器,请使用 freqzmr (DSP System Toolbox) 函数在频域中分析该滤波器。有关不可约多速率滤波器的详细信息,请参阅Overview of Multirate Filters (DSP System Toolbox) (自 R2024a 起)

  • freqzmr (DSP System Toolbox) 函数需要 DSP System Toolbox™。 (自 R2024a 起)

算法

数字滤波器的频率响应可以解释为在 z = e [1] 处对传递函数进行求值。

freqz 根据您指定的(实数或复数)分子和分母多项式确定传递函数,并返回数字滤波器的复频率响应 H(e)。频率响应在您使用的语法所确定的采样点处计算。

freqz 通常使用 FFT 算法来计算频率响应,但前提是您不提供频率向量作为输入参量。它将频率响应计算为变换后的分子和分母系数之比,并用零填充至所需长度。

当您提供频率向量作为输入时,freqz 在每个频率点处计算多项式,并将分子响应除以分母响应。为了计算多项式,该函数使用霍纳方法。

参考

[1] Oppenheim, Alan V., and Ronald W. Schafer, with John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开