主要内容

调峰与陷波滤波器的设计

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

二阶陷波滤波器

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

下面是一个例子:

F0 = 60;%干扰频率为60hzFs = 3000;%采样频率为3000hzBw = 6;%选择带宽系数为6Hz[num1,den1] = iirnotch(F0/(Fs/2),BW/(Fs/2));fvtool (num1 den1,“Fs”Fs);

图1:振幅响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含一个类型为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);传奇(fvtq = 10q = 100);

图2:振幅响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含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);传奇(fvtq = 10q = 100);

图3:振幅响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含2个line类型的对象。这些对象表示Q = 10, Q = 100.

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

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

用静态滤波器进行动态仿真

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

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

Fs = 8e3;% 8 kHz采样频率F01 = 1e3;%滤波器1的陷波频率为1khzBw = 500;% 500赫兹带宽用于两个滤波器[b, a] = iirnotch(F01/(Fs/2), BW/(Fs/2))%过滤器1系数
b =1×30.8341 -1.1796 0.8341
一个=1×31.000 -1.1796 0.6682
sosFilter = dsp.SOSFilter(b,a);F02 = 3e3;%陷波在3khz滤波器2npFilter = dsp。NotchPeakFilter(“CenterFrequency”F02,“带宽”BW,“SampleRate”Fs);scope = spectrum分析仪“PlotAsTwoSidedSpectrum”假的,“SampleRate”Fs,“AveragingMethod”“指数”“ForgettingFactor”.95,“ChannelNames”, {“过滤器1”《过滤器2》},“ShowLegend”,真正的);samplesPerFrame = 256;nFrames = 8192;k = 1:nFrames x = randn(samplesPerFrame, 1);y1 = sosFilter(x);y2 = npFilter(x);范围((y1, y2));结束

时变滤波器的动态仿真

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

陷波滤波器参数-它们如何随时间变化Fs = 8e3;% 8 kHz采样频率F01 = 1e3 * [0.5, 1,1.5, 3];%滤波器1的陷波频率F02 = 1e3 * [3.5, 3,2.5, 2];%滤波器2的陷波频率BW = 500 * ones(1,4);% 500赫兹带宽用于两个滤波器myChangingParams1 = struct(“f0”num2cell (F01 / (Fs / 2)),“bw”num2cell (BW / (Fs / 2)));myChangingParams2 = struct(“F0”num2cell (F02),“BW”num2cell (BW));paramsChangeTimes = [0,70,140,210];秒数%%仿真时间管理nSamplesPerFrame = 256;tEnd = 300;nSamples = ceil(tEnd * Fs);nFrames = floor(nSamples / nSamplesPerFrame);%对象创建sosFilter = dsp.SOSFilter;%过滤1个对象npFilter = dsp。NotchPeakFilter(“SampleRate”Fs);scope = spectrum分析仪“PlotAsTwoSidedSpectrum”假的,“SampleRate”Fs,“AveragingMethod”“指数”“ForgettingFactor”,综合成绩“ChannelNames”, {“过滤器1”《过滤器2》},“ShowLegend”,真正的);paramtbl1 = parameterschedule ()“时间”paramsChangeTimes,“值”myChangingParams1,“SampleRate”Fs / nSamplesPerFrame);paramtbl2 = parameterschedule (“时间”paramsChangeTimes,“值”myChangingParams2,“SampleRate”Fs / nSamplesPerFrame);%实际仿真回路frameIdx = 1:表示nFrames%获取当前F0和BW[params1, update1] = paramtbl1();[params2, update2] = paramtbl2();如果(update1)如果参数改变,重新计算过滤器系数[b, a] = 1;f0、params1.bw);将过滤系数设置为新值sosFilter。分子= b;sosFilter。分母= a;结束如果(更新2)npFilter。CenterFrequency = params2.F0;npFilter。带宽= params2.BW;结束%生成白噪声样本向量x = randn(nSamplesPerFrame, 1);%滤波噪声y1 = sosFilter(x);y2 = npFilter(x);%可视化光谱范围((y1, y2));结束

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

请注意这些可调的峰值和陷波滤波器支持代码生成。

高阶陷波滤波器

由于只可能将极点推到一定程度并保持稳定,因此为了改善滤波器的砖墙近似,有必要增加滤波器的阶数。一个高阶陷波滤波器可以使用fdesign.notch过滤器规范对象。

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

图4:振幅响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含2个line类型的对象。这些对象表示二阶滤波器,六阶滤波器

对于给定的顺序,我们可以通过允许通带和/或阻带波纹来获得更锐利的过渡。

N = 8;F0 = 0.4;Bw = 0.1;Notchspec = fdesign.notch(“N, F0, BW”N F0、BW);Notchfilt = design(notchspec,“SystemObject”,真正的);Notchspec1 = fdesign.notch(' N, F0, BW,美联社,Ast的N F0、BW 0.5, 60);Notchfilt1 = design(notchspec1,“SystemObject”,真正的);fvt = fvtool (notchfilt notchfilt1);传奇(fvt“最大平坦8阶滤波器”“带通带/阻带波纹的8阶滤波器”“位置”“东南”);

图5:振幅响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含2个line类型的对象。这些对象表示最大平坦8阶滤波器,带通带/阻带波纹的8阶滤波器

高阶峰值滤波器

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

下面是一个高阶峰值滤波器的例子:

N = 6;F0 = 0.7;Bw = 0.001;峰值规格= fdesign.peak(“N, F0, BW”N F0、BW);Peakfilt =设计(峰值规格,“SystemObject”,真正的);Peakspec1 = fdesign.peak(“N, F0, BW, Ast”N F0, BW, 80);Peakfilt1 = design(peakspec1,“SystemObject”,真正的);fvt = fvtool (peakfilt peakfilt1);传奇(fvt“最大平坦六阶滤波器”“带80 dB阻带衰减的六阶滤波器”“位置”“东南”);

图6:振幅响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含2个line类型的对象。这些对象表示最大平坦六阶滤波器,带80 dB阻带衰减的六阶滤波器

另请参阅

功能

对象

相关的话题

Baidu
map