Engee 文档
Notebook

法罗滤波器的分数延迟

Farrow滤波器是一个数字插值滤波器,可用于用非整数系数过采样(改变采样率)信号。 它是由克里斯*法罗在1988年提出的。

Farrow过滤器是如何工作的?

  1. 输入信号被分成段(通常为4个样本进行三次插值)。

  2. 对于每个新值,在样本之间计算多项式近似

  3. 新参考的位置由分数延迟确定(例如,在 **x[n]**及 x[n+1]).

  4. 输出为具有新采样频率的信号。

在这个例子中,我们将考虑使用Farrow滤波器来实现信号的分数延迟,这在数字信号处理(DSP),电信,雷达和音频系统中特别有用。

分数延迟是信号的移位采样的分数数(例如,由 0.5, **0.73**或 **1.25**从采样周期)。

*整个延迟(1, 2, 3…)由FIFO缓冲器容易地实现。

*分数延迟需要在样本之间进行插值,Farrow滤波器在这里有所帮助。

该示例描述了Farrow滤波器的块模型的两种实现-第一阶和第三阶。 一般而言,该结构基于FIR滤波器和插值多项式方案。:

image_2.png

模型中Farrow滤波器的实现

模型 fractional_delay.engee 它包含Farrow滤波器的两个子系统。 子系统 Первый_порядок 实现简单的线性插值方案:

image.png

而子系统 Третий_порядок它更类似于Farrow的一般结构,并包含三个FIR滤波器。:

image.png

而且,第二和第三FIR滤波器以块的形式实现。 Дискретный КИХ-фильтр 信号处理库,第一个是子系统的形式,其中反对称FIR滤波器的直接结构是由原始算术元素组装而成的。:

image.png

一般模型考虑了50Hz正弦信号通过两个子系统,采样频率为1000Hz,分数延迟因子为0.3。:

image.png

在时域图上,您可以看到线性滤波器(1阶)成功地引入了0.3个周期的分数延迟。 这在正弦曲线通过零的区域中清晰可见。 3阶滤波器具有更复杂的结构,并且引入了1个周期的额外群延迟-由此产生的延迟为1.3个周期。:

image.png

Farrow滤波器频率响应分析

如果两个滤波器都可以处理引入分数延迟的任务,那么滤波器结构和顺序的复杂性会影响什么?

为此,我们需要分析它们的频率特性。 分析方法之一是将单个脉冲提供给线性静止系统(滤波器)的输入。 在这种情况下,滤波器的输出将反映其脉冲响应,从中很容易切换到幅度-频率响应(frequency response)。 辅助模型 fractional_delay_impulse.engee它有一个离散的脉冲源块作为信号源,并且还包含两个块 В рабочую область 使用库函数自动执行过滤器分析 DSP.jl:

image.png

让我们使用自动模型启动功能。:

In [ ]:
function start_model_engee()
    try
        engee.close("fractional_delay_impulse", force=true) # закрытие модели 
        catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
            m = engee.load("$(@__DIR__)/fractional_delay_impulse.engee") # загрузка модели
        end;

    try
        engee.run(m, verbose=true) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/fractional_delay_impulse.engee") # загрузка модели
            engee.run(m, verbose=true) # запуск модели
        end
end
Out[0]:
start_model_engee (generic function with 1 method)
In [ ]:
start_model_engee();
Building...
Progress 0%
Progress 100%
Progress 100%

让我们收集输出数据(滤波器的脉冲特性)并绘制它们的频率响应:

In [ ]:
using DSP
fs = 1000;
dataframe1 = collect(data1);
dataframe3 = collect(data3);
b1 = dataframe1.value;
b3 = dataframe3.value;
farrow_1 = PolynomialRatio(b1, 1);
farrow_3 = PolynomialRatio(b3, 1);
H1, w1 = freqresp(farrow_1);
H3, w3 = freqresp(farrow_3);
freq_vec = fs*w1/(2*pi);
plot(freq_vec, pow2db.(abs.(H1))*2, 
                    linewidth=3, 
                    title = "АЧХ фильтров Фарроу", 
                    xguide = "Частота, Гц",
                    label = "Линейный фильтр")
plot!(freq_vec, pow2db.(abs.(H3))*2, 
                    linewidth=3, 
                    yguide = "Амплитуда, дБ",
                    label = "3-й порядок") 
Out[0]:

正如您所看到的,随着滤波器阶数的增加,其线性度增加,带宽扩大。 小阶滤波器只能成功处理低频信号,而高阶滤波器可以在较宽的输入信号频率范围内工作。

结论

分数延迟法罗滤波器的优点:

灵活性-可以设置任何分数延迟(0.1*, **0.75**等等)。
\,中等计算复杂度-比SINC插值需要更少的资源。
*质量好-三次插值比线性插值提供更好的精度。

应用分数延迟:

*数字通信中的同步(时钟信号调谐)。

*音频效果(平滑音高移位,相位校正器)。

*雷达和声纳系统(信号的精确时间对齐)。

*自适应滤波器(噪声消除系统中的延迟调整)。

Farrow滤波器是实现精度和计算成本之间平衡的分数延迟的有效方法。 它在需要平滑延迟变化而不损失信号质量的任务中特别有用。