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

Содержание

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

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

Страница проекта на SourceForge libdspl-2.0 on SourceForge

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

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

equation 1
(1)
предполагается, что a_0 \neq 0.

C передаточными функциями связано понятие комплексного коэффициента передачи. Для аналогового фильтра комплексный коэффициент передачи H(j\omega) получается подстановкой s = j\omega, а для цифрового — подстановкой z = \e^{j\omega}. Комплексные коэффициенты передачи H(j\omega) и H(\e^{j\omega}) аналогового и цифрового фильтров равны:

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

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

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

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

Связь ФЧХ и временно́й задержки гармонического сигнала. Фазовая задержка фильтра

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

Фазовый сдвиг и временна́я задержка
Рисунок 1. Фазовый сдвиг и временна́я задержка

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

equation 5
(5)
где задержка \tau_{\varphi} связана с фазовым поворотом \Phi(\omega_0) на частоте \omega_0 как:

equation 6
(6)
Тогда при прохождении сигнала через фильтр с ФЧХ \Phi(\omega), временна́я задержка гармонического сигнала \tau_{\varphi} на выходе будет зависеть от частоты и удовлетворять равенству:

equation 7
(7)
Параметр \tau_{\varphi}(\omega) носит название фазовой задержки фильтра и определяет задержку гармонического сигнала на выходе фильтра с ФЧХ \Phi(\omega).

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

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

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

equation 8
(8)
equation 9
(9)
Вычитая первое из второго получим:

equation 10
(10)
и приводя подобные:

equation 11
(11)
В предельном переходе при \Delta \omega \to 0 получаем производную ФЧХ по частоте, и задержка \tau характеризует групповое время запаздывания \tau_g(\omega) (групповую задержку):

equation 12
(12)
Смысл групповой задержки \tau_{g}(\omega) заключается в том, что на данную величину задерживается огибающая сигнала, которая, как правило, несёт полезную информацию. Само гармоническое колебание задерживается на величину фазовой задержки \tau_{\varphi}(\omega).

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

Рассмотрим АЧХ |H(\e^{jw})|, ФЧХ \Phi(\omega), фазовую задержку \tau_{\varphi}(\omega) и групповое время запаздывания \tau_{g}(\omega) цифрового эллиптического фильтра нижних частот 8 порядка c коэффициентами передаточной функции H(z):

equation 13
(13)
На рисунке 2 показаны графики АЧХ |H(\e^{jw})|, ФЧХ \Phi(\omega), фазовой задержки \tau_{\varphi}(\omega) и группового время запаздывания \tau_{g}(\omega) данного фильтра.

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

Пусть также дан N = 201 отсчёт гармонического сигнала на нормированной частоте \pi / 8:

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

Из характеристик фильтра, приведенных на рисунке 2 можно видеть, что фазовая задержка фильтра на частоте тестового сигнала \pi / 8 равна \tau_{\varphi}(\pi /  8) = 12.64 отсчётов, а групповая задержка \tau_{\varphi}(\pi /  8) = 22.75 отсчётов, что почти в два раза выше фазовой задержки.

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

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

Рассмотрим задержку гармонического сигнала на частоте \pi / 8, как это показано на рисунке 3в при увеличении масштаба по оси времени. Можно видеть, что гармоническое колебание задержано на величину фазовой задержки \tau_{\varphi}(\pi /  8) = 12.64 отсчётов. Это можно видеть как по максимумам колебания, так и по точкам пересечения нуля.

Рассмотрим теперь задержку треугольной огибающей на выходе фильтра, как это показано с увеличением масштаба на рисунке 3г. Можно видеть, что треугольная огибающая задержана на величину групповой задержки \tau_{g}(\pi /  8) = 22.75 отсчётов.

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

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

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

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

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

Комплексный коэффициент передачи H(\e^{j\omega}) цифрового БИХ-фильтра имеет вид:

equation 15
(15)
Преобразуем по формуле Эйлера:

equation 16
(16)
где

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

equation 18
(18)
Продолжим преобразование комплексного коэффициента передачи (16):
equation 19
(19)
Опустим в обозначениях зависимость от \omega для упрощения записи:

equation 20
(20)
equation 21
(21)
Тогда сокращенная запись H(\e^{j\omega}) имеет вид.

equation 22
(22)
и групповая задержка равна:

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

equation 24
(24)
Преобразуем и получим:
equation 25
(25)
Введем следующие обозначения:
equation 26
(26)
также учтем, что
equation 27
(27)
Тогда окончательно можно записать:

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

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

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

equation 29
(29)
Выражение (28) справедливо и для аналоговых фильтров, если мы сможем расписать H(j\omega) в виде:
equation 30
(30)
Перепишем (30) в следующем виде:

equation 31
(31)
где
equation 32
(32)
equation 33
(33)
Тогда окончательно для аналогового фильтра функции A(\omega), B(\omega), C(\omega) и D(\omega) равны:
equation 34
(34)
equation 35
(35)
equation 36
(36)
equation 37
(37)
Также для расчёта групповой задержки согласно (28) требуется вычислить производные:

equation 38
(38)
equation 39
(39)
equation 40
(40)
equation 41
(41)
Подставляя выражения A(\omega), B(\omega), C(\omega) и D(\omega) из уравнений (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.

Последнее изменение страницы: 20.01.2024 (19:23:34)
Страница создана Latex to HTML translator ver. 5.20.11.14