matlab中butter和buttap函数的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中butter和buttap函数的区别相关的知识,希望对你有一定的参考价值。
如题,这是Signal Processing Toolbox中的两个函数,在用来设计数字滤波器时对这两个函数的用途产生的疑惑,望懂的人帮个忙。
buttap(n) returns the poles and gain of an order n Butterworth analog lowpass filter prototype.butter designs lowpass, bandpass, highpass, and bandstop digital and analog Butterworth filters.
从这两条注释可以看出,butter可以直接设计数字滤波器,而buttap则设计出模拟滤波器,需要设计数字滤波器时,则需要用双线性变换、脉冲响应不变等方法再转换。 参考技术A 滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程。滤波器的实现包括滤波器结构的选择和滤波器参数的计算。只有完成了滤波器的设计和实现,才能最终完成数据的滤波。
滤波器设计的目标是实现数据序列的频率成分变更。严格的设计规格需要指定通带波纹数、阻带衰减、过渡带宽度等。更准确的指定可能需要实现最小阶数的滤波器、需要实现任意形状的滤波器形状或者需要用fir滤波器实现。指定的要求不同,滤波器的设计也不同。
Matlab的信号处理工具箱软件提供了两种方式设计滤波器:面向对象的和非面向对象的。面向对象的方法首先创建一个滤波器对象fdesign,然后调用合适的design参数设计。如实现一个5阶的低通巴特沃斯滤波器,3dB截止频率为200Hz,采样频率1000Hz,代码如下
Fs=1000; %Sampling Frequency
time = 0:(1/Fs):1; %time vector
% Data vector
x = cos(2*pi*60*time)+sin(2*pi*120*time)+randn(size(time));
d=fdesign.lowpass('N,F3dB',5,200,Fs); %lowpass filter specification object
% Invoke Butterworth design method
Hd=design(d,'butter');
y=filter(Hd,x);
非面向对象的方法则适用函数实现滤波器设计,如butter、firpm。所有非面向对象的滤波器设计函数使用的是归一化频率,归一化频率[0, 1]之间,1表示πrad。将Hz频率转化为归一化频率的方法为乘以2除以采样频率。设计上面同样的滤波器,使用非面向对象的方法如下
Wn = (2*200)/1000; %Convert 3-dB frequency
% to normalized frequency: 0.4*pi rad/sample
[B,A] = butter(5,Wn,'low');
y = filter(B,A,x);
滤波函数
* filter:利用递归滤波器(IIR)或非递归滤波器(FIR)对数据进行数字滤波;
* fftfilt:利用基于FFT的重叠相加法对数据进行滤波,只适用于非递归滤波器(FIR);
* filter2:二维FIR数字滤波;
* filtfilt:零相位滤波(IIR与FIR均可)。
滤波器特性分析
* 脉冲响应Impz
等价于使用函数filter输入一个脉冲信号x=[1;zero(N-1,1)]。
* 频率响应freqz与freqs
Freqz:求解数字滤波器的频率响应
Freqs:求解模拟滤波器的频率响应
* 幅频和相频abs与angle、unwrap
Unwrap:解卷绕
* 群延迟grpdelay
群延迟即为滤波器相位响应的负一阶导数,是滤波器平均延迟的度量。
* 零极点分析zplane
IIR数字滤波器设计
模拟低通滤波器设计
* 巴特沃斯低通滤波器设计buttap
* 切比雪夫低通滤波器设计cheb1ap与cheb2ap
* 椭圆低通滤波器设计ellipap
模拟滤波器最小阶数的选择
* 巴特沃斯滤波器Buttord
* 切比雪夫1型滤波器Cheb1ord
* 切比雪夫2型滤波器Cheb2ord
* 椭圆滤波器Ellipord
模拟高通、带通、带阻滤波器设计
* 模拟低通到模拟低通lp2lp
* 模拟低通到模拟高通lp2hp
* 模拟低通到模拟带通lp2bp
* 模拟低通到模拟带阻lp2bs
IIR实频变换
* IIR实频率移位变换iirshift
* 实低通到实低通的频率移位变换iirlp2lp
* 实低通到实高通的频率移位变换iirlp2hp
* 实低通到实带通的频率移位变换iirlp2bp
* 实低通到实带阻的频率移位变换iirlp2bs
* 实低通到实多带的频率移位变换iirlp2mb
* 实低通到实多点的频率移位变换iirlp2xn
IIR复频变换
* IIR复频率移位变换iirshiftc
* 实低通到复带通的频率移位变换iirlp2bpc
* 实低通到复带阻的频率移位变换iirlp2bsc
* 实低通到复多带的频率移位变换iirlp2mbc
* 实低通到复多点的频率移位变换iirlp2xnc
* 复带通到复带通的频率移位变换iirbpc2bpc
模拟滤波器的离散化
* 脉冲响应不变法impinvar
* 双线性变换法bilinear
IIR滤波器的直接设计
* 贝塞尔模拟滤波器Besself
* 巴特沃斯滤波器Butter
* 切比雪夫1型滤波器Cheby1
* 切比雪夫2型滤波器Cheby2
* 椭圆型滤波器Ellip
* 递归数字滤波器Yulewalk
使用最小二乘法拟合频率响应函数。
* 一般数字滤波器Maxplat
小结
相对于FIR滤波器,IIR滤波器的主要优点在于它以比FIR更小的阶数满足指定的滤波要求。虽然IIR滤波器有非线性的相位,但matlab软件中的数据处理方式是离散的,即全部数据序列被用于滤波。这允许了零相位滤波方法存在,可以使用函数filtfilt函数实现,它可以消除IIR滤波器的非线性相位偏移。
基于MATLAB的IIR滤波器的设计及应用(信号去噪)怎么设计啊
参考技术A Lz有学过数字信号处理没~
有的话应该很顺利的
具体的就自己参看
help啦
我就列一下
函数名和部分使用办法
MATLAB
有函数的
巴特沃兹滤波器
[z,p,k]=buttap(N);
[num,den]=butter(N,Wn,'s');
[num,den]=butter(N,Wn,'type','s');
[N,Wn]=buttord(Wp,Ws,Rp,Rs,'s');
切比雪夫1型
[z,p,k]=cheb1ap(N,Rp);
[num,den]=cheby1(N,Rp,Wn,'s');
[num,den]=cheby1(N,Rp,Wn,'type','s');
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s');
切比雪夫2型
[z,p,k]=cheb2ap(N,Rp);
[num,den]=cheby2(N,Rs,Wn,'s');
[num,den]=cheby2(N,Rs,Wn,'type','s');
[N,Wn]=cheb2ord(Wp,Ws,Rp,Rs,'s');
椭圆滤波器
[z,p,k]=ellipap(N,Rp,Rs);
[num,den]=ellip(N,Rp,Rs,Wn,'s');
[num,den]=ellip(N,Rp,Rs,Wn,'type','s');
[N,Wn]=ellipord(Wp,Ws,Rp,Rs,'s');
贝塞尔滤波器
[z,p,k]=besselap(N);
[num,den]=besself(N,Wn);
[num,den]=besself(N,Wn,'type');
以上是关于matlab中butter和buttap函数的区别的主要内容,如果未能解决你的问题,请参考以下文章