主要内容

峰值和凹痕滤波器的设计

这个例子展示了如何设计峰值滤波器和陷波滤波器。在某一频率处达到峰值或陷波的滤波器保留或消除信号的某一特定频率成分。滤波器的设计参数是需要的峰值或陷波的频率,以及3-dB带宽或滤波器的Q因子。此外,给定这些规格,通过增加滤波器的阶数,就有可能获得更接近理想滤波器的设计。

二阶陷波滤波器

假设您需要消除3000hz采样信号中的60hz干扰。陷波滤波器可以用于这种目的。这个函数iirnotch可以用来计算二阶陷波滤波器的系数。

下面是一个例子:

F0 = 60;干扰在60hzFs = 3000;%采样频率为3000hzBW = 6;%选择6Hz的带宽因子[num1, den1] = iirnotch (F0 / (Fs / 2), BW / (Fs / 2));fvtool (num1 den1,“Fs”Fs,“颜色”“白色”);

图形过滤可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为幅度响应(dB)的轴对象包含一个类型为line的对象。

设计滤波器的一种等效方法是指定质量因子并获得3db带宽。质量因子定义为缺口或峰值频率的比值 F 0 带宽为3db BW .数学上,Q因子由 F 0 / BW .在上述情况中,质量因子的值为10。指定带宽是一种更方便的方法,可以精确地为所设计的滤波器实现所需的形状。滤波器的Q因子是衡量所需频率与其他频率隔离程度的指标。对于固定的滤波器阶数,更高的Q因子是通过将极点推向零点来实现的。

将滤波器的幅值响应可视化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”);

图形过滤可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为幅度响应(dB)的轴对象包含2个类型为line的对象。这些对象表示Q = 10, Q = 100。

二阶峰值滤波器

峰值滤波器用于只保留信号中的一个单一频率成分(或一个小频带)。的iirpeak函数可以用来计算二阶峰值滤波器的系数。

F0 = 1000;干扰在60hzFs = 3000;%采样频率为3000hzQ1 = 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”);

图形过滤可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为幅度响应(dB)的轴对象包含2个类型为line的对象。这些对象表示Q = 10, Q = 100。

时变二阶陷波滤波器的实现

使用时变滤波器需要在模拟运行时改变滤波器的系数。DSP系统工具箱™提供了某些功能,如iirnotch函数和dsp。NotchPeakFilter目的是设计时变可调陷波滤波器。这些特征直接计算滤波系数。

带静态滤波器的动态仿真

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

首先用系数不变的过滤器创建一个动态(流)模拟。创建两个二阶陷波滤波器,其中一个使用dsp。SOSFilter对象,第二个使用dsp。NotchFilter对象。在第一个滤波器中,设置中心频率为1 kHz,带宽为-3 dB至50 Hz。计算该滤波器的系数直接使用iirnotch函数。在第二个滤波器中,设置中心频率为3 kHz,带宽为-3 dB至50 Hz。两个滤波器的采样率都是8 kHz。

Fs = 8 e3;% 8 kHz采样频率F01 = 1 e3;滤波器1的1khz陷波率BW = 500;两个滤波器的带宽均为% 500hz[b, a] = iirnotch(F01/(Fs/2), BW/(Fs/2)))% Filter 1系数
b =1×30.8341 -1.1796 0.8341
一个=1×31.0000 -1.1796 0.6682
sosFilter = dsp.SOSFilter (b);F02 = 3 e3;滤波器2在3khz的陷波率npFilter = dsp。NotchPeakFilter(“CenterFrequency”F02,“带宽”BW,...“SampleRate”Fs);= dsp范围。简介(“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));结束

图频谱分析仪包含一个轴对象和其他类型的对象uiflowcontainer、uimenu、uitoolbar。坐标轴对象包含两个类型为line的对象。这些对象表示过滤器1和过滤器2。

带时变滤波器的动态仿真

对于时变滤波器,时变滤波器的系数随着时间而变化,这是由于运行时设计参数的变化(例如陷波滤波器的中心频率)。用时变设计参数创建两个二阶陷波器。与上面的示例类似,使用iirnotch函数和dsp。SOSFilter对象来实现第一个筛选器,并且dsp。NotchFilter对象来实现第二个筛选器。随时间变化两个滤波器的设计参数。

陷波过滤器参数-它们如何随时间变化Fs = 8 e3;% 8 kHz采样频率F01 = 1e3 * [0.5, 1,1.5, 3];滤波器1的陷波频率F02 = 1e3 * [3.5, 3,2.5, 2];滤波器2的陷波频率BW = 500 * 1 (1,4);两个滤波器的带宽均为% 500hzmyChangingParams1 =结构(“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 = ceil(tEnd * f);nFrames = floor(nSamples / nSamplesPerFrame);%对象创建sosFilter = dsp.SOSFilter;%过滤器1对象npFilter = dsp。NotchPeakFilter(“SampleRate”Fs);= dsp范围。简介(“PlotAsTwoSidedSpectrum”假的,...“SampleRate”Fs,...“AveragingMethod”“指数”...“ForgettingFactor”,综合成绩......“RBWSource”“汽车”...“方法”滤波器组的...“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, update2] = paramtbl2();如果(update1)%如果参数改变,重新计算滤波系数[b, a] = 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));结束

图频谱分析仪包含一个轴对象和其他类型的对象uiflowcontainer、uimenu、uitoolbar。坐标轴对象包含两个类型为line的对象。这些对象表示过滤器1和过滤器2。

方法可以类似地实现可调峰值滤波器dsp。NotchPeakFilter对象或使用iirpeak功能和dsp。SOSFilter对象。

请注意这些可调的峰值和凹痕过滤器支持代码生成。万博1manbetx

高阶陷波滤波器

由于只能将极点推到一定距离并保持稳定,为了提高滤波器的砖墙近似,必须提高滤波器的阶数。可以设计一个高阶陷波滤波器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二阶滤波器的“六阶滤波器”);

图形过滤可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为幅度响应(dB)的轴对象包含2个类型为line的对象。这些对象代表二阶过滤器,六阶过滤器。

对于给定的阶数,我们可以通过允许通带和/或阻带波纹来获得更清晰的跃迁。

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“最大平坦8阶滤波器”...“带通带/阻带涟漪的8阶滤波器”...“位置”“东南”);轴([0 1 -90 0.5]);

图形过滤可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为幅度响应(dB)的轴对象包含2个类型为line的对象。这些对象表示最大平坦的8阶滤波器,带通带/阻带波纹的8阶滤波器。

高阶峰值滤波器

可以设计一个高阶峰值滤波器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“最大平坦六阶滤波器”...“带有80db阻带衰减的六阶滤波器”“位置”“东南”);

图形过滤可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为幅度响应(dB)的轴对象包含2个类型为line的对象。这些对象代表最大平坦的六阶滤波器,具有80db阻带衰减的六阶滤波器。