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.震级显示=“零相位”;

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

fvt.分析=“冲动”;

dsp.firhalfband内插器FirhalfBand抽取器

这个菲尔班德函数提供了其他几个设计选项。但是,在大多数情况下,最好直接与dsp.firhalfband内插器FirhalfBand抽取器。这两个系统对象不仅设计系数,而且提供多相插值/抽取器的高效实现。它们支持过滤双/单精度浮点数据和定点数据。它们还支持C和HDL代码生成以及优化的ARM®Cortex®M和Cortex A代码生成N万博1manbetx

半带内插器=dsp.FIRHalfbandInterpolator(“采样器”,财政司司长,...“规格”,'过滤器顺序和过渡宽度',...“过滤器订单”N“过渡宽度”,4000); fvtool(半带内插器,“财政司司长”,2*Fs,“颜色”,“白色”);

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

帧大小=256;范围=dsp.SpectrumAnalyzer(“采样器”,2*Fs,“光谱平均值”,5); sine1=dsp.SineWave(“频率”,10e3',“采样器”,财政司司长,...“样品性能框架”,框架尺寸);sine2=dsp.SineWave(“频率”,20e3',“采样器”,财政司司长,...“样品性能框架”,帧大小);tic虽然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”,“填充”)持有在…上nu=0:511;阀杆(nu(1:end grpDel),y(grpDel+1:end))图例(“输入样本”,“插值样本”)

在抽取的情况下,中规定的采样率FirhalfBand抽取器对应于过滤器的采样率,因为您先进行过滤,然后再进行下采样(概念上)。因此,对于抽取器,FVTool中指定的Fs不需要乘以任何因子。

帧大小=256;FsIn=2*Fs;半带抽取器=dsp.firhalfBand抽取器(“采样器”,FsIn,...“规格”,'过滤器顺序和过渡宽度',...“过滤器订单”N“过渡宽度”,4000); fvtool(半带抽取器,“财政司司长”,FsIn,“颜色”,“白色”); 范围=dsp.SpectrumAnalyzer(“采样器”,财政司司长,“光谱平均值”,5); sine1=dsp.SineWave(“频率”,10e3',“采样器”,财政司司长,...“样品性能框架”,框架尺寸);sine2=dsp.SineWave(“频率”,20e3',“采样器”,财政司司长,...“样品性能框架”,帧大小);tic虽然toc<10 x=sine1()+sine2()+0.01.*randn(帧大小,1);%96千赫y=半带内插器(x);%192千赫xd=半带抽取器(y);%96千赫范围(xd);终止发布(范围);

获得滤波器系数

滤波器系数可以通过使用tf作用

num=tf(半带内插器);%或num=tf(半带抽取器);

使用不同的设计规范

您可以设计提供给定过渡宽度和给定阻带衰减的最小阶滤波器,而不是指定滤波器阶数和过渡宽度。

Ast=80;%80分贝半带内插器=dsp.FIRHalfbandInterpolator(“采样器”,财政司司长,...“规格”,“过渡宽度和阻带衰减”,...“止损绷带”,Ast,“过渡宽度”,4000); fvtool(半带内插器,“财政司司长”,2*Fs,“颜色”,“白色”);

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

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

半带抽取器=dsp.FIR半带抽取器(“采样器”,财政司司长,...“规格”,“滤波器阶数和阻带衰减”,...“止损绷带”,Ast,“过滤器订单”,N);fvtool(半带抽取器,“财政司司长”,财政司司长,“颜色”,“白色”);

与插值器不同,抽取器的通带增益为1(0 dB)。

对滤波器组使用半带滤波器

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

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

Fs1=8000;%单位=赫兹规格='过滤器顺序和过渡宽度'; 订单=52;TW=4.1e2;%单位=赫兹%构造FIR半带内插器半带内插器=dsp.FIRHalfbandInterpolator(...“规格”规格...“过滤器订单”顺序...“过渡宽度”,TW,...“采样器”,Fs1/2,...“FilterBankInputPort”,对);%构造FIR半带抽取器半带抽取器=dsp.FIR半带抽取器(...“规格”规格...“过滤器订单”顺序...“过渡宽度”,TW,...“采样器”,Fs1);%输入f1=1000;f2=3000;输入波=dsp.SineWave(“频率”,[f1,f2],“采样器”,Fs1,...“样品性能框架”,1024,“振幅”,[1 0.25]);%构造Spectrum Analyzer对象以查看输入和输出范围=dsp.SpectrumAnalyzer(“采样器”,Fs1,...“绘制双侧面光谱”错误的“ShowLegend”符合事实的“YLimits”,...[-120 30],...“头衔”,...'正交镜像滤波器的输入信号和输出信号');scope.ChannelNames={“输入”,“输出”}; 抽搐虽然toc<10输入=和(输入波(),2);噪声输入=输入+(10^-5)*随机数(1024,1);[低通,高通]=半带抽取器(噪声输入);输出=半带内插器(低通,高通);范围([噪声输入,输出]);终止发布(范围);

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

迄今为止提出的所有设计都是最佳等波纹设计F设计内插器F设计抽取器,其他设计算法可用。

Fs=44.1e3;N=90;TW=1000/Fs;%过渡宽度filtSpecs=F设计插值器(2,“半带”,“N,TW”,N,TW);equirippleHBFilter=设计(过滤规格,“等波纹”,“系统对象”,对);leastSquaresHBFilter=设计(过滤规格,“firls”,“系统对象”,对);kaiserHBFilter=设计(过滤器规格,“凯瑟温”,“系统对象”,对);

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

fvt=fvtool(equirippleHBFilter、leastSquaresHBFilter、kaiserHBFilter、,...“财政司司长”,2*Fs,“颜色”,“白色”); 图例(fvt,“等波纹设计”,“最小二乘设计”,...“凯撒窗户设计”)

控制阻带衰减

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

Ast=60;%最小阻带衰减filtSpecs=F设计插值器(2,“半带”,‘N,Ast’,N,Ast);equirippleHBFilter=设计(过滤规格,“等波纹”,“系统对象”,对);kaiserHBFilter=设计(过滤器规格,“凯瑟温”,“系统对象”,对);fvt=fvtool(equirippleHBFilter、kaiserHBFilter、,“财政司司长”,2*Fs,“颜色”,“白色”); 图例(fvt,“等波纹设计”,“凯撒窗户设计”)

最小订单设计

在设计满足设计规范所需的最小阶数的滤波器时,除等波纹设计外,还可以使用凯撒窗口设计。凯撒窗口设计的实际阶数大于等波纹设计所需的阶数,但总体阻带衰减更好。

Fs=44.1e3;TW=1000/(Fs/2);%过渡宽度Ast=60;%阻带中的最小衰减为60 dBfiltSpecs=F设计抽取器(2,“半带”,“TW,Ast”,TW,Ast);equirippleHBFilter=设计(过滤规格,“等波纹”,“系统对象”,对);kaiserHBFilter=设计(过滤器规格,“凯瑟温”,“系统对象”,对);fvt=fvtool(equirippleHBFilter、kaiserHBFilter、,“财政司司长”,财政司司长,“颜色”,“白色”); 图例(fvt,“等波纹设计”,“凯撒窗户设计”)

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

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

equirippleHBFilter1=设计(过滤规格,“等波纹”,...“停车带形状”,‘一楼’,“阻带衰减”4.“系统对象”,对);equirippleHBFilter2=设计(过滤规格,“等波纹”,...“停车带形状”,“线性”,“阻带衰减”,53.333,“系统对象”,对);fvt=fvtool(等波纹EHB过滤器1、等波纹EHB过滤器2、,...“财政司司长”,财政司司长,“颜色”,“白色”); 图例(fvt,“阻带衰减为(1/f)^4”,“阻带线性衰减”)

高通半带滤波器

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

filtSpecs=F设计抽取器(2,“半带”,...“类型”,“高通”,“TW,Ast”,TW,Ast);半带HPFilter=设计(滤波器规格,“等波纹”,...“停车带形状”,“线性”,“阻带衰减”,53.333,“系统对象”,真);fvt=fvtool(半带HPFilter,equirippleHBFilter2,“财政司司长”,财政司司长,“颜色”,“白色”); 图例(fvt,“高通半带滤波器”,“低通半带滤波器”)