Групповая задержка фильтра и ее расчёт

Содержание

DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов

Распространяется под лицензией LGPL v3

Страница библиотеки на GitHub

Обнаружили ошибку? Выделите ее мышью и нажмите ctrl+enter
Введение

Аналоговые и цифровые фильтры характеризуются передаточными характеристиками и соответственно, которые могут быть записаны как рациональные функции комплексных переменных и :

(1)
предполагается, что .

C передаточными функциями связано понятие комплексного коэффициента передачи. Для аналогового фильтра комплексный коэффициент передачи получается подстановкой , а для цифрового — подстановкой . Комплексные коэффициенты передачи и аналогового и цифрового фильтров равны:

(2)

Комплексные коэффициенты передачи можно описать в терминах модуля и фазы, тогда получим амплиудно-частотную (AЧХ) и фазочастотную (ФЧХ) характеристики.

АЧХ и ФЧХ аналогового фильтра:

(3)

АЧХ и ФЧХ цифрового фильтра:

(4)

АЧХ характеризует избирательные свойства фильтра, а ФЧХ — фазовые сдвиги, которые будут приобретать различные частоты сигнала при прохождении через данный фильтр.

Связь ФЧХ и временн
'{о

й задержки гармонического сигнала. Фазовая задержка фильтра} Для гармонического синусоидального сигнала фазовый сдвиг соответствует временно́му сдвигу, как это показано на рисунке 1.

Фазовый сдвиг и временн<br>'{а
Рисунок 1. Фазовый сдвиг и временн
'{а

Задержанный сигнал можно представить как:

(5)
где задержка связана с фазовым поворотом на частоте как:
(6)

Тогда при прохождении сигнала через фильтр с ФЧХ , временна́я задержка гармонического сигнала на выходе будет зависеть от частоты и удовлетворять равенству:

(7)

Параметр носит название фазовой задержки фильтра и определяет задержку гармонического сигнала на выходе фильтра с ФЧХ .

Связь ФЧХ и задержки огибающей сигнала. Групповая задержка фильтра

Если входной сигнал не просто является гармоническим колебанием с частотой , но имеет некоторую огибающую в полосе от до , то различные частоты из заданной полосы будут иметь различные задержки.

Мы можем формально рассмотреть приращения:

(8)
(9)
Вычитая первое из второго получим:
(10)
и приводя подобные:
(11)
В предельном переходе при получаем производную ФЧХ по частоте, и задержка характеризует групповое время запаздывания (групповую задержку):
(12)

Смысл групповой задержки заключается в том, что на данную величину задерживается огибающая сигнала, которая, как правило, несёт полезную информацию. Само гармоническое колебание задерживается на величину фазовой задержки .

Продемонстрируем это на примере.

Рассмотрим АЧХ , ФЧХ , фазовую задержку и групповое время запаздывания цифрового эллиптического фильтра нижних частот 8 порядка c коэффициентами передаточной функции :

(13)

На рисунке 2 показаны графики АЧХ , ФЧХ , фазовой задержки и группового время запаздывания данного фильтра.

АЧХ, ФЧХ, фазовая и групповая задержка рассчитанного фильтра
Рисунок 2. АЧХ, ФЧХ, фазовая и групповая задержка рассчитанного фильтра

Пусть также дан отсчёт гармонического сигнала на нормированной частоте :

(14)
с треугольной амплитудной огибающей , как это показано на рисунке 3а. Входной сигнал на рисунке 3 показан пунктирной линией.

Из характеристик фильтра, приведенных на рисунке 2 можно видеть, что фазовая задержка фильтра на частоте тестового сигнала равна отсчётов, а групповая задержка отсчётов, что почти в два раза выше фазовой задержки.

Пропустим сигнал через данный эллиптический фильтр и проанализируем сигнал на выходе фильтра, показанный на рисунке 3б сплошной линией. Можно видеть, что выходной сигнал задержан относительно входного.

Прохождение сигнала с треугольной огибающей через заданный фильтр
Рисунок 3. Прохождение сигнала с треугольной огибающей через заданный фильтр

Рассмотрим задержку гармонического сигнала на частоте , как это показано на рисунке 3в при увеличении масштаба по оси времени. Можно видеть, что гармоническое колебание задержано на величину фазовой задержки отсчётов. Это можно видеть как по максимумам колебания, так и по точкам пересечения нуля.

Рассмотрим теперь задержку треугольной огибающей на выходе фильтра, как это показано с увеличением масштаба на рисунке 3г. Можно видеть, что треугольная огибающая задержана на величину групповой задержки отсчётов.

Таким образом мы продемонстрировали, что прохождение сигнала через фильтр характеризуется двумя параметрами: фазовой задержкой , которая характеризует задержку гармонического сигнала в результате фазового сдвига, а также величиной группового времени запаздывания (групповой задержки) , которая определяет задержку огибающей гармонического сигнала, и может существенно отличаться от фазовой задержки.

При передачи информации гармоническое колебание не является информационным, поэтому на практике величина группового времени запаздывания является более часто используемым параметром, так как именно оно определяет задержку информационной огибающей при прохождении сигнала через фильтр.

Расчет групповой задержки цифровых БИХ-фильтров

Расчет групповой задержки на основе численного дифференцирования ФЧХ согласно (12) бывает затруднительно ввиду наличия разрывов ФЧХ, как это показано на рисунке 3. В результате дифференцирования возникают выбросы в групповой задержке, которые мешают анализу.

Для улучшения качества расчёта группового времени запаздывания можно использовать алгоритм, приведенный в данном параграфе для цифрового БИХ-фильтра.

Комплексный коэффициент передачи цифрового БИХ-фильтра имеет вид:

(15)

Преобразуем по формуле Эйлера:

(16)
где
(17)

В дальнейшем нам также пригодятся производные:

(18)

Продолжим преобразование комплексного коэффициента передачи (16):

(19)
Опустим в обозначениях зависимость от для упрощения записи:
(20)
(21)
Тогда сокращенная запись имеет вид.
(22)
и групповая задержка равна:
(23)

Рассчитаем производную арктангенса:

(24)

Преобразуем и получим:

(25)

Введем следующие обозначения:

(26)
также учтем, что
(27)
Тогда окончательно можно записать:

(28)

Заметим, что при вычислении и используются аналитические производные, в результате (28), не испытает искажений численного дифференцирования ФЧХ.

Расчет групповой задержки аналоговых фильтров

Комплексный коэффициент передачи аналогового фильтра имеет вид:

(29)

Выражение (28) справедливо и для аналоговых фильтров, если мы сможем расписать в виде:

(30)

Перепишем (30) в следующем виде:

(31)
где
(32)
(33)

Тогда окончательно для аналогового фильтра функции , , и равны:

(34)
(35)
(36)
(37)

Также для расчёта групповой задержки согласно (28) требуется вычислить производные:

(38)
(39)
(40)
(41)

Подставляя выражения , , и из уравнений (34)–(37), а также их производные (38)–(41) в выражение (28), получим значения групповой задержки аналогового фильтра.

Релизация в DSPL-2.0

Приведенный алгоритм расчёта групповой задержки аналоговых и цифровых фильтров реализован программно в библиотеке DSPL-2.0. Функция phase_delay реализует расчёт фазовой задержи фильтра, заданного векторами коэффициентов передаточной функции, а функция group_delay рассчитывает групповое время запаздывания фильтра.

Данные для тестового примера, демонстрирующего различие фазовой и групповой задержки фильтра также рассчитаны с использованием DSPL-2.0. Исходный код программы group_delay_test расчёта данных для построения рисунков 2 и 3 приведен в следующем листинге:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"


/*filter order */
#define ORD 8

/* Frequency response vector size */
#define T  201
#define N  2000


/*******************************************************************************
 * Нахожу значение y(x0) в табличной функции y(x)
 ******************************************************************************/
double find_value(double* x, double *y, int n, double x0)
{
    double val   = y[0];
    double dxmin = fabs(x[0] - x0);
    int i;
    double dx;
    for(i = 0; i < n; i++)
    {
        dx = fabs(x[i] - x0);
        if(dx < dxmin)
        {
            dxmin = dx;
            val = y[i];
        }
    }
    return val;
}


/*******************************************************************************
 * Main program
 ******************************************************************************/
int main(int argc, char* argv[])
{
    void* hdspl;              /* DSPL handle         */
    void* hplot[4];           /* GNUPLOT handle      */
    hdspl = dspl_load();      /* Load DSPL functions */

    double b[ORD+1];  /* Коэффициенты числителя H(z) эллиптического фильтра */
    double a[ORD+1];  /* Коэффициенты знаменателя H(z) эллиптического фильтра */
    double w[N];      /* нормированная часта */
    double tau_p[N];  /* Фазовая задержка фильтра */
    double tau_g[N];  /* Групповая задержка фильтра */
    double mag[N];    /* АЧХ фильтра */
    double phi[N];    /* ФЧХ фильтра */
    double t[T];      /* время */
    double x[T];      /* входной сигнал */
    double y[T];      /* выходной сигнал */
    double zx[T];     /* треугольная огибающая входного сигнала */
    double tzy[T];    /* время смещенное на величину групповой задержки */
    double zy[T];     /* треугольная огибающая на выходе фильтра */
    
    double g, tg, tp;
    
    int i;
    
    /* Рассчитываем эллиптический БИХ-фильтр */
    iir(0.5, 60.0, ORD, 0.15, 0.0, DSPL_FILTER_LPF | DSPL_FILTER_ELLIP, b, a);
    
    /* вывод коэффициентов фильтра на печать */
    for(i = 0; i <= ORD; i++)
       printf("%.9f    %.9f\n", b[i], a[i]);
    
    /* Заполняю массив нормированной частоты от 0 до pi/4 */
    linspace(0, M_PI*0.25, N, DSPL_PERIODIC, w);
    
    /* рассчет фазовой задержки */
    phase_delay(b,a,ORD, DSPL_FLAG_DIGITAL, w, N, tau_p); 
    
    /* рассчет групповой задержки */
    group_delay(b,a,ORD, DSPL_FLAG_DIGITAL, w, N, tau_g); 
    
    /* рассчет АЧХ и ФЧХ задержки */
    filter_freq_resp(b, a, ORD, w, N, DSPL_FLAG_DIGITAL, mag, phi, NULL);

    /* 
    находим значения АЧХ, фазовой и групповой задержки для частоты 
    входного сигнала pi/8 и выводим значения на печать.
    */
    g  = find_value(w, mag,   N, 0.125*M_PI);
    tg = find_value(w, tau_g, N, 0.125*M_PI);
    tp = find_value(w, tau_p, N, 0.125*M_PI);
    printf(" gain  = %.4f\n tau_g = %.3f\n tau_p = %.3f\n", g, tg, tp);

    /* Сохраняем АЧХ, ФЧХ, фазовую и групповую задержку в файлы для 
       построения графиков */
    writetxt(w, tau_g, N, "dat/tau_g.txt");
    writetxt(w, tau_p, N, "dat/tau_p.txt");
    writetxt(w, mag,   N, "dat/mag.txt");
    writetxt(w, phi,   N, "dat/phi.txt");
    
    /* Формируем сигнал и треугольные огибающие на входе и выходе */
    window(zx, T, DSPL_WIN_BARTLETT | DSPL_SYMMETRIC, 0);
    window(zy, T, DSPL_WIN_BARTLETT | DSPL_SYMMETRIC, 0);
    for(i = 0; i < T; i++)
    {
        t[i] = (double)i;  /* время */
        x[i] = sin(M_PI * 0.125 * t[i]) * zx[i]; /* сигнал на входе */
        tzy[i] = t[i] + tg; /* смещаю огибающую на групповую задержку */
        /* умножаю на найденное значение АЧХ на частоте pi/8 */
        zy[i] = zx[i] * g;  
    }
    /* пропускаю сигнал через фильтр */
    filter_iir(b,a,ORD,x,T,y);
    
    /* сохраняю входной и выходной сигналы, а также треугольные огибающие */
    writetxt(t, x, T, "dat/x.txt");
    writetxt(t, y, T, "dat/y.txt");
    writetxt(t, zx, T, "dat/zx.txt");
    writetxt(tzy, zy, T, "dat/zy.txt");


    /*------------------------------------------------------------------------*/
    /* Построение графиков GNUPLOT */
    gnuplot_create(argc, argv, 800, 600, "img/group_delay.png", hplot);
    gnuplot_cmd(hplot[0], "unset key");
    gnuplot_cmd(hplot[0], "set grid");
    gnuplot_cmd(hplot[0], "unset xlabel");
    gnuplot_cmd(hplot[0], "plot 'dat/tau_g.txt' with lines, 'dat/tau_p.txt' with lines");
    gnuplot_close(hplot[0]);
    
    gnuplot_create(argc, argv, 800, 600, "img/group_delay.png", hplot+1);
    gnuplot_cmd(hplot[1], "unset key");
    gnuplot_cmd(hplot[1], "set grid");
    gnuplot_cmd(hplot[1], "unset xlabel");
    gnuplot_cmd(hplot[1], "plot 'dat/mag.txt' with lines");
    gnuplot_close(hplot[1]);
    
    gnuplot_create(argc, argv, 800, 600, "img/group_delay.png", hplot+2);
    gnuplot_cmd(hplot[2], "unset key");
    gnuplot_cmd(hplot[2], "set grid");
    gnuplot_cmd(hplot[2], "unset xlabel");
    gnuplot_cmd(hplot[2], "plot 'dat/x.txt' with lines, 'dat/zx.txt' with lines");
    gnuplot_close(hplot[2]);
    
    gnuplot_create(argc, argv, 800, 600, "img/group_delay.png", hplot+3);
    gnuplot_cmd(hplot[3], "unset key");
    gnuplot_cmd(hplot[3], "set grid");
    gnuplot_cmd(hplot[3], "unset xlabel");
    gnuplot_cmd(hplot[3], "plot 'dat/y.txt' with lines, 'dat/zy.txt' with lines");
    gnuplot_close(hplot[3]);
    /* free dspl handle */
    dspl_free(hdspl);

    return 0;
}

Выводы

В данном разделе мы рассмотрели такие характеристики цифровых и аналоговых фильтров, как фазовая и групповая задержка.

Было показано, что величина фазовой задержки определяет временну́ю задержку гармонического сигнала на выходе фильтра, определяемую фазовым поворотом в соответствии со значением ФЧХ на заданной частоте.

В отличии от фазовой задержки, групповое время запаздывания определяет величину временно́й задержки огибающей гармонического сигнала.

Приведены аналитические выражения расчёта групповой задержки аналогового и цифрового фильтра без численного дифференцирования ФЧХ.

Список литературы
[1] Daniels R. Approximation Methods for Electronic Filter Design. New York, McGraw-Hill, 1974, 388 p.

[2] Orfanidis S.J. Introduction to Signal Processing. Rutgers University, 2010. [PDF]

[3] Оппенгейм А., Шаффер Р. Цифровая обработка сигналов. Москва, Техносфера, 2012. 1048 с. ISBN 978-5-94836-329-5

[4] Сергиенко А.Б. Цифровая обработка сигналов СПб, Питер, 2002.

Последнее изменение страницы: 22.10.2020 (19:54:50)