主要内容

FIR半带滤波器设计

这个例子展示了如何设计FIR半带滤波器。半带滤波器在多速率信号处理应用中广泛使用,当插值/抽取因子为2时。半带滤波器以多相形式有效实现,因为其系数约有一半等于零。

半带滤波器有两个重要的特性,通带和阻带波纹必须相同,通带边缘和阻带边缘频率与半带频率Fs/4(或pi/2 rad/样本归一化频率)的距离相等。

获取半带系数

菲尔班德函数返回FIR半带等纹波滤波器的系数。作为一个简单的例子,考虑一个半带滤波器,它处理的数据采样在96 kHz和22 kHz的通频带频率。

Fs=96e3;Fp=22e3;N=100;num=firhalfband(N,Fp/(Fs/2));fvt=fvtool(数值,“财政司司长”,财政司司长,“颜色”“白色”);fvt。MagnitudeDisplay =“零”

通过放大响应,可以验证通带和阻带峰间波纹是否相同。此外,Fs/4(24 kHz)具有对称性点。通带按规定延伸至22 kHz,阻带从26 kHz开始。我们还可以通过查看脉冲响应来验证其他系数是否等于零。这使得滤波器非常有效,可以实现2倍的插值/抽取。

fvt。分析=“冲动”

dsp.firhalfband内插器dsp。FIRHalfbandDecimator

菲尔班德Function提供了几个其他的设计选项。然而,在大多数情况下,直接使用是更好的选择dsp.firhalfband内插器dsp。FIRHalfbandDecimator.这两个系统对象不仅设计了系数,而且还提供了多相插补/抽取器的有效实现。它们支持过金宝app滤双/单精度浮点数据以及定点数据。他们还支持C和HDL金宝app代码生成,以及优化的ARM®Cortex®M和Cortex A代码生成。

halfbandInterpolator = dsp。FIRHalfbandInterpolator (“SampleRate”,财政司司长,...“规范”“滤镜顺序和过渡宽度”...“FilterOrder”N“TransitionWidth”, 4000);fvtool (halfbandInterpolator“财政司司长”,2*Fs,“颜色”“白色”);

为了执行插值,dsp.firhalfband内插器使用系统对象。因为这是一个多速率过滤器,所以定义采样率的含义很重要。对于该对象和所有其他系统对象,采样率指的是输入信号的采样率。但是,FVTool将采样率定义为过滤器运行的速率。在插值的情况下,需要进行上采样,然后进行过滤(概念上),因此FVTool的采样率需要指定为2*Fs,因为上采样率为2。

FrameSize = 256;= dsp范围。简介(“SampleRate”,2*Fs,“光谱平均值”,5); sine1=dsp.SineWave(“频率”10 e3,“SampleRate”,财政司司长,...“样品性能框架”, FrameSize);sine2 = dsp。SineWave (“频率”20 e3,“SampleRate”,财政司司长,...“样品性能框架”, FrameSize);抽搐toc<10 x=sine1()+sine2()+0.01.*randn(帧大小,1);%96千赫y=半带内插器(x);% 192千赫范围(y);终止发布(范围);

请注意,光谱副本衰减约40 dB,这大致相当于半带滤波器提供的衰减。补偿滤波器中的群延迟,可以绘制叠加的输入和插值样本。请注意,输入样本在滤波器的输出处保持不变。这是因为f半带的多相支路是纯延迟支路,不改变输入样本。

grpDel = 50;n = 0:2:511;茎(n (1: end-grpDel / 2), x (1: end-grpDel / 2),“k”“填充”)举行ν= 0:511;茎(ν(1:end-grpDel), y (grpDel + 1:结束)传说(输入样本的“插值样本”

在抽取的情况下,在dsp。FIRHalfbandDecimator对应于过滤器的采样率,因为你过滤然后下采样(概念上)。因此,对于小数,FVTool中指定的Fs不需要乘以任何因子。

FrameSize = 256;傅氏国际= 2 * Fs;半带抽取器=dsp.FIR半带抽取器(“SampleRate”傅氏国际,...“规范”“滤镜顺序和过渡宽度”...“FilterOrder”N“TransitionWidth”, 4000);fvtool (halfbandDecimator“财政司司长”傅氏国际,“颜色”“白色”); 范围=dsp.SpectrumAnalyzer(“SampleRate”,财政司司长,“光谱平均值”,5); sine1=dsp.SineWave(“频率”10 e3,“SampleRate”,财政司司长,...“样品性能框架”, FrameSize);sine2 = dsp。SineWave (“频率”20 e3,“SampleRate”,财政司司长,...“样品性能框架”, FrameSize);抽搐toc<10 x=sine1()+sine2()+0.01.*randn(帧大小,1);%96千赫y=半带内插器(x);% 192千赫xd = halfbandDecimator (y);%96千赫范围(xd);终止发布(范围);

获得滤波器系数

滤波器系数可以通过使用特遣部队函数。

num =特遣部队(halfbandInterpolator);% Or num = tf(halfbandDecimator);

使用不同的设计规范

不需要指定滤波器的顺序和过渡宽度,您可以设计一个最小阶滤波器,提供给定的过渡宽度和给定的阻带衰减。

Ast=80;% 80分贝halfbandInterpolator = dsp。FIRHalfbandInterpolator (“SampleRate”,财政司司长,...“规范”“过渡宽度和阻带衰减”...“StopbandAttenuation”Ast,“TransitionWidth”, 4000);fvtool (halfbandInterpolator“财政司司长”,2*Fs,“颜色”“白色”);

注意,与所有插值器一样,通带增益的绝对单位等于插值因子(在半带情况下为2)。这对应的通带增益为6.02 dB。

也可以指定滤波器的顺序和阻带衰减。

半带抽取器=dsp.FIR半带抽取器(“SampleRate”,财政司司长,...“规范”'滤波器顺序和阻带衰减'...“StopbandAttenuation”Ast,“FilterOrder”,N);fvtool(半带抽取器,“财政司司长”,财政司司长,“颜色”“白色”);

与插值器不同,小数在通带中有1 (0 dB)的增益。

滤波器组使用半带滤波器

半带内插器和抽取器可用于有效实现合成/分析滤波器组。迄今为止显示的半带滤波器都是低通滤波器。使用单个额外加法器,除了低通响应外,还可以获得高通响应,并将这两个响应用于滤波器组实现。

下面的代码模拟了一个正交镜滤波器(QMF)组。由1 kHz和3 kHz正弦波组成的8 kHz信号使用低通/高通半带抽取器分成两个4 kHz信号。低通信号保留1khz的正弦波,而高通信号保留3khz的正弦波(下采样后混叠为1khz)。然后利用半带插值器将信号与合成滤波器组合并在一起。高通分支上转换混叠的1 kHz正弦波回3 kHz。插值信号的采样率为8 kHz。

Fs1 = 8000;%单位= Hz规范=“滤镜顺序和过渡宽度”; 订单=52;TW=4.1e2;%单位= Hz%构造FIR半带插值器halfbandInterpolator = dsp。FIRHalfbandInterpolator (...“规范”规格...“FilterOrder”顺序...“TransitionWidth”TW,...“SampleRate”,Fs1/2,...“FilterBankInputPort”,真正的);%构造FIR半带小数半带抽取器=dsp.FIR半带抽取器(...“规范”规格...“FilterOrder”顺序...“TransitionWidth”TW,...“SampleRate”,Fs1);%的输入f1 = 1000;f2 = 3000;InputWave = dsp。SineWave (“频率”(f1、f2),“SampleRate”,Fs1,...“样品性能框架”,1024,“振幅”,[1 0.25]);%构造频谱分析仪对象来查看输入和输出= dsp范围。简介(“SampleRate”,Fs1,...“PlotAsTwoSidedSpectrum”假的,“ShowLegend”,真的,“YLimits”...30 [-120],...“标题”...'正交镜像滤波器的输入信号和输出信号');范围。ChannelNames = {“输入”“输出”};抽搐toc<10输入=和(输入波(),2);噪声输入=输入+(10^-5)*随机数(1024,1);[低通,高通]=半带抽取器(噪声输入);输出=半带内插器(低通,高通);范围([噪声输入,输出]);终止发布(范围);

高级设计选项:指定不同的设计算法

到目前为止,所有的设计都是最优的等波纹设计。使用fdesign.interpolatorfdesign.decimator,其他设计算法可用。

Fs = 44.1 e3;N = 90;TW = 1000 / Fs;%过渡宽度filtSpecs = fdesign.interpolator (2“halfband”“N,TW”N、TW);equirippleHBFilter =设计(filtSpecs,“equiripple”“系统对象”,对);leastSquaresHBFilter=设计(过滤规格,“firls”“系统对象”,真正的);kaiserHBFilter =设计(filtSpecs,“凯瑟温”“系统对象”,真正的);

您可以将设计与FVTool进行比较。不同的设计允许在最小阻带衰减和更大的总体衰减之间进行权衡。

fvt = fvtool (equirippleHBFilter leastSquaresHBFilter kaiserHBFilter,...“财政司司长”,2*Fs,“颜色”“白色”); 图例(fvt,“Equiripple设计”“最小二乘设计”...“Kaiser-window设计”

控制阻带衰减

或者,可以指定顺序和阻带衰减。这允许在总的阻带衰减和过渡宽度之间进行权衡。

Ast = 60;最小阻带衰减filtSpecs = fdesign.interpolator (2“halfband”‘N,Ast’, N, Ast);equirippleHBFilter =设计(filtSpecs,“equiripple”“系统对象”,真正的);kaiserHBFilter =设计(filtSpecs,“凯瑟温”“系统对象”,对);fvt=fvtool(equirippleHBFilter、kaiserHBFilter、,“财政司司长”,2*Fs,“颜色”“白色”); 图例(fvt,“Equiripple设计”“Kaiser-window设计”

最小订单的设计

Kaiser窗口设计除了等效纹波设计外,还可以用于设计满足设计规范所需的最小阶滤波器。Kaiser窗设计的实际阶数比等纹波设计的阶数要大,但阻带衰减的总体效果更好。

Fs = 44.1 e3;TW = 1000 / (Fs / 2);%过渡宽度Ast = 60;% 60 dB在阻带中的最小衰减filtSpecs = fdesign.decimator (2“halfband”“TW, Ast”TW, Ast);equirippleHBFilter =设计(filtSpecs,“equiripple”“系统对象”,真正的);kaiserHBFilter =设计(filtSpecs,“凯瑟温”“系统对象”,对);fvt=fvtool(equirippleHBFilter、kaiserHBFilter、,“财政司司长”,财政司司长,“颜色”“白色”); 图例(fvt,“Equiripple设计”“Kaiser-window设计”

增加阻带衰减的等波纹设计

除了设计Kaiser窗口滤波器,还可以通过改进的“等波纹”设计获得更大的阻带衰减。

equirippleHBFilter1 =设计(filtSpecs,“equiripple”...“StopbandShape”“1 / f”“StopbandDecay”,4,“系统对象”,对);equirippleHBFilter2=设计(过滤规格,“equiripple”...“StopbandShape”“线性”“StopbandDecay”, 53.333,“系统对象”,真正的);fvt = fvtool (equirippleHBFilter1 equirippleHBFilter2,...“财政司司长”,财政司司长,“颜色”“白色”); 图例(fvt,'阻带衰减为(1/f)^4'“阻带线性衰减”

高通滤波Halfband过滤器

通过改变每一秒系数的符号,可以从低通半带滤波器得到高通半带滤波器。或者,可以直接设计高通半带通过设置“类型”属性为“highpass”。

filtSpecs = fdesign.decimator (2“halfband”...“类型”“高通”“TW, Ast”TW, Ast);halfbandHPFilter =设计(filtSpecs,“equiripple”...“StopbandShape”“线性”“StopbandDecay”, 53.333,“系统对象”,真正的);fvt = fvtool (halfbandHPFilter equirippleHBFilter2,“财政司司长”,财政司司长,“颜色”“白色”); 图例(fvt,“高反差保留halfband过滤器的“低通半带滤波器”