Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

freqz

数字滤波器的频率响应

说明

示例

[h,w] = freqz(b,a,n) 返回数字滤波器的 n 点频率响应向量 h 和对应的角频率向量 w,滤波器的传递函数系数分别存储在 ba 中。

示例

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

示例

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

[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.

计算并显示由以下传递函数描述的三阶 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.

使用 β=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 Figure 1: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response, xlabel Normalized Frequency ( times pi blank 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.

输入参数

全部折叠

传递函数系数,指定为向量。用 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 设置为大于滤波器阶数的值。

二阶节系数,指定为矩阵。sos 是 K×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
复数支持:

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

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

采样率,指定为正标量。当时间单位为秒时,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。

算法

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

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

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

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

参考

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

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开