主要内容

峰值和开槽过滤器的设计

这个例子展示了如何设计和开槽过滤器达到顶峰。过滤器高峰或切口在一定频率保留或消除一个特定频率分量的信号。过滤器的设计参数是频率的峰值或切口,和3-dB带宽或过滤器的品质因数。此外,鉴于这些规范,通过增加过滤器的顺序,可以获得设计更紧密地近似理想滤波器。

二阶一级过滤器

假设您需要消除60 Hz干涉信号采样在3000赫兹。陷波滤波器可用于这种目的。的iirnotch函数可用于计算二阶陷波滤波器的系数。

这是一个例子:

F0 = 60;%的干扰是60赫兹Fs = 3000;%采样频率为3000赫兹BW = 6;%选择6赫兹的带宽的因素[num1, den1] = iirnotch (F0 / (Fs / 2), BW / (Fs / 2));fvtool (num1 den1,“Fs”Fs);

图1图:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB),包含频率(赫兹),ylabel级(dB)包含一个类型的对象。

一个等效的方法设计滤波器指定品质因数和获得3 dB带宽。品质因数的定义是切口或峰值频率的比值 F 0 和3 dB带宽 BW 。数学上,品质因数 = F 0 / BW 。在上述情况下,品质因子的值是10。指定带宽是一个更加方便的方式实现所需的形状设计滤波器。其他品质因数的过滤器的一个标准所需的频率是孤立于其他频率。固定过滤器,高品质因数是通过推动两极接近于零。

使用可视化滤波器的幅度响应fvtool

Q2 = 100;%选择Q 100倍[num2, den2] = iirnotch (F0 / (Fs / 2), F0 / (Q2 * Fs / 2));fvt = fvtool (num1、den1 num2 den2,“Fs”Fs);传奇(fvt“Q = 10”,“Q = 100”);

图2图:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB),包含频率(赫兹),ylabel级(dB)包含2线类型的对象。这些对象代表Q = 10, Q = 100。

二阶顶峰的过滤器

峰值过滤器是用来保持只有一个频率分量频率(或一群)从一个信号。的iirpeak函数可以用来计算一个二阶的系数峰值过滤器。

F0 = 1000;%的干扰是60赫兹Fs = 3000;%采样频率为3000赫兹Q1 = 10;[num1, den1] = iirpeak (F0 / (Fs / 2), F0 / (Q1 * Fs / 2));Q2 = 100;[num2, den2] = iirpeak (F0 / (Fs / 2), F0 / (Q2 * Fs / 2));fvt = fvtool (num1、den1 num2 den2,“Fs”Fs);传奇(fvt“Q = 10”,“Q = 100”);

图图3:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB),包含频率(赫兹),ylabel级(dB)包含2线类型的对象。这些对象代表Q = 10, Q = 100。

随时间变化的二阶陷波滤波器实现

利用时变滤波器需要改变滤波器的系数,模拟运行。DSP系统工具箱™提供某些特性等iirnotch函数和dsp.NotchPeakFilter对象设计时变可调缺口过滤器。这些特性直接计算滤波器系数。

动态仿真与静态过滤器

为了实现一个时变滤波器,创建一个动态设置模拟滤波器和实现时变的滤波器设计参数。

首先创建一个动态(流)模拟滤波器的系数不改变。创建两个二阶一级过滤器,一个使用dsp.SOSFilter对象和第二次使用dsp.NotchFilter对象。在第一个过滤器,将中心频率设置为1 kHz,带宽3 dB - 500赫兹。直接使用计算滤波器的系数iirnotch函数。在第二个过滤器,设置3千赫的中心频率和带宽3 dB - 500赫兹。过滤器是8 kHz的采样率。

Fs = 8 e3;% 8 kHz的采样频率F01 = 1 e3;%切口1 kHz过滤器1BW = 500;过滤器的% 500赫兹的带宽[b] = iirnotch (F01 / (Fs / 2), BW / (Fs / 2))% 1滤波器系数
b =1×30.8341 -1.1796 0.8341
一个=1×31.0000 -1.1796 0.6682
sosFilter = dsp.SOSFilter (b);F02 = 3 e3;% 3千赫的切口过滤器2npFilter = dsp.NotchPeakFilter (“CenterFrequency”F02,“带宽”BW,“SampleRate”Fs);范围=简介(“PlotAsTwoSidedSpectrum”假的,“SampleRate”Fs,“AveragingMethod”,“指数”,“ForgettingFactor”.95,“ChannelNames”,{“过滤器1”,《过滤器2》},“ShowLegend”,真正的);samplesPerFrame = 256;nFrames = 8192;k = 1: nFrames x = randn (samplesPerFrame, 1);日元= sosFilter (x);y2 = npFilter (x);范围((y1, y2));结束

具有时变滤波器的动态模拟

时变滤波器,时变滤波器的系数随时间变化由于运行时设计参数的变化(例如一个陷波滤波器的中心频率)。创建两个二阶一级过滤器随着时间不同的设计参数。类似于上面的例子中,使用iirnotch函数和dsp.SOSFilter对象实现第一个过滤器,dsp.NotchFilter第二个过滤器对象来实现。随着时间的推移改变过滤器的设计参数。

%陷波滤波器参数——他们是如何随时间变化Fs = 8 e3;% 8 kHz的采样频率F01 = 1 e3 * (0.5、1、1.5、3);%切口频率滤波器1F02 = 1 e3 * (3.5、3、2.5、2);%切口频率过滤2BW = 500 * 1 (1,4);过滤器的% 500赫兹的带宽myChangingParams1 =结构(“f0”num2cell (F01 / (Fs / 2)),“bw”num2cell (BW / (Fs / 2)));myChangingParams2 =结构(“F0”num2cell (F02),“BW”num2cell (BW));paramsChangeTimes = [0, 70, 140, 210];%在几秒钟内%仿真时间管理nSamplesPerFrame = 256;往往= 300;nSamples =装天花板(往往* Fs);nFrames =地板(nSamples / nSamplesPerFrame);%对象创建sosFilter = dsp.SOSFilter;%过滤器1对象npFilter = dsp.NotchPeakFilter (“SampleRate”Fs);范围=简介(“PlotAsTwoSidedSpectrum”假的,“SampleRate”Fs,“AveragingMethod”,“指数”,“ForgettingFactor”,综合成绩“ChannelNames”,{“过滤器1”,《过滤器2》},“ShowLegend”,真正的);paramtbl1 = ParameterTimeTable (“时间”paramsChangeTimes,“值”myChangingParams1,“SampleRate”Fs / nSamplesPerFrame);paramtbl2 = ParameterTimeTable (“时间”paramsChangeTimes,“值”myChangingParams2,“SampleRate”Fs / nSamplesPerFrame);%实际模拟循环frameIdx = 1: nFrames%得到当前F0和BW[params1, update1] = paramtbl1 ();[params2,更新2]= paramtbl2 ();如果(update1)%如果再计算滤波器系数参数改变[b] = iirnotch (params1。f0、params1.bw);%滤波器系数设置为新值sosFilter。分子= b;sosFilter。分母=一个;结束如果(更新2)npFilter。CenterFrequency = params2.F0;npFilter。带宽= params2.BW;结束%产生白噪声样本的向量x = randn (nSamplesPerFrame, 1);%过滤噪音日元= sosFilter (x);y2 = npFilter (x);%可视化频谱范围((y1, y2));结束

一种可调滤波器可以实现类似的使用达到顶峰dsp.NotchPeakFilter对象或使用iirpeak功能和dsp.SOSFilter对象。

请注意:这些可调峰值和开槽过滤器支持代码生成。金宝app

高阶陷波滤波器

因为它是唯一的可能推动两极到目前为止保持稳定,为了提高滤波器的brickwall近似,有必要增加过滤器的顺序。一个高阶陷波滤波器可以设计使用fdesign.notch过滤规范对象。

notchspec = fdesign.notch (“N, F0,问“2、.4,100);notchfilt =设计(notchspec,“SystemObject”,真正的);notchspec。FilterOrder = 6; notchfilt1 = design(notchspec,“SystemObject”,真正的);fvt = fvtool (notchfilt notchfilt1);传奇(fvt二阶滤波器的,“六阶滤波器”);

图4图:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB),包含归一化频率(空白乘以πr d / s m p l e), ylabel级(dB)包含2线类型的对象。这些对象代表二阶滤波器,六阶滤波器。

对于一个给定的顺序,我们可以获得更清晰的转换,使通带和阻带涟漪。

N = 8;F0 = 0.4;BW = 0.1;notchspec = fdesign.notch (“N, F0, BW”N F0、BW);notchfilt =设计(notchspec,“SystemObject”,真正的);notchspec1 = fdesign.notch (' N, F0, BW,美联社,Ast的N F0、BW 0.5, 60);notchfilt1 =设计(notchspec1,“SystemObject”,真正的);fvt = fvtool (notchfilt notchfilt1);传奇(fvt最大限度地平八阶滤波器的,“八阶滤波器通带和阻带波纹的,“位置”,“东南”);

图5图:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB),包含归一化频率(空白乘以πr d / s m p l e), ylabel级(dB)包含2线类型的对象。这些对象代表最大平坦的八阶滤波器,八阶滤波器通带和阻带涟漪。

高阶顶峰过滤器

一个高阶滤波器可以设计使用峰值fdesign.peak过滤规范对象。目前为止所有规格和权衡提到同样适用于过滤器达到顶峰。

这是一个高阶滤波器达到顶峰的例子:

N = 6;F0 = 0.7;BW = 0.001;peakspec = fdesign.peak (“N, F0, BW”N F0、BW);peakfilt =设计(peakspec,“SystemObject”,真正的);peakspec1 = fdesign.peak (“N, F0, BW, Ast”N F0, BW, 80);peakfilt1 =设计(peakspec1,“SystemObject”,真正的);fvt = fvtool (peakfilt peakfilt1);传奇(fvt最大限度地平6阶滤波器的,与80分贝的第六阶滤波器阻带衰减的,“位置”,“东南”);

图6图:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB),包含归一化频率(空白乘以πr d / s m p l e), ylabel级(dB)包含2线类型的对象。这些对象代表最大平坦的第六阶滤波器,六阶滤波器80 dB阻带衰减。

另请参阅

功能

对象

相关的话题