主要内容

用信号处理工具箱软件对数据进行滤波

低通FIR滤波器-窗口方法

这个例子展示了如何使用两个命令行函数设计和实现FIR滤波器,fir1designfilt,以及互动的滤波器设计应用程序。

创建一个在示例中使用的信号。信号是加性的100hz正弦波 N 0 1 / 4 高斯白噪声。将随机数生成器设置为可再现结果的默认状态。

rng默认的Fs=1000;t=linspace(0,1,Fs);x=cos(2*pi*100*t)+0.5*randn(尺寸(t));

滤波器设计为阶数为20,截止频率为150 Hz的FIR低通滤波器。使用一个长度大于滤波器阶数的Kaiser窗口 β 3. .看到凯撒查看Kaiser窗口的详细信息。

使用fir1设计滤波器。fir1需要在区间[0,1]内的归一化频率,其中1对应于 π rad/样本。使用fir1,则必须将所有频率规格转换为标准化频率。

设计滤波器并查看滤波器的幅值响应。

fc = 150;Wn = (2 / Fs) *俱乐部;Wn b = fir1(20日,“低”3)、kaiser(21日);fvtool (b, 1“财政司司长”,财政司司长)

Figure Filter Visualization Tool-幅值响应(dB)包含轴对象和uitoolbar、uimenu类型的其他对象。具有标题幅值响应(dB)的轴对象包含类型为line的对象。

对信号应用滤波器,并绘制100 Hz正弦波前十个周期的结果。

y=滤波器(b,1,x);图(t,x,t,y)xlim([0.1])xlabel(‘时间’) ylabel (“振幅”)传说(原始信号的“过滤数据”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表原始信号,过滤数据。

设计相同的过滤器使用designfilt。将过滤器响应设置为“lowpassfir”并将规格输入为名称、值对。与designfilt,您可以指定您的滤波器设计赫兹。

Fs = 1000;高清= designfilt (“lowpassfir”“FilterOrder”, 20岁,“CutoffFrequency”, 150,...“设计方法”“窗口”“窗口”,{@kaiser,3},“SampleRate”Fs);

过滤数据并绘制结果。

日元=过滤器(高清,x);Plot (t,x,t,y1) xlim([0 0.1]) xlabel(‘时间’) ylabel (“振幅”)传说(原始信号的“过滤数据”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表原始信号,过滤数据。

带滤波器设计器的低通FIR滤波器

这个例子展示了如何设计和实现一个低通FIR滤波器,使用窗口方法和交互式滤波器设计应用程序。

  • 通过输入启动应用程序filterDesigner在命令行。

  • 设定响应类型低通滤波器

  • 设定设计方法冷杉并选择窗口方法。

  • 过滤顺序中,选择指定的顺序.将顺序设置为20。

  • 频率的规范,设置单位赫兹财政司司长到1000年,足球俱乐部到150年。

  • 点击设计滤波器

  • 选择文件>出口……将FIR滤波器作为系数或滤波器对象导出到MATLAB®工作空间。在本例中,将过滤器导出为对象。指定变量名为高清

  • 点击出口

  • 用导出的Filter对象在命令窗口中过滤输入信号。绘制100赫兹正弦信号的前十个周期的结果。

y2 =过滤器(高清,x);Plot (t,x,t,y2) xlim([0 0.1]) xlabel(‘时间’) ylabel (“振幅”)传说(原始信号的“过滤数据”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表原始信号,过滤数据。

  • 选择文件>生成MATLAB代码>滤波器设计函数生成一个MATLAB函数,使用您的规范创建一个过滤器对象。

你也可以使用交互式工具过滤器生成器来设计你的过滤器。

带通滤波器-最低阶FIR和IIR系统

这个例子展示了如何设计带通滤波器和滤波器数据与最小阶FIR等纹波和IIR巴特沃斯滤波器。您可以将许多真实世界的信号建模为振荡分量、低频趋势和加性噪声的叠加。例如,经济数据通常包含振荡,这代表在缓慢变化的上升或下降趋势上叠加的周期。此外,还有一个加性噪声分量,它是测量误差和过程中固有的随机波动的组合。

在这些示例中,假设您在一年的时间里每天都对某个过程进行抽样。假设该过程在大约一周和一个月的范围内波动。此外,在数据和加法上存在低频率的上升趋势 N 0 1 / 4 高斯白噪声。

将信号创建为频率为1/7和1/30周期/天的两个正弦波的叠加。增加低频增加趋势项和 N 0 1 / 4 高斯白噪声。重置随机数生成器以获得可重复的结果。数据采样次数为1次/天。绘制结果信号和功率谱密度(PSD)估计。

rng默认的Fs=1;n=1:365;x=cos(2*pi*(1/7)*n)+cos(2*pi*(1/30)*n-pi/4);趋势=3*sin(2*pi*(1/1480)*n;y=x+趋势+0.5*randn(大小(n));[pxx,f]=周期图(y,[],[],Fs);子地块(2,1,1)图(n,y)xlim([1 365])(“天”图(f,10*log10(pxx)) xlabel(“周期/天”) ylabel (“数据库”)网格

图中包含2个轴对象。轴对象1包含line类型的对象。轴对象2包含line类型的对象。

随着低频功率的增加,功率谱密度估计出现低频趋势。低频功率在1/30个周期/天振荡以上约10 dB。在滤波器阻带的规格中使用这些信息。

设计具有以下规格的最小阶FIR等波纹和IIR巴特沃斯滤波器:通带从[1/40,1/4]周期/天,阻带从[0,1/60]和[1/4,1/2]周期/天。将阻带衰减设置为10 dB,通带波纹容差设置为1 dB。

Hd1 = designfilt (“班德帕斯菲尔”...“StopbandFrequency1”,1/60,“通带频率1”, 1/40,...“通带频率2”1/4,“StopbandFrequency2”1/2,...“StopbandAttenuation1”10“PassbandRipple”1....“StopbandAttenuation2”10“设计方法”“equiripple”“SampleRate”,Fs);Hd2=设计过滤器(“bandpassiir”...“StopbandFrequency1”,1/60,“通带频率1”, 1/40,...“通带频率2”1/4,“StopbandFrequency2”1/2,...“StopbandAttenuation1”10“PassbandRipple”1....“StopbandAttenuation2”10“设计方法”“黄油”“SampleRate”Fs);

比较FIR和IIR滤波器的阶数和解包相位响应。

流('FIR滤波器的顺序为%d\n', filtord (Hd1))
FIR滤波器的阶数是78
流('IIR筛选器的顺序为%d\n',filtord(Hd2))
IIR滤波器的阶数为8
[phifir w] = phasez (Hd1, [], 1);[phiiir w] = phasez (Hd2 [], 1);图绘制(w,打开(phifir))情节(w,打开(phiiir))包含(“周期/天”) ylabel (“弧度”)传说(冷杉Equiripple过滤器的IIR巴特沃斯滤波器的)网格

图中包含一个Axis对象。Axis对象包含2个line类型的对象。这些对象表示FIR等波纹滤波器、IIR Butterworth滤波器。

IIR滤波器的阶数比FIR滤波器低得多。然而,FIR滤波器在通带上具有线性相位响应,而IIR滤波器则没有。FIR滤波器平均延迟滤波器通带内的所有频率,而IIR滤波器不一样。

此外,FIR滤波器每单位频率的相位变化率比IIR滤波器大。

设计一个低通FIR等波纹滤波器进行比较。低通滤波器规格为:通带[0,1/4]周期/天,阻带衰减等于10 dB,通带波纹容差设置为1 dB。

Hdlow = designfilt (“lowpassfir”...“PassbandFrequency”1/4,“StopbandFrequency”1/2,...“PassbandRipple”1.“StopbandAttenuation”10...“设计方法”“equiripple”“SampleRate”,1);

用带通和低通滤波器过滤数据。

yfir =过滤器(Hd1, y);yiir =过滤器(Hd2 y);ylow =过滤器(Hdlow y);

绘制带通IIR滤波器输出的PSD估计值。您可以替换yiir具有yfir在以下代码中查看PSD估计的FIR带通滤波器输出。

[pxx f] =周期图(yiir, [] [], Fs);情节(f, 10 * log10 (pxx))包含(“周期/天”) ylabel (“数据库”)网格

图中包含一个axes对象。axes对象包含一个line类型的对象。

PSD估计表明,带通滤波器可以衰减低频趋势和高频噪声。

绘制前120天的FIR和IIR滤波器输出。

图(n,yfir,n,yiir)轴([1 120 -2.8])xlabel(“天”)传说(‘FIR带通滤波器输出’'IIR带通滤波器输出'...“位置”“东南”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表FIR带通滤波器输出,IIR带通滤波器输出。

FIR滤波器中增加的相位延迟在滤波器输出中很明显。

将低通FIR滤波器输出叠加在7天和30天周期的叠加上进行比较。

Plot (n,x,n,黄色)xlim([1 365]) xlabel(“天”)传说(“7天和30天周期”“FIR低通滤波器输出”...“位置”“西北”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表7天和30天的周期,FIR低通滤波器输出。

你可以在前面的图中看到低频趋势在低通滤波器输出中很明显。低通滤波器保持了7天和30天的周期,而带通滤波器在这个例子中表现得更好,因为带通滤波器也消除了低频趋势。

零相位滤波

这个例子展示了如何执行零相位滤波。

重复信号的产生和低通滤波器的设计fir1designfilt. 如果工作区中已经有这些变量,则不必执行以下代码。

rng默认的Fs=1000;t=linspace(0,1,Fs);x=cos(2*pi*100*t)+0.5*randn(尺寸(t));%使用fir1fc = 150;Wn = (2 / Fs) *俱乐部;Wn b = fir1(20日,“低”3)、kaiser(21日);%使用designfilt高清= designfilt (“lowpassfir”“FilterOrder”, 20岁,“CutoffFrequency”, 150,...“设计方法”“窗口”“窗口”,{@kaiser,3},“SampleRate”Fs);

使用以下命令过滤数据滤器.绘制滤波器输出的前100个点以及一个与输入信号具有相同振幅和初始相位的叠加正弦信号。

你=过滤器(高清,x);鑫= cos(2 *π* 100 * t);图(t,xin,t,yout) xlim([0 0.1]) xlabel(‘时间’) ylabel (“振幅”)传说(输入正弦波的“过滤数据”)网格

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表输入正弦波,过滤数据。

查看滤波数据的初始0.01秒,您可以看到输出相对于输入延迟。延迟似乎约为0.01秒,这几乎是采样中FIR滤波器长度的1/2 1 0 × 0 0 0 1

这个延迟是由于滤波器的相位响应。这些例子中的FIR滤波器是一类线性相位滤波器。滤波器的组延迟为10个样本。

使用fvtool

fvtool(高清“分析”“grpdelay”

图形过滤可视化工具-组延迟包含一个轴对象和其他类型的uitoolbar, uimenu对象。具有标题组延迟的axis对象包含一个类型为line的对象。

在许多应用中,相位失真是可以接受的。当相位响应是线性的时,这一点尤其正确。在其他应用中,需要具有零相位响应的滤波器。从技术上讲,零相位响应不可能存在于非因果滤波器中。但是,您可以使用具有filtfilt

使用以下方法过滤输入信号:filtfilt.绘制响应来比较得到的过滤器输出滤器filtfilt

yzp = filtfilt(高清,x);图(t,xin,t,yout,t,yzp) xlim([0 0.1]) xlabel(‘时间’) ylabel (“振幅”)传说(“100 Hz正弦波”“过滤信号”“零相位滤波”...“位置”“东北”

图中包含一个轴对象。轴对象包含3个类型为line的对象。这些对象代表100赫兹正弦波,滤波信号,零相位滤波。

在上图中,您可以看到filtfilt不显示由于FIR滤波器的相位响应的延迟。