主要内容

使用Farrow结构的分数阶延迟滤波器

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

理想分数阶延迟滤波器

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

法罗结构

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

最大平坦FIR近似(拉格朗日插值)

拉格朗日插值是一种时域方法,它导致了一种基于多项式的滤波器的特殊情况。输出信号用M次多项式逼近。最简单的情况(M=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 *π);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(transferFuncEstimator) release(arrPlotMag) release(arrPlotPhaseDelay) release(fracDelay)

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

范围= timescope (“SampleRate”, 1000,...“YLimits”[1],...“TimeSpanSource”“属性”...“时间间隔”02);正弦= 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 *π);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(transferFuncEstimator) release(arrPlotMag) release(arrPlotPhaseDelay) release(fracDelay)

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

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

时变分数延迟

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

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