主要内容

使用法罗结构的分数延迟滤波器

这个例子展示了如何设计使用法罗结构实现的数字分数延迟滤波器。数字分数延迟滤波器是微调信号采样瞬间的有用工具。例如,它们通常出现在数字调制解调器的同步中,其中延迟参数随时间变化。这个例子说明了Farrow结构,一种流行的实现时变FIR分数延迟滤波器的方法。

理想分数延迟滤波器

理想的分数阶延迟滤波器是线性相位全通滤波器。它的脉冲响应是一个时移离散sinc函数,对应于一个非因果滤波器。由于脉冲响应是无限的,所以它不能由有限的时间位移来解释。因此,它是不可实现的,必须接近。

法罗结构

为了计算分数延迟滤波器的输出,我们需要估计现有离散时间样本之间输入信号的值。特殊的插值滤波器可以用来计算任意点的新采样值。其中,基于多项式的滤波器是特别有趣的,因为一个特殊的结构-法罗结构-允许简单的系数处理。特别是,Farrow结构的可调性使其非常适合于实际的硬件实现。

最大平面FIR逼近(拉格朗日插值)

拉格朗日插值是一种时域方法,它导致基于多项式的滤波器的特殊情况。输出信号用多项式近似表示.最简单的情况(=1)对应于线性插值。让我们设计并分析一个线性分数延迟滤波器,它将单位延迟按不同的分数分割:

Nx = 1024;Nf = 5;yw = 0 (Nx,Nf);transferFuncEstimator = dsp。TransferFunctionEstimator (...“SpectralAverages”25岁的“FrequencyRange”“单向的”);arrPlotPhaseDelay = dsp。ArrayPlot (“PlotType”“行”“YLimits”, 1.5 [0],...“YLabel”的相位延迟“SampleIncrement”, 1/512);arrPlotMag = dsp。ArrayPlot (“PlotType”“行”“YLimits”, -10年[1],...“YLabel”“(dB)级”“SampleIncrement”, 1/512);fracDelay = dsp.VariableFractionalDelay;xw = randn(Nx,Nf);transferFuncEstimator (xw yw);w = getFrequencyVector(transferFuncEstimator,2*pi);w = repmat(w,1,Nf);抽搐,toc < 2 yw = fracDelay(xw,[0 0.2 0.4 0.6 0.8]);H = transferFuncEstimator(xw,yw);arrPlotMag (20 * log10 (abs (H))) arrPlotPhaseDelay(角(H) / w)。结束release(fracDelay) release(transferFuncEstimator) release(arrPlotMag)

发行版(arrPlotPhaseDelay)

对于延迟的任何值,理想的滤波器应该同时具有平坦的幅度响应和平坦的相位延迟响应。这种近似只适用于最低频率。这意味着在实践中,信号需要过度采样,线性分式延迟才能正确工作。在这里,您对正弦波应用两个不同的分数延迟,并使用时间范围覆盖原始正弦波和两个延迟版本。当采样率为1000 Hz时,0.2个样品的延迟对应于0.2 ms的延迟。

Scope = timescope(“SampleRate”, 1000,...“YLimits”[1],...“时间间隔”只有,...“TimeSpanOverrunAction”“滚动”);sin = dsp。SineWave (“频率”, 50岁,“SamplesPerFrame”Nx);抽搐,Toc < 2 x = sin ();y = fracDelay(x,[.]2。8]);%延迟0.2 ms和0.8 ms范围([x, y (: 1), y (:, 2)))结束发布(fracDelay)发布(范围);

可以设计高阶拉格朗日插补器。让我们比较一下三次拉格朗日插值器和线性拉格朗日插值器:

farrowFracDelay = dsp。VariableFractionalDelay (...“InterpolationMethod”“法罗”“MaximumDelay”, 1025);Nf = 2;yw = 0 (Nx,Nf);xw = randn(Nx,Nf);H = transferFuncEstimator(xw,yw);w = getFrequencyVector(transferFuncEstimator,2*pi);w = repmat(w,1,Nf);抽搐,Toc < 2运行2秒yw(:,1) = fracDelay(xw(:,1),0.4);%延迟0.4毫秒yw(:,2) = farrowFracDelay(xw(:,2),1.4);%延迟1.4毫秒H = transferFuncEstimator(xw,yw);arrPlotMag (20 * log10 (abs (H))) arrPlotPhaseDelay(打开(角(H)) / w)。结束release(fracDelay) release(transferFuncEstimator) release(arrPlotMag)

发行版(arrPlotPhaseDelay)

当使用拉格朗日近似时,增加多项式的阶数会略微增加有用带宽。微分滤波器的长度,即脉冲响应的片段数(“Coefficients”属性的行数)等于多项式的长度(“Coefficients”属性的列数)。可以使用其他设计方法来克服这一限制。还要注意三阶滤波器的相位延迟如何在直流下从0.4个样本转移到1.4个样本。由于三次拉格朗日插值器是一个三阶滤波器,它能达到的最小延迟是1。因此,请求的延迟为1.4 ms,而不是本例中的0.4 ms。

sin = dsp。SineWave (“频率”, 50岁,“SamplesPerFrame”Nx);抽搐,Toc < 2 x = sin ();y1 = fracDelay(x,0.4);y2 = farrowFracDelay(x,1.4);范围([x, y1, y2])结束发布(fracDelay)发布(范围);

时变分数延迟

Farrow结构相对于直接形式FIR的优势在于其可调性。在许多实际应用中,延迟是时变的。对于每一个新的延迟,我们将需要在Direct-Form实现中设置一组新的系数,但对于Farrow实现,多项式系数保持不变。

抽搐,Toc < 5 x = sin ();如果Toc < 1延迟= 1;elseifToc < 2延迟= 1.2;elseifToc < 3延迟= 1.4;elseifToc < 4延迟= 1.6;其他的延迟= 1.8;结束y = farrowFracDelay(x,delay);范围((x, y))结束发布(fracDelay)发布(范围);

相关的话题