设计巴特沃斯IIR滤波器可使用butter函数和buttord函数。
第一:使用buttord函数先求得最小阶数和截止频率:[n,Wn]= buttord(Wp,Ws,Rp,Rs)。
理解:上式中n代表滤波器阶数,Wn代表滤波器的截止频率,这两个参数可使用buttord函数来确定。简单来说,就是在Wp处,通带内波纹系数或者说是通带内达到最大衰减为Rp,如(3db),而在Ws处,阻带达到最小衰减为Rs(如40db),而我们默认求得的Wn是在(-3db)时的频率。所以:When Rp is chosen as 3 dB, the Wn in BUTTER is equal to Wp in BUTTORD.
1、buttord
函数含义:设计巴特沃思滤波器(阶数和截止频率等参数要确定)
函数使用形式: [n,Wn] = buttord(Wp,Ws,Rp,Rs)
[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s')
[n,Wn] = buttord(Wp,Ws,Rp,Rs)返回数字巴特沃思滤波器的最低阶n,通带纹波不超过Rp dB,阻带衰减至少Rs dB。
Wp和Ws分别是滤波器的通带和阻带边沿频率,归一化为0到1,其中1对应于πrad / sample。
还返回相应的截止频率Wn的标量(或矢量)。
要设计巴特沃斯滤波器,请使用输出参数n和Wn作为butter的输入。
[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s')查找模拟巴特沃思滤波器的最小阶数n和截止频率Wn。 以弧度每秒为单位指定频 率 Wp和Ws。 通带或阻带可以是无限的。
(1)n —最低滤波器阶数
整数标
最低的滤波器阶数,以整数标量返回。
(2) Wn-截止频率
标量| 向量
截止频率,以标量或矢量形式返回。
(3) Wp —通带截止频率
标量| 二元向量
通带截止频率,指定为标量或二元向量,值在0到1之间,其中1对应于归一化的奈奎斯特频率πrad / sample。
如果Wp和Ws均为标量且Wp (4)Ws —阻带截止频率 阻带截止频率,指定为标量或二元向量,值在0到1之间,其中1对应于归一化的奈奎斯特频率πrad / sample。 数据类型:单| 双 (5)Rp-通带纹波 通带纹波,指定为标量,单位为dB。 数据类型:单| 双 (6)Rs-阻带衰减 数据类型:单| 双 Buttord的阶数预测公式适用于模拟和数字情况下的模拟范围。 举例: 对于以1000 Hz采样的数据,设计一个低通滤波器,其0至40 Hz的通带中的波纹不应超过3 dB,阻带的衰减至少应为60 dB。 查找滤波器阶数和截止频率。 根据二阶部分指定滤波器,并绘制频率响应。 结果为: 2、butter (1)Wn-截止频率 如果Wn是标量,则butter将设计一个截止频率为Wn的低通或高通滤波器。 (2) ftype —过滤器类型 “low”指定截止频率为Wn的低通滤波器。 “low”是标量Wn的默认值。 (3)b,a-传递函数系数 对于数字滤波器,传递函数用b和a表示为 对于模拟滤波器,传递函数用b和a表示为 z,p,k-零点,极点和增益 对于数字滤波器,传递函数用z,p和k表示为 A,B,C,D —状态空间矩阵 对于数字滤波器,状态空间矩阵通过以下方式将状态向量x,输入u和输出y相关联: 举例: 设计一个截止频率为300 Hz的6阶低通巴特沃斯滤波器,对于以1000 Hz采样的数据,其对应于rad / sample。 绘制其幅度和相位响应。 用它来过滤1000个样本的随机信号。 设计6阶Butterworth带阻滤波器归一化的边沿频率为rad/sample。 dataIn = randn(1000,1); 高通巴特沃斯滤波器 设计一个9阶高通巴特沃斯滤波器。 指定300 Hz的截止频率,对于以1000 Hz采样的数据,它对应于rad / sample。 绘制幅度和相位响应。 将零,极点和增益转换为二阶部分,以供fvtool使用。 带通巴特沃斯滤波器 设计一个20阶Butterworth带通滤波器,其较低的截止频率为500 Hz,较高的截止频率为560 Hz。 指定1500 Hz的采样率。 使用状态空间表示。 使用designfilt设计一个相同的过滤器。 将状态空间表示形式转换为二阶部分。 使用fvtool可视化频率响应。 模拟IIR低通滤波器的比较 设计一个截止频率为2 GHz的5阶模拟Butterworth低通滤波器。 乘以将频率转换为每秒弧度。 计算滤波器在4096点的频率响应。 Design a 5th-order Chebyshev Type I filter with the same edge frequency and 3 dB of passband ripple. Compute its frequency response. Design a 5th-order Chebyshev Type II filter with the same edge frequency and 30 dB of stopband attenuation. Compute its frequency response. Design a 5th-order elliptic filter with the same edge frequency, 3 dB of passband ripple, and 30 dB of stopband attenuation. Compute its frequency response. Plot the attenuation in decibels. Express the frequency in gigahertz. Compare the filters. Butterworth和Chebyshev II型滤波器具有平坦的通带和较宽的过渡带。 Chebyshev I型和椭圆滤波器的滚降速度更快,但具有通带纹波。 Chebyshev II型设计功能的输入频率设置了阻带的开始而不是通带的结束。
如果Wp和Ws都是向量,并且由Ws指定的间隔包含由Wp指定的间隔(Ws(1)
标量| 二元向量
标量
标量
阻带衰减,指定为标量,单位为dB。
对于数字情况,它将在估计阶数和固有频率之前将频率参数转换为s域。 然后,该函数将转换回z域。
buttord最初通过将所需滤波器的通带频率转换为1 rad / second(对于低通和高通滤波器)以及–1和1 rad / second(对于带通和带阻滤波器)来开发低通滤波器原型。 然后,它计算低通滤波器满足阻带规格所需的最小阶数。Wp = 40/500;
Ws = 150/500;
[n,Wn] = buttord(Wp,Ws,3,60)
结果为:
n = 5
Wn = 0.0810
[z,p,k] = butter(n,Wn);
sos = zp2sos(z,p,k);
freqz(sos,512,1000)
title(sprintf('n = %d Butterworth Lowpass Filter',n))
[b,a] = butter(n,Wn)
[b,a] = butter(n,Wn,ftype)
[z,p,k] = butter(___)
[A,B,C,D] = butter(___)
[___] = butter(___,'s')
[b,a] = butter(n,Wn)返回归一化截止频率Wn的n阶低通数字巴特沃斯滤波器的传递函数系数。
例
[b,a] = butter(n,Wn,ftype)根据ftype的值和Wn的元素数来设计低通,高通,带通或带阻Butterworth滤波器。最终的带通和带阻设计约为2n。
注意:有关影响形成传递函数的数值问题的信息,请参阅限制。
例
[z,p,k] = butter(___)设计一个低通,高通,带通或带阻数字巴特沃斯滤波器,并返回其零,极点和增益。该语法可以包括先前语法中的任何输入参数。
例
[A,B,C,D] = butter(___)设计一个低通,高通,带通或带阻数字Butterworth滤波器,并返回指定其状态空间表示形式的矩阵。
例
[___] = butter(___,'s)设计一个截止角频率为Wn的低通,高通,带通或带阻模拟巴特沃斯滤波器。n —滤波器阶数
整数标量
滤波器的阶数,指定为整数标量。数据类型:双精度
标量| 二元向量
截止频率,指定为标量或二元素矢量。 截止频率是滤波器的幅度响应为1 /√2的频率。
如果Wn是二元素矢量[w1 w2],其中w1
对于模拟滤波器,截止频率必须以弧度/秒表示,并且可以取任何正值。
数据类型:双精度
“low” | “bandpass” | 'high'| 'stop'
过滤器类型,指定为以下之一:
“high”指定截止频率为Wn的高通滤波器。
如果Wn是一个二元素矢量,则“ bandpass”指定2n阶的带通滤波器。 当Wn具有两个元素时,默认设置为'bandpass'。
如果Wn是二元素矢量,则“ stop”指定2n阶的带阻滤波器。
行向量
滤波器的传递函数系数,对于低通和高通滤波器,返回为长度n + 1的行向量;对于带通和带阻滤波器,返回为2n + 1的行向量。
列向量,标量
滤波器的零点,极点和增益作为长度为n的两个列向量(对于带通和带阻设计为2n)和一个标量返回。
矩阵
过滤器的状态空间表示形式,以矩阵形式返回。 如果对于低通和高通设计,m = n,对于带通和带阻滤波器,m = 2n,则A为m×m,B为m×1,C为1×m,D为1×1。fc = 300;
fs = 1000;
[b,a] = butter(6,fc/(fs/2));
freqz(b,a)
dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);
绘制其幅度和相位响应。 用它来过滤随机数据。[b,a] = butter(3,[0.2 0.6],'stop');
freqz(b,a)
dataOut = filter(b,a,dataIn);[z,p,k] = butter(9,300/500,'high');
sos = zp2sos(z,p,k);
fvtool(sos,'Analysis','freq')
[A,B,C,D] = butter(10,[500 560]/750);
d = designfilt('bandpassiir','FilterOrder',20, ...
'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
'SampleRate',1500);
sos = ss2sos(A,B,C,D);
fvt = fvtool(sos,d,'Fs',1500);
legend(fvt,'butter','designfilt')
n = 5;
f = 2e9;
[zb,pb,kb] = butter(n,2*pi*f,'s');
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,4096);
[z1,p1,k1] = cheby1(n,3,2*pi*f,'s');
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,4096);
[z2,p2,k2] = cheby2(n,30,2*pi*f,'s');
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,4096);
[ze,pe,ke] = ellip(n,3,30,2*pi*f,'s');
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,4096);
plot(wb/(2e9*pi),mag2db(abs(hb)))
hold on
plot(w1/(2e9*pi),mag2db(abs(h1)))
plot(w2/(2e9*pi),mag2db(abs(h2)))
plot(we/(2e9*pi),mag2db(abs(he)))
axis([0 4 -40 5])
grid
xlabel('Frequency (GHz)')
ylabel('Attenuation (dB)')
legend('butter','cheby1','cheby2','ellip')