Main Content

cheby1

切比雪夫 I 型滤波器设计

说明

示例

[b,a] = cheby1(n,Rp,Wp) 返回具有归一化通带边缘频率 WpRp 分贝峰间通带波纹的 n 阶低通数字切比雪夫 I 型滤波器的传递函数系数。

示例

[b,a] = cheby1(n,Rp,Wp,ftype) 用于根据 ftype 的值和 Wp 的元素数目,设计低通、高通、带通或带阻切比雪夫 I 型滤波器。由此得到的带通和带阻设计的阶数都为 2n

注意:有关影响传递函数形成的数值问题的信息,请参阅限制

示例

[z,p,k] = cheby1(___) 用于设计低通、高通、带通或带阻数字切比雪夫 I 型滤波器,并返回其零点、极点和增益。此语法可包含上述语法中的任何输入参量。

示例

[A,B,C,D] = cheby1(___) 用于设计低通、高通、带通或带阻数字切比雪夫 I 型滤波器,并返回指定其状态空间表示的矩阵。

示例

[___] = cheby1(___,'s') 设计低通、高通、带通或带阻模拟切比雪夫 I 型滤波器,通带边缘角频率为 Wp,通带波纹为 Rp 分贝。

示例

全部折叠

设计一个 6 阶低通切比雪夫 I 型滤波器,通带波纹为 10 dB,通带边缘频率为 300 Hz(对于以 1000 Hz 采样的数据,对应于 0.6π 弧度/采样点)。绘制其幅值和相位响应。用它对长度为 1000 个采样的随机信号进行滤波。

fc = 300;
fs = 1000;

[b,a] = cheby1(6,10,fc/(fs/2));

freqz(b,a,[],fs)

subplot(2,1,1)
ylim([-100 20])

dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);

设计一个 6 阶切比雪夫 I 型带阻滤波器,归一化边缘频率为 0.2π0.6π 弧度/采样点,通带波纹为 5 dB。绘制其幅值和相位响应。用它对随机数据进行滤波。

[b,a] = cheby1(3,5,[0.2 0.6],'stop');
freqz(b,a)

dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);

设计一个 9 阶高通切比雪夫 I 型滤波器,通带波纹为 0.5 dB,通带边缘频率为 300 Hz(对于以 1000 Hz 采样的数据,对应于 0.6π 弧度/采样点)。将零点、极点和增益转换为二阶节。绘制滤波器的幅值和相位响应。

[z,p,k] = cheby1(9,0.5,300/500,'high');
sos = zp2sos(z,p,k);
freqz(sos)

设计一个 20 阶切比雪夫 I 型带通滤波器,通带频率下限为 400 Hz,通带频率上限为 560 Hz。指定通带波纹为 3 dB、采样率为 1500 Hz。使用状态空间表示。

fs = 1500;

[A,B,C,D] = cheby1(10,3,[400 560]/(fs/2));

将状态空间表示转换为二阶节,并可视化滤波器响应。

sos = ss2sos(A,B,C,D);
freqz(sos,[],fs)

使用 designfilt 设计一个相同的滤波器。可视化滤波器响应。

d = designfilt("bandpassiir",FilterOrder=20, ...
    PassbandFrequency1=400,PassbandFrequency2=560, ...
    PassbandRipple=3,SampleRate=fs);
freqz(d,[],fs)

设计截止频率为 2 GHz 的五阶模拟巴特沃斯低通滤波器。乘以 2π 以将频率转换为弧度/秒。计算滤波器在 4096 个点上的频率响应。

n = 5;
fc = 2e9;

[zb,pb,kb] = butter(n,2*pi*fc,"s");
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,4096);

设计一个具有相同边缘频率和 3 dB 通带波纹的五阶切比雪夫 I 型滤波器。计算它的频率响应。

[z1,p1,k1] = cheby1(n,3,2*pi*fc,"s");
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,4096);

设计一个具有相同边缘频率和 30 dB 阻带衰减的 5 阶切比雪夫 II 型滤波器。计算它的频率响应。

[z2,p2,k2] = cheby2(n,30,2*pi*fc,"s");
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,4096);

设计一个具有相同边缘频率和 3 dB 通带波纹、30 dB 阻带衰减的五阶椭圆滤波器。计算它的频率响应。

[ze,pe,ke] = ellip(n,3,30,2*pi*fc,"s");
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,4096);

设计一个具有相同边缘频率的 5 阶贝塞尔滤波器。计算它的频率响应。

[zf,pf,kf] = besself(n,2*pi*fc);
[bf,af] = zp2tf(zf,pf,kf);
[hf,wf] = freqs(bf,af,4096);

对衰减绘图,以分贝为单位。以千兆赫为单位表示频率。比较滤波器。

plot([wb w1 w2 we wf]/(2e9*pi), ...
    mag2db(abs([hb h1 h2 he hf])))
axis([0 5 -45 5])
grid
xlabel("Frequency (GHz)")
ylabel("Attenuation (dB)")
legend(["butter" "cheby1" "cheby2" "ellip" "besself"])

巴特沃斯和切比雪夫 II 型滤波器具有平坦的通带和宽过渡带。切比雪夫 I 型和椭圆滤波器转降更快,但有通带波纹。切比雪夫 II 型设计函数的频率输入设置阻带的起点,而不是通带的终点。贝塞尔滤波器沿通带具有大致恒定的群延迟。

输入参数

全部折叠

滤波器阶数,指定为整数标量。对于带通和带阻设计,n 表示滤波器阶数的一半。

数据类型: double

峰间通带波纹,指定为正标量,以分贝表示。

如果您的设定 ℓ 采用线性单位,您可以使用 Rp = 40 log10((1+ℓ)/(1–ℓ)) 将其转换为分贝。

数据类型: double

通带边缘频率,指定为标量或二元素向量。通带边缘频率是滤波器幅值响应为 -Rp 时的频率。通带波纹 Rp 的值越小,过渡带越宽。

  • 如果 Wp 是标量,则 cheby1 设计的是边缘频率为 Wp 的低通或高通滤波器。

    如果 Wp 是二元素向量 [w1 w2],其中 w1 < w2,则 cheby1 设计的是边缘频率下限为 w1 且边缘频率上限为 w2 的带通或带阻滤波器。

  • 对于数字滤波器,通带边缘频率必须介于 0 与 1 之间,其中 1 对应于奈奎斯特速率(即采样率的一半)或 π 弧度/采样点。

    对于模拟滤波器,通带边缘频率必须用弧度/秒表示,并且可以取任何正值。

数据类型: double

滤波器类型,指定为以下项之一:

  • 'low' 指定通带边缘频率为 Wp 的低通滤波器。'low' 是标量 Wp 的默认值。

  • 'high' 指定通带边缘频率为 Wp 的高通滤波器。

  • 如果 Wp 是二元素向量,则 'bandpass' 指定阶数为 2n 的带通滤波器。当 Wp 有两个元素时,'bandpass' 是默认值。

  • 如果 Wp 是二元素向量,则 'stop' 指定阶数为 2n 的带阻滤波器。

输出参量

全部折叠

滤波器的传递函数系数,对于低通滤波器和高通滤波器,以长度为 n + 1 的行向量形式返回;对于带通滤波器和带阻滤波器,以长度为 2n + 1 的行向量形式返回。

  • 对于数字滤波器,传递函数用 ba 表示为

    H(z)=B(z)A(z)=b(1)+b(2)z1++b(n+1)zna(1)+a(2)z1++a(n+1)zn.

  • 对于模拟滤波器,传递函数用 ba 表示为

    H(s)=B(s)A(s)=b(1)sn+b(2)sn1++b(n+1)a(1)sn+a(2)sn1++a(n+1).

数据类型: double

滤波器的零点、极点和增益,以长度为 n(对于带通和带阻设计则为 2n)的两个列向量以及标量形式返回。

  • 对于数字滤波器,传递函数用 zpk 表示为

    H(z)=k(1z(1)z1)(1z(2)z1)(1z(n)z1)(1p(1)z1)(1p(2)z1)(1p(n)z1).

  • 对于模拟滤波器,传递函数用 zpk 表示为

    H(s)=k(sz(1))(sz(2))(sz(n))(sp(1))(sp(2))(sp(n)).

数据类型: double

滤波器的状态空间表示,以矩阵形式返回。如果 m = n(对于低通和高通设计)或 m = 2n(对于带通和带阻滤波器),则 A 为 m×m,B 为 m×1,C 为 1×m,而 D 为 1×1。

  • 对于数字滤波器,状态空间矩阵与状态向量 x、输入 u 和输出 y 存在以下关系

    x(k+1)=Ax(k)+Bu(k)y(k)=Cx(k)+Du(k).

  • 对于模拟滤波器,状态空间矩阵通过以下方程将状态向量 x、输入 u 和输出 y 相关

    x˙=Ax+Buy=Cx+Du.

数据类型: double

详细信息

全部折叠

限制

传递函数语法的数值不稳定性

通常,使用 [z,p,k] 语法来设计 IIR 滤波器。要分析或实现您的滤波器,您可以将 [z,p,k] 输出与 zp2sos 结合使用。如果使用 [b,a] 语法设计滤波器,则可能会遇到数值问题。这些问题是舍入误差所导致的,可能会在 n 小至 4 时出现。以下示例说明了这种限制。

n = 6; 
Rp = 0.1;
Wn = [2.5e6 29e6]/500e6;
ftype = 'bandpass';

% Transfer function design
[b,a] = cheby1(n,Rp,Wn,ftype);      % This filter is unstable

% Zero-pole-gain design
[z,p,k] = cheby1(n,Rp,Wn,ftype);
sos = zp2sos(z,p,k);

% Plot and compare the results
[h,f] = freqz(b,a,8192);
hsos = freqz(sos,8192);

semilogx(f/pi,mag2db(abs([h hsos])))
grid
legend('TF Design','ZPK Design')
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

算法

切比雪夫 I 型滤波器在通带中采用等波纹,在阻带中呈现单调性。I 型滤波器的滚降速度比 II 型滤波器快,但前者在通带内的单位偏差更大。

cheby1 使用一个五步算法:

  1. 它使用函数 cheb1ap 查找低通模拟原型的极点、零点和增益。

  2. 它将极点、零点和增益转换为状态空间形式。

  3. 如果需要,它使用状态空间变换将低通滤波器变换为具有所需频率约束的高通、带通或带阻滤波器。

  4. 对于数字滤波器设计,它使用 bilinear 通过具有频率预修正的双线性变换将模拟滤波器转换为数字滤波器。经过仔细调整频率,模拟滤波器和数字滤波器在 Wpw1w2 处可具有相同的频率响应幅值。

  5. 根据需要,它将状态空间滤波器转换回传递函数或零极点增益形式。

扩展功能

版本历史记录

在 R2006a 之前推出