Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задержка в КИХ фильтре
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
NikSave
Все добрый день.
Есть КИХ фильтр длинной N. Коэфф. расчитываю самостоятельно. Центральный отвод посередине.
Вопрос:
Как посчитать задержку вносимую фильтром при изменении положения центрального отвода при известной частоте дискретизации?
Для примера: длинв фильтра 65, частота дискретизации 100 МГц.
Заранее спасибо за ответы.
ViKo
А какие у вас есть предположения? rolleyes.gif
Если отвод посередине, то для чего нужна вторая половина фильтра? Или отвод - это не выход? Тогда что?
NikSave
Цитата(ViKo @ Sep 2 2015, 08:33) *
А какие у вас есть предположения? rolleyes.gif
Если отвод посередине, то для чего нужна вторая половина фильтра? Или отвод - это не выход? Тогда что?


Немного недопонял Вашего вопроса.
Например:
есть первый фильтр фильтр с какой либо характеристикой.
Есть второй фильтр с такой же характеристикой но сдвинутой по отводам фильтра влево или вправо.
Вопрос как изменилась задержка второго фильтра относительно первого?
TSerg
Странные вопросы.
Alex_vod
Как посчитать задержку вносимую фильтром
Реакция Ких фильтра 1-2 такта частоты дискретизации

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

Посмотреть реакцию Ких фильтра можно
подав на него синус нужной вам частоты и посмотрев на его реакцию, сравнив со входом

можно ещё поиграть в Matlab FDA Tool
там есть методы расчёта КИХ фильтров с минимальной фазой (minimum-phase filter), например Constrained Least Squares
но у этих фильтров характеристики похуже и требуют больших ресурсов для обработки, коэффициенты у них не симметричны
andyp
Цитата(Alex_vod @ Sep 2 2015, 09:40) *
при изменении положения центрального отвода
у вас измениться характеристики фильтра, полоса пропускания и т д, так делать нельзя.


Всегда хотел понять как умножение комплексного числа на exp(j*phi) изменяет его модуль.

Вообще сдвиг ИХ на отсчет вправо-влево соотвествует умножению комплексной передаточной характеристики (complex frequency response) на exp(j*w*Ts), соответственно, групповая задержка фильтра (которая - производная ФЧХ по частоте) изменяется на плюс-минус один отсчет.

Это все применимо к случаю, когда в несдвинутой ИХ справа слева есть по одному нулю хотя бы.
NikSave
Цитата(Alex_vod @ Sep 2 2015, 09:40) *
Как посчитать задержку вносимую фильтром
Реакция Ких фильтра 1-2 такта частоты дискретизации

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


Так делать можно. Два сигнала оцифровываются, пропускаются через фильтры с целью выравнивания фаз и подаются на цапы. Сейчас определение сдвига фаз осуществляется на глаз по осциллографу. Хотелось бы математически. Ну то есть я сдвинул характеристику фильтра на столько то- а это соответствует столько то наносекундам.
petrov
Цитата(NikSave @ Sep 2 2015, 10:17) *
Так делать можно. Два сигнала оцифровываются, пропускаются через фильтры с целью выравнивания фаз и подаются на цапы. Сейчас определение сдвига фаз осуществляется на глаз по осциллографу. Хотелось бы математически. Ну то есть я сдвинул характеристику фильтра на столько то- а это соответствует столько то наносекундам.


Непонятно при чём здесь фильтры, например чем вас не устраивает обычная задержка на несколько отсчётов в одной из ветвей?
NikSave
Цитата(petrov @ Sep 2 2015, 12:48) *
Непонятно при чём здесь фильтры, например чем вас не устраивает обычная задержка на несколько отсчётов в одной из ветвей?

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

Я так понимаю либо я вопрос сформулировал криво, либо ответить просто некому. Придется, видимо, разбираться самому.
Serg76
Цитата(NikSave @ Sep 2 2015, 17:37) *
задержка на один или несколько отсчетов это фиксированное время кратное периоду частоты дискретизации - слишком грубо. Перерасчет характеристики фильтра дает сколько угодно мелкую временную дискрету (совмещение с точностью до фазы).

Гуглите в сторону полифазной фильтрации
Evg
Цитата(NikSave @ Sep 2 2015, 17:37) *
задержка на один или несколько отсчетов это фиксированное время кратное периоду частоты дискретизации - слишком грубо. Перерасчет характеристики фильтра дает сколько угодно мелкую временную дискрету (совмещение с точностью до фазы).

Я так понимаю либо я вопрос сформулировал криво, либо ответить просто некому. Придется, видимо, разбираться самому.


Давайте мысленно заменим КИХ фильтр на аналоговый эквивалент, и будем обсуждать отклик цепочки ЦАП + аналоговый фильтр на единичный цифровой импульс. Тогда мы сможем описать задержку фильтра вещественным числом.

Если КИХ фильтр содержит n коэффициентов a_1, ... a_n, то отклик цепочки будет описываться функцией h(t) = sum{ a_i * sinc(t - i*Ts) } для i от 1 до n, где Ts -- период частоты дискретизации, а sinc(x) = sin(pi*x)/(pi*x).

Наглядный пример -- если взять КИХ фильтр с коэффициентами a_i = [0, 0, 0, 0.7, 0.7], то максимум функции отклика h(t) придется на t = 3.5*Ts (сплошная линия на рис. 1). Т.е., вполне корректно говорить про задержку, не кратную периоду частоты дискретизации.



Рис. 1. Отклик h(t) (сплошная линия) и отдельные слагаемые в сумме (штриховые линии).
petrov
NikSave

Плюс к полифазным фильтрам посмотрите ещё дробные задержки на структурах Farrow.
NikSave
Цитата(Evg @ Sep 2 2015, 22:44) *
Давайте мысленно заменим КИХ фильтр на аналоговый эквивалент, и будем обсуждать отклик цепочки ЦАП + аналоговый фильтр на единичный цифровой импульс. Тогда мы сможем описать задержку фильтра вещественным числом.

Если КИХ фильтр содержит n коэффициентов a_1, ... a_n, то отклик цепочки будет описываться функцией h(t) = sum{ a_i * sinc(t - i*Ts) } для i от 1 до n, где Ts -- период частоты дискретизации, а sinc(x) = sin(pi*x)/(pi*x).

Наглядный пример -- если взять КИХ фильтр с коэффициентами a_i = [0, 0, 0, 0.7, 0.7], то максимум функции отклика h(t) придется на t = 3.5*Ts (сплошная линия на рис. 1). Т.е., вполне корректно говорить про задержку, не кратную периоду частоты дискретизации.



Рис. 1. Отклик h(t) (сплошная линия) и отдельные слагаемые в сумме (штриховые линии).


Совершенно верно. Я имел ввиду задержка на бональных регистрах.

Может стоило поставить вопрос иначе: как задержать оцифрованный сигнал на произвольное время (сколько угодно малое)?
TSerg
>(сколько угодно малое)?

Полагаю, что в цифре - никак, либо вернуться в аналог.

Если на конечное, то уже говорили - передискретизация.
des00
Цитата(NikSave @ Sep 3 2015, 12:10) *
Может стоило поставить вопрос иначе: как задержать оцифрованный сигнал на произвольное время (сколько угодно малое)?

интерполяторы лагранжа, синк и т.д.
Evg
Цитата(des00 @ Sep 3 2015, 08:18) *
интерполяторы лагранжа, синк и т.д.


Полностью согласен.

Если интересует литература, к примеру, есть статья 1996 года "Splitting the unit delay [FIR/all pass filters design]". Более того, авторы статьи выложили набор матлабовских скриптов для расчета фильтров, реализующих дробную задержку.

Про структуры Фэрроу, ИМХО, хорошо написано в статье Гарднера из двух частей "Interpolation in digital modems". Хотя сейчас есть книги и т.п.
andyp
Для синтеза всепропускающих задерживающих фильтров с управляемой задержкой использовал метод взвешенных наименьших квадратов, как описано в прицепленных статьях. Другие статьи этого автора также представляют интерес
NikSave
Цитата(TSerg @ Sep 3 2015, 07:50) *
>(сколько угодно малое)?

Полагаю, что в цифре - никак, либо вернуться в аналог.

Если на конечное, то уже говорили - передискретизация.


Ну конечно не сколь угодно малое. Зависит от того каким выбрать шаг смещения характеристики.

Я уже писал что задержку обеспечиваю впольть до пикосукунд (все это уже работает), но это измерение глазом по осциллографу. Мне нужно подогнать теорию и расчитать получившуюся задержку на бумаге.
ViKo
Проще отмерить кусок коаксиального кабеля... sm.gif
TSerg
Цитата(ViKo @ Sep 3 2015, 11:16) *
Проще отмерить кусок коаксиального кабеля... sm.gif


Только hardcore - впаивать необходимое число вентилей с нужными задержками. bb-offtopic.gif
NikSave
Цитата(ViKo @ Sep 3 2015, 11:16) *
Проще отмерить кусок коаксиального кабеля... sm.gif


А если как раз и нужно компенсировать задержку в кабеле? Вставить еще один? А если кабель получается километр?
Serg76
Цитата(NikSave @ Sep 3 2015, 10:43) *
Ну конечно не сколь угодно малое. Зависит от того каким выбрать шаг смещения характеристики.

Я уже писал что задержку обеспечиваю впольть до пикосукунд (все это уже работает), но это измерение глазом по осциллографу. Мне нужно подогнать теорию и расчитать получившуюся задержку на бумаге.

Если уже есть посчитанный КИХ фильтр, пересчитайте его ИХ через Sinc на требуемые фазы (смещения)
NikSave
Цитата(Serg76 @ Sep 3 2015, 19:22) *
Если уже есть посчитанный КИХ фильтр, пересчитайте его ИХ через Sinc на требуемые фазы (смещения)


А по-подробней?
Например:
Есть фильтр с характеристикой: [5 -8 -3 12 2 -14 1 15 -8 -18 19 25 -28 -28 39 11 -83 21 225 1 -553 -288 1432 3284
3284 1432 -288 -553 1 225 21 -83 11 39 -28 -28 25 19 -18 -8 15 1 -14 2 12 -3 -8 5]

Я сдвинул ее и получил следующие коэфф.: [6 -7 -4 11 4 -14 -2 15 -5 -19 15 28 -23 -33 34 20 -79 -1 216 50 -512 -384 1218 3157
3390 1648 -176 -585 -53 230 45 -85 1 43 -23 -33 21 23 -16 -11 14 3 -14 -1 12 -1 -8 3].

Вопрос: на сколько я задержал сигнал если частота дискретизации 100 МГц?
Evg
Цитата(NikSave @ Sep 4 2015, 07:07) *
А по-подробней?
Например:
Есть фильтр с характеристикой: [5 -8 -3 12 2 -14 1 15 -8 -18 19 25 -28 -28 39 11 -83 21 225 1 -553 -288 1432 3284
3284 1432 -288 -553 1 225 21 -83 11 39 -28 -28 25 19 -18 -8 15 1 -14 2 12 -3 -8 5]

Я сдвинул ее и получил следующие коэфф.: [6 -7 -4 11 4 -14 -2 15 -5 -19 15 28 -23 -33 34 20 -79 -1 216 50 -512 -384 1218 3157
3390 1648 -176 -585 -53 230 45 -85 1 43 -23 -33 21 23 -16 -11 14 3 -14 -1 12 -1 -8 3].

Вопрос: на сколько я задержал сигнал если частота дискретизации 100 МГц?


На 1 нс.

Код
Ts = 10; % ns
a = [5 -8 -3 12 2 -14 1 15 -8 -18 19 25 -28 -28 39 11 -83 21 225 1 -553 -288 1432 3284 3284 1432 -288 -553 1 225 21 -83 11 39 -28 -28 25 19 -18 -8 15 1 -14 2 12 -3 -8 5];
b = [6 -7 -4 11 4 -14 -2 15 -5 -19 15 28 -23 -33 34 20 -79 -1 216 50 -512 -384 1218 3157 3390 1648 -176 -585 -53 230 45 -85 1 43 -23 -33 21 23 -16 -11 14 3 -14 -1 12 -1 -8 3];

angles = angle(fft(a).*conj(fft(b)));
tau = length(a) * Ts * angles(2) / (2*pi)


Результат:

Код
tau =

    0.9982
petrov
Цитата(NikSave @ Sep 4 2015, 07:07) *
Вопрос: на сколько я задержал сигнал если частота дискретизации 100 МГц?


Про полифазные фильтры почитайте, там ответ на ваш вопрос. Можно даже ничего не читать, а рассмотреть процесс интерполяции КИХ ФНЧ фильтром, добавляем нулей между исходными отсчётами, фильтруем, на выходе фильтра децимируем, выбирая нужную фазу, значение задержки очевидно. Теперь если внимательно рассмотреть процесс вычислений в фильтре, можно заметить, что на нули умножать нет смысла, фильтр может работать на исходной частоте в виде несмкольких параллельных веток, выбирая нужную ветку, выбираем задержку, эта структура полностью эквивалентна вычислению в лоб, значение задержки также очевидно.
NikSave
Цитата(Evg @ Sep 4 2015, 13:13) *
На 1 нс.

Код
Ts = 10; % ns
a = [5 -8 -3 12 2 -14 1 15 -8 -18 19 25 -28 -28 39 11 -83 21 225 1 -553 -288 1432 3284 3284 1432 -288 -553 1 225 21 -83 11 39 -28 -28 25 19 -18 -8 15 1 -14 2 12 -3 -8 5];
b = [6 -7 -4 11 4 -14 -2 15 -5 -19 15 28 -23 -33 34 20 -79 -1 216 50 -512 -384 1218 3157 3390 1648 -176 -585 -53 230 45 -85 1 43 -23 -33 21 23 -16 -11 14 3 -14 -1 12 -1 -8 3];

angles = angle(fft(a).*conj(fft(b)));
tau = length(a) * Ts * angles(2) / (2*pi)


Результат:

Код
tau =

    0.9982


Толком ничего не понял. Но все равно спасибо. Нужно сверить с измерением "на глаз".
Если не напрягает - пару слов в качестве комментария к формуле?
Evg
Цитата(NikSave @ Sep 4 2015, 15:28) *
Толком ничего не понял. Но все равно спасибо. Нужно сверить с измерением "на глаз".
Если не напрягает - пару слов в качестве комментария к формуле?

Идея такая. Задержка по времени приводит к появлению в ФЧХ сдвига фазы, линейно зависящего от частоты. Если мы знаем зависимость сдвига фазы от частоты, мы можем определить задержку по времени. Поэтому, вначале определяем разность фаз фурье-спектров импульсных характеристик фильтров a и b. Получая, таким образом, зависимость сдвига фаз от частоты. Потом по сдвигу фаз на одной из частот определяем задержку по времени.

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

Пардон, что не сделал описание сразу. Мне показалось, Вы знаете ответ. sm.gif
NikSave
Цитата(Evg @ Sep 4 2015, 18:14) *
Идея такая. Задержка по времени приводит к появлению в ФЧХ сдвига фазы, линейно зависящего от частоты. Если мы знаем зависимость сдвига фазы от частоты, мы можем определить задержку по времени. Поэтому, вначале определяем разность фаз фурье-спектров импульсных характеристик фильтров a и b. Получая, таким образом, зависимость сдвига фаз от частоты. Потом по сдвигу фаз на одной из частот определяем задержку по времени.

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

Пардон, что не сделал описание сразу. Мне показалось, Вы знаете ответ. sm.gif

Теперь понятно. Спасибо. Напоследок: а вообще эта задержка зависит от промежуточной частоты оцифрованного сигнала?
Например оцифровываю сигнал на промежуточной частоте 1 МГц или 10 МГц при одной и тойже частоте дискретизации?
Тему можно практически закрывать.
Evg
Цитата(NikSave @ Sep 5 2015, 10:11) *
Теперь понятно. Спасибо. Напоследок: а вообще эта задержка зависит от промежуточной частоты оцифрованного сигнала?
Например оцифровываю сигнал на промежуточной частоте 1 МГц или 10 МГц при одной и тойже частоте дискретизации?
Тему можно практически закрывать.

Насколько я понимаю, разброс значений задержки в полосе пропускания составляет от значения 1 нс. Возможно, была использована плохая оконная функция. Наверное, не помешает дополнить нулями ИХ фильтров при расчете преобразования Фурье (я этого не делал). Если интересно, скрипт для матлаба (нужно переименовать в .m) + картинка с задержкой прилагается.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
NikSave
Цитата(Evg @ Sep 5 2015, 12:08) *
Насколько я понимаю, разброс значений задержки в полосе пропускания составляет от значения 1 нс. Возможно, была использована плохая оконная функция. Наверное, не помешает дополнить нулями ИХ фильтров при расчете преобразования Фурье (я этого не делал). Если интересно, скрипт для матлаба (нужно переименовать в .m) + картинка с задержкой прилагается.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Спасибо.
Evg
Цитата(NikSave @ Sep 5 2015, 17:22) *
Спасибо.


Пожалуйста. В принципе, метод известный — оценка времени задержки по компоненте фурье-спектра широко используется в алгоритмах символьной синхронизации для модемов с пакетной передачей данных (burst modems).

Другое дело, что есть масса способов устраивать задержку контролируемым образом в режиме реального времени. Например, как сказал petrov, с помощью полифазных фильтров.
Krys
Цитата(petrov @ Sep 4 2015, 17:18) *
Можно даже ничего не читать, а рассмотреть процесс интерполяции КИХ ФНЧ фильтром, добавляем нулей между исходными отсчётами, фильтруем, на выходе фильтра децимируем, выбирая нужную фазу, значение задержки очевидно
А это не является вытягиванием себя за волосы? Я не уверен, но навскидку мне показалось, что выбор фазы при децимации даст ту же задержку, что и просто линия задержки на нужное число тактов сигнала до децимации. Ведь линия задержки проще и понятнее.
petrov
Цитата(Krys @ Sep 6 2015, 08:54) *
А это не является вытягиванием себя за волосы? Я не уверен, но навскидку мне показалось, что выбор фазы при децимации даст ту же задержку, что и просто линия задержки на нужное число тактов сигнала до децимации. Ведь линия задержки проще и понятнее.


Вроде бы достаточно очевидно, что после интерполяции появляются промежуточные отсчёты сигнала между исходными отсчётами, которые мы можем выбрать, без интерполяции такой возможности нет.
Krys
Нам же необходима была задержка. Мы её можем получить, выбрав другую фазу (например, 3-ю от начала). А можем просто на 3 такта задержать сигнал по высокой частоте, до децимации. Разве задержка не будет эквивалентной?
Вы говорите "очевидно". Мне почему-то нет )) Вы могли бы чуть больше объяснить? Как работает полифазный фильтр - представляю, реализовывал в ПЛИС.
petrov
Цитата(Krys @ Sep 7 2015, 05:07) *
Нам же необходима была задержка. Мы её можем получить, выбрав другую фазу (например, 3-ю от начала). А можем просто на 3 такта задержать сигнал по высокой частоте, до децимации. Разве задержка не будет эквивалентной?
Вы говорите "очевидно". Мне почему-то нет )) Вы могли бы чуть больше объяснить? Как работает полифазный фильтр - представляю, реализовывал в ПЛИС.


По условию задачи требуется лишь задержка , это была всего лишь иллюстрация, что задержку вычислять не нужно, она тривиально задаётся фазой децимации, соответсвует одной ветке полифазной декомпозиции.
Krys
Ну хоть просто для моего просвещения подскажите, пожалуйста, эквивалентны будут эти задержки, которые я описал в предыдущем сообщении?
serjj
Цитата
В принципе, метод известный — оценка времени задержки по компоненте фурье-спектра широко используется в алгоритмах символьной синхронизации для модемов с пакетной передачей данных (burst modems).

Есть ли у вас какая нибудь статья по этой теме? Спасибо.
Serg76
Цитата(serjj @ Sep 7 2015, 09:05) *
Есть ли у вас какая нибудь статья по этой теме? Спасибо.

+1, мне тоже стало интересно))), у меня это реализовано по-другому: вычисляю ВКФ между эталонной и принятой последовательностью с дальнейшей интерполяцией по трем точкам
Evg
Цитата(Serg76 @ Sep 7 2015, 09:23) *
+1, мне тоже стало интересно))), у меня это реализовано по-другому: вычисляю ВКФ между эталонной и принятой последовательностью с дальнейшей интерполяцией по трем точкам


Например,

Нажмите для просмотра прикрепленного файла
serjj
Прикольно. Немного смущают требования - восстановленная несущая + ограничение на многолучёвость, т.е. в реальности метод будет работать только после carrier recovery и эквалайзера. И ещё в схеме
Нажмите для просмотра прикрепленного файла
я бы делал оценку смещения по времени после оценки смещения по фазе, повернув выход коррелятора, чтобы привести к случаю когда фаза = 0. То, что они работают по одной квадратуре при смещении в 45 градусов даёт в шумах дополнительную ошибку эстиматора (половина энергии не используется), что и видно из графика (просаживается относительно CRB).
Evg
Цитата(serjj @ Sep 8 2015, 10:56) *
я бы делал оценку смещения по времени после оценки смещения по фазе, повернув выход коррелятора, чтобы привести к случаю когда фаза = 0. То, что они работают по одной квадратуре при смещении в 45 градусов даёт в шумах дополнительную ошибку эстиматора (половина энергии не используется), что и видно из графика (просаживается относительно CRB).


Напишите об этом статью. biggrin.gif

Кроме шуток, я как-то видел статью китайцев про модификацию модифицированного детектора Гарднера ошибки символьной синхронизации. Вклад китайцев заключался в том, что если фаза несущей не произвольная, а болтается около нуля (т.е., уже сделана синхронизация с фазой несущей), то -- СЮРПРИЗ, СЮРПРИЗ -- можно упростить принятие решений о том, совпадают ли значения пары последовательных символов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.