主要内容

冷杉Halfband滤波器设计

这个例子展示了如何设计冷杉halfband过滤器。Halfband过滤器广泛应用于多重速率的信号处理应用程序当插值或残杀的两倍。Halfband过滤器是实现高效多相形式,因为大约一半的Halfband滤波器系数等于零。

Halfband过滤器有两个重要特征:

  • 通带和阻带波动必须相同。

  • passband-edge和stopband-edge频率从halfband等距的频率 Fs 4 (或 π 2 rad /样本归一化频率)。

获得Halfband系数

firhalfband函数返回系数的冷杉halfband equiripple过滤器。作为一个简单的例子,考虑一个halfband过滤器处理数据采样在96 kHz,通频带22 kHz的频率。

Fs = 96年e3;Fp = 22 e3;N = 100;num = firhalfband (N, Fp / (Fs / 2));zerophase (num 1 linspace (0, Fs / 2512), Fs);

图包含一个坐标轴对象。坐标轴对象与标题零相位响应包含一个对象类型的线。

通过缩放到响应,您可以验证,通带和阻带峰涟漪都是相同的。也有对称的 Fs 4 (24千赫)点。通频带扩展到22 kHz和阻带始于指定26千赫。我们也可以确认其他系数等于零的脉冲响应。这使得过滤器非常有效的实现插值或大量毁灭的2倍。

fvt = fvtool (num Fs = Fs);fvt。分析=“冲动”;

图2图:脉冲响应包含一个坐标轴对象。坐标轴对象与标题脉冲响应包含一个类型的对象。

dsp.FIRHalfbandInterpolatordsp.FIRHalfbandDecimator

firhalfband函数提供了一些其他的设计选择。然而,使用dsp.FIRHalfbandInterpolatordsp.FIRHalfbandDecimator建议在处理流数据系统对象。这两个系统对象不仅设计系数,还提供高效的多相实现。他们支持过金宝app滤双、单精度浮点数据以及定点数据。他们也支持C、HDL金宝app代码生成和优化手臂®皮层M和手臂®®皮层®代码生成。

halfbandInterpolator = dsp.FIRHalfbandInterpolator (SampleRate = Fs,规范=“筛选器顺序和过渡宽度”,FilterOrder = N, TransitionWidth = 4000);fvt = fvtool (halfbandInterpolator Fs = 2 * Fs);% #好< NASGU >

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。

为了进行插值,使用dsp.FIRHalfbandInterpolator系统对象™。因为这是一个多频滤波器,重要的是定义什么是采样率。这和所有其他系统对象的采样率是指输入信号的采样率。然而,FVTool将采样率定义为过滤器的速度运行。在插值的情况下,您upsample然后过滤(概念),因此需要指定FVTool的采样率 2 Fs 因为upsampling的2。

FrameSize = 256;范围=简介(SampleRate = 2 * Fs);sine1 = dsp.SineWave(频率= 10 e3, SampleRate = Fs,SamplesPerFrame = FrameSize);sine2 = dsp.SineWave(频率= 20 e3, SampleRate = Fs,SamplesPerFrame = FrameSize);抽搐toc < 10 x = sine1 sine2 () + () + 0.01。* randn (FrameSize, 1);% 96千赫y = halfbandInterpolator (x);% 192千赫范围(y);结束释放(范围);

注意,光谱副本都减了大约40 dB大约提供的衰减halfband过滤器。您可以获得一个阴谋与插值样本覆盖输入样本为滤波器的群时延补偿。注意,输入样本在滤波器的输出保持不变。这是因为一个多相的分支halfband过滤器是一个纯延迟分支不改变输入样本。

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:结束)传说(“输入样本”,“插值样本”)

图包含一个坐标轴对象。坐标轴对象包含2杆类型的对象。这些对象代表输入样本插值样本。

在大批杀害的情况下,在指定的采样率dsp.FIRHalfbandDecimator对应滤波器的采样率,由于对象过滤器然后downsamples(概念)。因此,杀害多人者 Fs 在FVTool指定不需要乘以任何因素。

FrameSize = 256;傅氏国际= 2 * Fs;halfbandDecimator = dsp.FIRHalfbandDecimator (SampleRate =国际,规范=“筛选器顺序和过渡宽度”,FilterOrder = N, TransitionWidth = 4000);fvt = fvtool (halfbandDecimator Fs =国际);% #好< NASGU >范围=简介(SampleRate = Fs);sine1 = dsp.SineWave(频率= 10 e3, SampleRate = Fs,SamplesPerFrame = FrameSize);sine2 = dsp.SineWave(频率= 20 e3, SampleRate = Fs,SamplesPerFrame = FrameSize);抽搐toc < 10 x = sine1 sine2 () + () + 0.01。* randn (FrameSize, 1);% 96千赫y = halfbandInterpolator (x);% 192千赫xd = halfbandDecimator (y);% 96千赫范围(xd);结束

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。

释放(范围);

获得的滤波器系数

滤波器系数可以从插入器中提取/杀害多人者使用特遣部队函数。

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

使用不同的设计规范

代替指定过滤器的顺序和过渡宽度,可以设计一个最小订单过滤器提供给定过渡宽度以及给定的阻带衰减。

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

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。

注意,与所有插入器一样,通带增益绝对单位等于插值因子halfbands (2)。这对应于一个通带增益为6.02 dB。

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

halfbandDecimator = dsp.FIRHalfbandDecimator (SampleRate = Fs,规范=“过滤器”秩序和阻带衰减,StopbandAttenuation = Ast, FilterOrder = N);fvtool (halfbandDecimator Fs = Fs);

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。

与插入器,杀害多人者获得1(0分贝)的通频带。

银行使用Halfband过滤器进行过滤

Halfband插入器和杀害多人者可以用来有效地实现合成/分析滤波器。halfband过滤器显示到目前为止都是低通滤波器。用一个额外的加法器,可以获得一个高通滤波响应除了低通响应,并使用两个响应滤波器组实现。

下面的代码模拟正交镜像滤波器(QMF)银行。8 kHz信号组成的1 kHz和3 kHz正弦波是分为两个4 kHz信号通过低通和高通halfband杀害多人者。低通滤波器信号保留1 kHz正弦波,而高通滤波信号保留3千赫正弦波(别名将采样后1 kHz)。然后合并在一起的信号合成滤波器组使用halfband插入器。高通的分支upconverts别名1 kHz正弦波回到3千赫。插值信号有一个8 kHz的采样率。

Fs1 = 8000;% =单位赫兹规范=“筛选器顺序和过渡宽度”;订单= 52个;TW = 4.1 e2;% =单位赫兹%建立冷杉Halfband插入器halfbandInterpolator = dsp.FIRHalfbandInterpolator (规范=规范,FilterOrder =订单,TransitionWidth = TW,SampleRate = Fs1/2,FilterBankInputPort = true);%建立冷杉Halfband杀害多人者halfbandDecimator = dsp.FIRHalfbandDecimator (规范=规范,FilterOrder =订单,TransitionWidth = TW,SampleRate = Fs1);%的输入f1 = 1000;f2 = 3000;InputWave = dsp.SineWave(频率= (f1、f2) SampleRate = Fs1、SamplesPerFrame = 1024,振幅= 0.25 [1]);%构造对象查看输入和输出频谱分析仪范围=简介(SampleRate = Fs1、PlotAsTwoSidedSpectrum = false, ShowLegend = true,YLimits = 30 [-120],Title =“输入信号和输出信号的正交镜像滤波器”,ChannelNames = {“输入”,“输出”});% #好< CLARRSTR >抽搐toc < 10输入=总和(InputWave (), 2);NoisyInput =输入+ (10 ^ 5)* randn (1024 1);(低通、高通)= halfbandDecimator (NoisyInput);输出= halfbandInterpolator(低通、高通);范围([NoisyInput、输出]);结束释放(范围);

先进的设计选项:指定不同的设计算法

所有的设计提出了迄今为止最优equiripple设计。dsp.FIRHalfbandDecimatordsp.FIRHalfbandInterpolator系统对象也可以设计他们的过滤器使用Kaiser窗方法。

Fs = 44.1 e3;N = 90;TW = 1000;equirippleHBFilter = dsp.FIRHalfbandInterpolator (DesignMethod =“Equiripple”,规范=“筛选器顺序和过渡宽度”,SampleRate = Fs,TransitionWidth = TW,FilterOrder = N);kaiserHBFilter = dsp.FIRHalfbandInterpolator (DesignMethod =“皇帝”,规范=“筛选器顺序和过渡宽度”,SampleRate = Fs,TransitionWidth = TW,FilterOrder = N);

你可以用FVTool比较设计。两个设计允许最小阻带衰减之间的权衡和更大的总衰减。

fvt = fvtool (equirippleHBFilter kaiserHBFilter, Fs = 2 * Fs);传奇(fvt“Equiripple设计”,“Kaiser-window设计”)

图级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含3线类型的对象。这些对象代表Equiripple设计,Kaiser-window设计。

如果你使用fdesign.interpolatorfdesign.decimator对象,其他设计算法,如最小二乘线性滤波器滤波器设计是可用的。确定可用的设计方法对于一个给定的列表过滤规范对象,使用designmethods函数。

filtSpecs = fdesign.interpolator (2“halfband”,“N、TW”N TW / Fs);designmethods (filtSpecs“杉”);
冷杉设计方法为类fdesign.interpolator (N, TW): equiripple firls kaiserwin

控制阻带衰减

另外,可以指定一个订单和阻带衰减。这允许整体阻带衰减和过渡宽度之间的权衡。

Ast = 60;%最小阻带衰减equirippleHBFilter = dsp.FIRHalfbandInterpolator (DesignMethod =“Equiripple”,规范=“过滤器”秩序和阻带衰减,SampleRate = Fs,StopbandAttenuation = Ast,FilterOrder = N);kaiserHBFilter = dsp.FIRHalfbandInterpolator (DesignMethod =“皇帝”,规范=“过滤器”秩序和阻带衰减,SampleRate = Fs,StopbandAttenuation = Ast,FilterOrder = N);fvt = fvtool (equirippleHBFilter kaiserHBFilter, Fs = 2 * Fs);传奇(fvt“Equiripple设计”,“Kaiser-window设计”)

图级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含3线类型的对象。这些对象代表Equiripple设计,Kaiser-window设计。

最小订单的设计

Kaiser窗设计也可以使用除了equiripple设计在设计滤波器的最小订单需要达到设计规范。实际订单Kaiser窗设计大于equiripple所需的设计,但整体的阻带衰减是更好的回报。

Fs = 44.1 e3;TW = 1000;%过渡宽度Ast = 60;% 60 dB最小阻带衰减equirippleHBFilter = dsp.FIRHalfbandDecimator (DesignMethod =“Equiripple”,规范=“过渡宽度和阻带衰减”,SampleRate = Fs,TransitionWidth = TW,StopbandAttenuation = Ast);kaiserHBFilter = dsp.FIRHalfbandDecimator (DesignMethod =“皇帝”,规范=“过渡宽度和阻带衰减”,SampleRate = Fs,TransitionWidth = TW,StopbandAttenuation = Ast);fvt = fvtool (equirippleHBFilter kaiserHBFilter);传奇(fvt“Equiripple设计”,“Kaiser-window设计”)

图级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含3线类型的对象。这些对象代表Equiripple设计,Kaiser-window设计。

自动选择滤波器的设计技术

除了“Equiripple”“皇帝”,DesignMethod的属性dsp.FIRHalfbandDecimatordsp.FIRHalfbandInterpolatorS系统也可以被指定为对象“汽车”。当DesignMethod被设置为“汽车”滤波器设计方法是自动选择的对象基于滤波器的设计参数。

Fs = 44.1 e3;TW = 1000;%过渡宽度Ast = 60;% 60 dB最小阻带衰减autoHBFilter = dsp.FIRHalfbandDecimator (DesignMethod =“汽车”,规范=“过渡宽度和阻带衰减”,SampleRate = Fs,TransitionWidth = TW,StopbandAttenuation = Ast);fvt = fvtool (autoHBFilter);传奇(fvt“DesignMethod =汽车”);

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。该对象代表DesignMethod =汽车。

对于上述过滤器规格,您可以观察到的响应,系统级对象设计一个equiripple过滤器。如果设计约束是非常紧密的,如一个非常高的阻带衰减或一个非常狭窄的过渡宽度,然后算法自动选择Kaiser窗方法。凯撒最佳窗口方法设计滤波器非常紧密的规范。然而,如果设计约束不紧,那么该算法执行equiripple设计。

以下说明情况下,过滤器规格执行equiripple设计太紧。的DesignMethod设置对象的属性“Equiripple”。因此,对象试图设计过滤器使用equiripple特点和设计无法收敛,导致对融合生成警告。

Fs = 192年e3;TW = 100;%过渡宽度Ast = 180;% 180分贝最小阻带衰减equirippleHBFilter = dsp.FIRHalfbandDecimator (DesignMethod =“Equiripple”,TransitionWidth = TW,StopbandAttenuation = Ast,SampleRate = Fs);fvt = fvtool (equirippleHBFilter);
警告:10448年最后过滤器的顺序可能是太高,最佳满足约束。
警告:设计不收敛。5 1)检查结果的迭代次数使用freqz过滤器。2)检查规范。3)筛选器顺序可能太大或太小。4)多波段过滤器,使过渡区域更相似的宽度。如果犯错非常小,过滤订单可能太高了
传奇(fvt“DesignMethod = Equiripple”);

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。该对象代表DesignMethod = Equiripple。

在这种情况下,可以设计一个滤波器,设计通过设置收敛DesignMethod属性”汽车”或“皇帝”,对象设计halfband过滤器使用Kaiser窗方法。

Fs = 192年e3;TW = 100;%过渡宽度Ast = 180;% 180分贝最小阻带衰减autoHBFilter = dsp.FIRHalfbandDecimator (DesignMethod =“汽车”,TransitionWidth = TW,StopbandAttenuation = Ast,SampleRate = Fs);fvt = fvtool (autoHBFilter);传奇(fvt“DesignMethod =汽车”);

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。该对象代表DesignMethod =汽车。

Equiripple设计增加阻带衰减

使用fdesign.interpolatorfdesign.decimator对象,你也可以修改形状equiripple阻带的设计通过指定可选的“StopbandShape”论点的设计函数。

Fs = 44.1 e3;TW = 1000 / (Fs / 2);%过渡宽度Ast = 60;% 60 dB最小阻带衰减filtSpecs = fdesign.decimator (2“halfband”,“TW, Ast”TW, Ast);equirippleHBFilter1 =设计(filtSpecs,“equiripple”,StopbandShape =“1 / f”StopbandDecay = 4, SystemObject = true);equirippleHBFilter2 =设计(filtSpecs,“equiripple”,StopbandShape =“线性”SystemObject StopbandDecay = 53.333, = true);fvt = fvtool (equirippleHBFilter1 equirippleHBFilter2,Fs = Fs);传奇(fvt“阻带衰减(1 / f) ^ 4”,“阻带衰减线性”)

图级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含3线类型的对象。这些对象代表阻带衰减(1 / f) ^ 4,阻带衰减线性。

高通滤波Halfband过滤器

高通halfband滤波器可以从低通halfband获得滤波器通过改变每秒钟系数的符号。或者,你可以直接设计高通滤波halfband通过设置类型财产的fdesign.decimator对象“高通滤波”。

filtSpecs = fdesign.decimator (2“halfband”,“TW, Ast”、TW Ast类型=“高反差保留”);halfbandHPFilter =设计(filtSpecs,“equiripple”,StopbandShape =“线性”SystemObject StopbandDecay = 53.333, = true);fvt = fvtool (halfbandHPFilter equirippleHBFilter2, Fs = Fs);传奇(fvt“高反差保留halfband过滤”,“低通halfband过滤”)

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。这些对象代表高通滤波halfband过滤器,低通滤波器halfband过滤器。