decimator的翻译结果
这个例子展示了如何设计用于离散序列抽取和插值的滤波器。
低通滤波在速率转换中的作用
速率转换是改变离散信号的速率以获得基础连续信号的新的离散表示的过程。这个过程包括均匀的下采样和上采样。的均匀下采样率N指的是N-第一个样本序列,丢弃其余的样本。的因子均匀上采样N的填充N每两个连续样本之间有-1个0。
L = 3;上采样率%M = 2;下采样率%%上采样和下采样xDown = downsample(x,M)
x = 1 2 3 xUp = 1 0 0 2 0 0 3 0 0 xDown = 1 3
这两种基本操作都会引入信号伪象:下采样引入混叠,上采样引入成像。为了减轻这些影响,可以使用低通滤波器。
当下抽样的速率为,应用低通滤波器之前下采样限制了输入带宽,从而消除了频谱混叠。这类似于A/D转换器中使用的模拟LPF。理想情况下,这样的抗混叠滤波器具有单位增益和截止频率,在这里为信号的奈奎斯特频率。注意:底层采样频率是不重要的,我们假设归一化频率(即。)。
当上抽样速率为,上采样后应用的低通滤波器称为反成像滤波器。滤波器去除低速率信号的光谱图像。理想情况下,这种反成像滤波器的截止频率为(像它的反锯齿对应),而它的增益是.
速率的上采样和下采样操作需要一个归一化截止频率为的低通滤波器.唯一的区别是所需的增益和滤波器的位置(在速率转换之前或之后)。
对信号的上采样倍数的组合,然后过滤,然后下采样一个因子将序列采样速率转换为的有理数因子.这是通过按速率上采样得到的然后过滤,然后按速率下采样.速率转换操作的顺序不能被转换。在上采样和下采样阶段之间放置一个组合了抗混叠和反成像的单一滤波器。该滤波器是一个归一化截止频率为的低通滤波器获得了.
而任何低通FIR设计函数(例如。fir1
,firpm
,或fdesign
)可以设计合适的抗混叠和反成像滤波器,实现其功能designMultirateFIR
提供了一个方便和简化的界面。接下来的几节将展示使用这些函数来设计过滤器并说明原因designMultirateFIR
是首选的方式。
过滤速率转换:decimator, interpolator,和有理速率转换器
滤波速率转换包括decimator, interpolator和有理速率转换器,所有这些都是速率变化块的级联,具有各种配置的过滤器。
的过滤速率转换过滤器
,upsample
,downsample
功能
大量毁灭为LTI滤波后均匀下采样。FIR抽取器可以实现如下。
设计了一个抗混叠低通滤波器h
过滤输入h
对过滤后的序列进行下采样米
定义一个输入序列X =兰特(60,1);实现一个FIR decimatorh = fir1(L*12*2,1/M);%任意过滤器xDecim = downsample(filter(h,1,x), M);
插值指的是在滤波之后进行上采样。其实现与decimation非常相似。
xInterp = filter(h,1,upsample(x,L));
最后,有理速率转换由一个插值器和一个decimator(以特定的顺序)组成。
xRC = downsample(filter(h,1,upsample(x,L)), M);
使用系统对象进行过滤速率转换
对于流数据,系统对象dsp。FIRInterpolator
,dsp。FIRDecimator
,dsp。FIRRateConverter
将速率变化和过滤封装在单个对象中。例如,插值器的构造如下所示。
firInterp = dsp.FIRInterpolator(L,h);
然后,通过一个步骤调用向新创建的对象提供一个序列。
xInterp = firInterp(x);
以类似的方式设计和使用十进制和速率转换器。
firDecim = dsp.FIRDecimator(M,h);%构造xDecim = firDecim(x);% Decimate(步进调用)firRC = dsp.FIRRateConverter(L,M,h);%构造xRC = firRC(x);%转化率(步进调用)
通常首选使用系统对象,因为它们:
允许更清晰的语法。
保留一个状态,作为后续步骤调用的筛选初始条件。
最重要的是,它们利用了一种非常有效的多相算法。
要构造这些对象,您需要速率转换因子和FIR系数。以下部分描述如何为速率转换滤波器生成适当的FIR系数。
设计一个速率转换滤波器designMultirateFIR
这个函数designMultirateFIR (L, M)
自动找到适当的比例和截止频率为一个给定的速率转换比.使用返回的FIR系数designMultirateFIR
与dsp。FIRDecimator
(如果),dsp。FIRInterpolator
(如果),或dsp。FIRRateConverter
(一般情况下)。
让我们设计一个插值滤波器:
L = 3;bInterp = designMultirateFIR(L,1);%纯上采样滤波器firInterp = dsp.FIRInterpolator(L,bInterp);
然后,应用插值器到一个序列。
%创建一个序列N = (0:89)';f = @ (t)因为(0.1 * 2 *π* t)。* exp (-0.01 * (t-25) ^ 2) + 0.2;X = f(n);%应用插值器xUp = firInterp(x);释放(firInterp);
让我们首先检查插值器的原始输出并与原始序列进行比较。
plot_raw_sequences (x, xUp);
虽然输入之间有一些相似性x
输出xUp
,有几个关键的区别。在插值信号中
时间域被拉长了(正如预期的那样)。
信号的延迟是FIR长度的一半
长度(h) / 2
(表示从今以后)。一开始有一个短暂的反应。
为了比较、对齐和缩放两个序列的时域。插值样本xUp [k]
对应于输入时间.
nUp =(0:长度(xUp)-1);i0 = length(bInterp)/2;plot_scaled_sequences (n x (1 / L) * (nUp-i0) xUp, (“原始序列”,...插补器输出顺序(时间调整)60]、[0]);
同样的思路也适用于下采样,其中时间转换是:
M = 3;bDecim = designMultirateFIR(1,M);%纯下采样滤波器firDecim = dsp.FIRDecimator(M,bDecim);xDown = firDecim(x);
把它们画在相同的刻度上,并根据延迟进行调整。注意它们完全重叠。
i0 =长度(bDecim)/2;nDown =(0:长度(xDown)-1);plot_scaled_sequences (n, x, M * nDown-i0 xDown, (“原始序列”,...十进制输出序列(时间调整)),(-10、80));
可视化的幅度响应的上采样和下采样滤波器使用fvtool
.在这种情况下,两个FIR滤波器是相同的,但增益不同。
hfv = fvtool(firInterp,firDecim);注意通带中的增益传奇(hfv插值滤波器L=+ num2str (L),...抽取过滤器M=+ num2str (M));
一般的有理转换可以同上采样和下采样一样处理。界限是收益是.这个函数designMultirateFIR
自动算出来了。
L = 5;M = 2;b = designMultirateFIR(L,M);firRC = dsp.FIRRateConverter(L,M,b);
现在让我们将组合滤波器与单独的插值/抽取组件进行比较。
firDecim = dsp.FIRDecimator(M,designMultirateFIR(1,M));firInterp = dsp.FIRInterpolator(L,designMultirateFIR(L,1));hfv = fvtool(firInterp,firDecim, firRC);注意通带中的增益传奇(hfv插值滤波器L=+ num2str (L),...抽取过滤器M=+ num2str (M),...“速率转换滤波器L/M=”+ num2str (L) +“/”+ num2str (M));
一旦FIRRateConverter
设置后,通过步进调用执行速率转换。
xRC = firRC(x);
绘制输入和滤波器输出的时间调整.
nRC = (0:length(xRC)-1)';I0 =长度(b)/2;plot_scaled_sequences (n x (1 / L) * (M * nRC-i0), xRC, (“原始序列”,...速率转换器输出序列(时间调整), 80年],[0]);
调整低通FIR设计参数
使用designMultirateFIR
你也可以调整FIR长度,过渡宽度,和阻带衰减。
调整FIR长度
FIR长度可以通过l,米,第三个参数P称为半多相长度,其默认值为12(参见输出参数更多详情)。让我们检查两个设计点。
未指定的半长度默认为12b24 = designMultirateFIR(3,1);halfPhaseLength = 20;b40 = designMultirateFIR(3,1,halfPhaseLength);
一般来说,半多相长度越大,相变越陡。
HFV = fvtool(b24,1,b40,1);传奇(hfv'多相长度= 24(默认值)',“多相长度= 40”);
调整过渡宽度
通过指定所需的过渡宽度来设计过滤器。近似长度将自动推导出来。根据默认设计绘制结果过滤器,并注意过渡宽度的差异。
Tw = 0.02;bTW = designMultirateFIR(3,1,TW);hfv = fvtool(b24,1,bTW,1);传奇(hfv'默认设计(FIR长度= 72)',“设计TW=”...+ num2str (TW) +(FIR长度="+ num2str(长度(顺便说一句))+“)”);
2的速率转换的特例:半带插值器和decimator
使用半带滤波器(即),你可以执行一个因子2的样本速率转换。的dsp。FIRHalfbandInterpolator
而且dsp。FIRHalfbandDecimator
使用半带滤波器,对象执行2倍的插值和抽取。这些系统对象是使用一种高效的多相结构实现的,专门用于该速率转换。IIR的对应dsp。IIRHalfbandInterpolator
而且dsp。IIRHalfbandDecimator
甚至可以更有效率。这些系统对象还可以使用自定义采样率。
将震级响应可视化fvtool
.在插值的情况下,滤波器在衰减光谱图像的同时保留了从0到Fs/2的大部分光谱。对于抽取,滤波器通过大约一半的波段,即0到Fs/4,衰减另一半,以减少混叠。衰减量可以设置为插值和抽取所需的任何值。如果未指定,则默认为80 dB。
Fs = 1e6;hbInterp = dsp。FIRHalfbandInterpolator (“TransitionWidth”Fs / 10...“SampleRate”Fs);fvtool (hbInterp)注意通带增益2 (6db)hbDecim = dsp。FIRHalfbandDecimator (“TransitionWidth”Fs / 10...“SampleRate”Fs);fvtool (hbDecim)
Equiripple设计
这个函数designMultirateFIR
利用基于窗口的FIR低通设计。其他低通设计方法也可以应用,如等波纹。要对设计过程进行更多控制,请使用fdesign
滤波器设计功能。方法设计了一个decimatorfdesign.decimator
函数。
M = 4;抽取因子%Fp = 80;通带边缘频率Fst = 100;止带边缘频率Ap = 0.1;通带峰到峰波纹Ast = 80;最小阻带衰减Fs = 800;采样频率fdDecim = fdesign.decimator(M,低通滤波器的Fp,置,美联社,Ast, Fs)% #好吧
fdDecim = decimator的属性:MultirateType: ' decimator ' Response: 'Lowpass' DecimationFactor: 4规格:'Fp,Fst,Ap,Ast'描述:{4x1 cell} NormalizedFrequency: 0 Fs: 800 Fs_in: 800 Fs_out: 200 Fpass: 80 Fstop: 100 Apass: 0.1000 Astop: 80
滤波器的规格确定了在80到100 Hz之间20hz的过渡波段是可接受的,带外组件的最小衰减是80db。此外,感兴趣的分量的最大失真是0.05 dB(峰峰通带波纹的一半)。满足这些规格的等纹波滤波器可以很容易地通过fdesign
接口。
eqrDecim = design(fdDecim,“equiripple”,“SystemObject”,真正的);测量(eqrDecim)
ans = Sample Rate: 800hz Passband Edge: 80hz 3-dB Point: 85.621 Hz 6-dB Point: 87.8492 Hz Stopband Edge: 100hz Passband Ripple: 0.092414 dB Stopband Atten. ans = Sample Rate: 800hz Passband Edge: 80hz 3-dB Point: 85.621 Hz 6-dB Point: 87.8492 Hz Stopband Edge: 100hz Passband Ripple: 0.092414 dB Stopband: 80.3135 dB过渡宽度:20hz
可视化的幅度响应证实了滤波器是一个等纹波滤波器。
fvtool (eqrDecim)
奈奎斯特滤波器和插值一致性
数字卷积滤波器叫做l-第n个奈奎斯特滤波器,如果它是周期性消失样本,除了中心索引。换句话说,就是抽样乘以产生冲动:
的-th波段理想低通,例如,是-th奈奎斯特滤波器。另一个例子是三角形窗口。
L = 3;t = linspace(-3*L,3*L,1024);n = (-3*L:3*L);hLP = @(t) sinc(t/L);hTri = @(t) (1-abs(t/L)).*(abs(t/L)<=1);plot_nyquist_filter (t、n hLP hTri, L);
这个函数designMultirateFIR
产生奈奎斯特滤波器,因为它是基于理想奈奎斯特滤波器的加权和截断版本。
奈奎斯特过滤器是有效的实现,因为l-th部分的系数在这些过滤器是零,这减少了所需的乘法的数量。这个特性使得这些过滤器对于抽取和插值都很有效。
插值的一致性
奈奎斯特滤波器保留输入的样本值,即使经过过滤。这个行为,叫做插值的一致性,一般来说是不正确的,如下所示。
内插一致性在奈奎斯特滤波器中是成立的,因为每一个系数都等于零l样品(中心除外)。证明很简单。假设是上采样版的(在样本之间插入零)因此,而且是插值后的信号。样本并得到以下方程。
让我们检验一下使用奈奎斯特滤波器进行插值的效果。的designMultirateFIR
函数产生奈奎斯特滤波器。正如您在下面的描述中所看到的,输入值与插值值一致。
%生成输入N = (0:20)';xInput = (n<=10).*cos(*0.05*n).*(-1).^n;L = 4;hNyq = designMultirateFIR(L,1);firNyq = dsp.FIRInterpolator(L,hNyq);xIntrNyq = firNyq(xInput);释放(firNyq);plot_shape_and_response (hNyq xIntrNyq xInput, L, num2str (L) +“-Nyuist”);
这不是其他低通滤波器的情况,如等纹波设计,如下图所示。注意,插值序列与低速率输入值不一致。另一方面,失真在非奈奎斯特滤波器中可能更低,作为插值一致性的折衷。
hNotNyq = firpm(length(hNyq)-1,[0 1/L 1.5/L 1],[1 1 0 0]);hNotNyq = hNotNyq/max(hNotNyq);%调整增益firIntrNotNyq = dsp.FIRInterpolator(L,hNotNyq);xIntrNotNyq = firIntrNotNyq (xInput);释放(firIntrNotNyq);plot_shape_and_response (hNotNyq xIntrNotNyq xInput, L,“equiripple,而不是Nyquist”);
另请参阅
功能
对象
dsp。FIRDecimator
|dsp。FIRInterpolator
|dsp。FIRRateConverter
|dsp。FIRHalfbandDecimator
|dsp。FIRHalfbandInterpolator