主要内容

冷杉Halfband滤波器设计

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

Halfband过滤器有两个重要特征,通带和阻带波动必须相同,和passband-edge stopband-edge频率从Halfband等距频率f / 4(或者π/ 2 rad /样本归一化频率)。

获得Halfband系数

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

Fs = 96年e3;Fp = 22 e3;N = 100;num = firhalfband (N, Fp / (Fs / 2));fvt = fvtool (num,“Fs”Fs,“颜色”,“白色”);fvt。MagnitudeDisplay =“零”;

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

fvt。分析=“冲动”;

dsp.FIRHalfbandInterpolatordsp.FIRHalfbandDecimator

firhalfband函数提供了一些其他的设计选择。然而,对于大多数情况下最好直接与工作dsp.FIRHalfbandInterpolatordsp.FIRHalfbandDecimator。这两个系统对象不仅设计系数,但也提供高效的多相实现插入器/杀害多人者。他们支持过金宝app滤双/单精度浮点数据以及定点数据。他们也支持C、HDL金宝app代码生成和优化手臂®皮层®M和皮层代码生成。

halfbandInterpolator = dsp.FIRHalfbandInterpolator (“SampleRate”Fs,“规范”,“筛选器顺序和过渡宽度”,“FilterOrder”N“TransitionWidth”,4000);fvtool (halfbandInterpolator“Fs”2 * Fs,“颜色”,“白色”);

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

FrameSize = 256;范围= dsp.SpectrumAnalyzer (“SampleRate”2 * Fs,“SpectralAverages”5);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:结束)传说(输入样本的,“插值样本”)

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

FrameSize = 256;傅氏国际= 2 * Fs;halfbandDecimator = dsp.FIRHalfbandDecimator (“SampleRate”傅氏国际,“规范”,“筛选器顺序和过渡宽度”,“FilterOrder”N“TransitionWidth”,4000);fvtool (halfbandDecimator“Fs”傅氏国际,“颜色”,“白色”);范围= dsp.SpectrumAnalyzer (“SampleRate”Fs,“SpectralAverages”5);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);结束释放(范围);

获得的滤波器系数

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

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

使用不同的设计规范

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

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

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

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

halfbandDecimator = dsp.FIRHalfbandDecimator (“SampleRate”Fs,“规范”,“筛选器顺序和阻带衰减”,“StopbandAttenuation”Ast,“FilterOrder”N);fvtool (halfbandDecimator“Fs”Fs,“颜色”,“白色”);

与插入器,杀害多人者获得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”,真正的);%建立冷杉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]);%构造对象查看输入和输出频谱分析仪范围= dsp.SpectrumAnalyzer (“SampleRate”,Fs1、“PlotAsTwoSidedSpectrum”假的,“ShowLegend”,真的,“YLimits”,30 [-120],“标题”,输入信号和输出信号的正交镜像滤波器的);范围。ChannelNames = {“输入”,“输出”};抽搐toc < 10输入=总和(InputWave (), 2);NoisyInput =输入+ (10 ^ 5)* randn (1024 1);(低通、高通)= halfbandDecimator (NoisyInput);输出= halfbandInterpolator(低通、高通);范围([NoisyInput、输出]);结束释放(范围);

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

所有的设计提出了迄今为止最优equiripple设计。使用fdesign.interpolatorfdesign.decimator,其他设计算法。

Fs = 44.1 e3;N = 90;TW = 1000 / Fs;%过渡宽度filtSpecs = fdesign.interpolator (2“halfband”,“N, TW”N、TW);equirippleHBFilter =设计(filtSpecs,“equiripple”,“SystemObject”,真正的);leastSquaresHBFilter =设计(filtSpecs,“firls”,“SystemObject”,真正的);kaiserHBFilter =设计(filtSpecs,“kaiserwin”,“SystemObject”,真正的);

你可以用FVTool比较设计。不同的设计允许最小阻带衰减之间的权衡和总体衰减。

fvt = fvtool (equirippleHBFilter leastSquaresHBFilter kaiserHBFilter,“Fs”2 * Fs,“颜色”,“白色”);传奇(fvt“Equiripple设计”,“最小二乘设计”,“Kaiser-window设计”)

控制阻带衰减

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

Ast = 60;%最小阻带衰减filtSpecs = fdesign.interpolator (2“halfband”,“N, Ast”,N, Ast);equirippleHBFilter =设计(filtSpecs,“equiripple”,“SystemObject”,真正的);kaiserHBFilter =设计(filtSpecs,“kaiserwin”,“SystemObject”,真正的);fvt = fvtool (equirippleHBFilter kaiserHBFilter,“Fs”2 * Fs,“颜色”,“白色”);传奇(fvt“Equiripple设计”,“Kaiser-window设计”)

最小订单的设计

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

Fs = 44.1 e3;TW = 1000 / (Fs / 2);%过渡宽度Ast = 60;% 60 dB最小阻带衰减filtSpecs = fdesign.decimator (2“halfband”,“TW, Ast”TW, Ast);equirippleHBFilter =设计(filtSpecs,“equiripple”,“SystemObject”,真正的);kaiserHBFilter =设计(filtSpecs,“kaiserwin”,“SystemObject”,真正的);fvt = fvtool (equirippleHBFilter kaiserHBFilter,“Fs”Fs,“颜色”,“白色”);传奇(fvt“Equiripple设计”,“Kaiser-window设计”)

Equiripple设计增加阻带衰减

而不是设计Kaiser窗过滤器,还可以获得增加阻带衰减equiripple的设计与修改。

equirippleHBFilter1 =设计(filtSpecs,“equiripple”,“StopbandShape”,“1 / f”,“StopbandDecay”4“SystemObject”,真正的);equirippleHBFilter2 =设计(filtSpecs,“equiripple”,“StopbandShape”,“线性”,“StopbandDecay”,53.333,“SystemObject”,真正的);fvt = fvtool (equirippleHBFilter1 equirippleHBFilter2,“Fs”Fs,“颜色”,“白色”);传奇(fvt的阻带衰减(1 / f) ^ 4”,的阻带衰减线性的)

高通滤波Halfband过滤器

高通halfband滤波器可以从低通halfband获得滤波器通过改变每秒钟系数的符号。或者,一个可以直接设计高通滤波halfband通过将“类型”属性设置为“高反差保留”。

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