Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Децимация с произвольной финальной частотой
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
syoma
Привет, подскажите, как правильно сделать децимацию.
Есть исходный сигнал, который семплируется АЦП с частотой дискретизации 96кГц. Этот сигнал проходит через ПЛИС и подается на вход DSP. Проблема в том, что DSP работает с другой частотой и эта частота может меняться во время работы и может быть любой в диапазоне от 36 до 48кГц. Если тупо ставить антиалиасинговый фильтр на 18кГц, появляется проблема с тем, какой отсчет подавать на DSP - если просто последний, то я чувствую, что это неправильно.

Подскажите пожалуйста, как разруливаются такие ситуации?


Вот нашел похожую App Note https://www.xilinx.com/support/documentatio...tes/xapp936.pdf
Это правильный подход?
V_G
Непонятна постановка задачи. Если сигнал уже оцифрован и хранится в какой-то буферной памяти, то какая разница, с какой скоростью он будет обрабатываться дальше? Тут лишь вопрос, успеет ли проц справиться с потоком данных.
Или имеется в виду его дальнейшее восстановление после обработки (ЦАП)? Тогда заполняйте отсчетами вторую буферную память и считывайте ее в ЦАП со стабильной частотой...
adnega
Цитата(syoma @ Apr 5 2017, 11:34) *
Подскажите пожалуйста, как разруливаются такие ситуации?

У самого похожая или более худшая ситуация. Чем-то жертвовать придется, и с этим нужно смириться.
Выкидывать отсчеты из потока категорически запрещено, т.к. по амплитуде изменения практически незаметны,
но на слух ощущаются приличные щелчки. Решил, что фазу сигнала нужно сохранять всеми средствами,
а амплитудные искажения допустимы и неизбежны.
В принципе, если выдавать последний отсчет, то небольшое смещение по фазе будет,
но т.к. частота выдачи ПЛИС больше, чем частота приема DSP, то это смещение будет маленькое.
Но если попробовать разбить интервал между отсчетами АЦП на несколько подинтервалов и для каждого высчитать
свое интерполированное значение, тем самым повысив скорость выдачи ПЛИС, то скачок фазы можно сделать минимальным.
syoma
Цитата(V_G @ Apr 5 2017, 15:11) *
Непонятна постановка задачи. Если сигнал уже оцифрован и хранится в какой-то буферной памяти, то какая разница, с какой скоростью он будет обрабатываться дальше?

В том-то и дело, что сигнал оцифровывается с определенной частотой и должен с минимальной задержкой поступить в DSP для дальнейшей обработки. Это система реального времени, поэтому никакая буферизация не приветствуется.

Цитата
Но если попробовать разбить интервал между отсчетами АЦП на несколько подинтервалов и для каждого высчитать
свое интерполированное значение, тем самым повысив скорость выдачи ПЛИС, то скачок фазы можно сделать минимальным.

У меня требование - минимальная задержка. При интерполяцию я тоже думаю, но ее надо хитрым образом считать.
adnega
Цитата(syoma @ Apr 5 2017, 17:08) *
У меня требование - минимальная задержка. При интерполяцию я тоже думаю, но ее надо хитрым образом считать.

Будет задержка от 1 до 2 тактов.
Интерполяция: оконный sinc - правильнее всего, но если задержка минимальная, то как быть с окном - не понятно.
При вашем соотношении частот и требованиях к задержке, видимо, последний отсчет лучше всего.
andyp
Цитата(syoma @ Apr 5 2017, 11:34) *
Привет, подскажите, как правильно сделать децимацию.
Есть исходный сигнал, который семплируется АЦП с частотой дискретизации 96кГц. Этот сигнал проходит через ПЛИС и подается на вход DSP. Проблема в том, что DSP работает с другой частотой и эта частота может меняться во время работы и может быть любой в диапазоне от 36 до 48кГц. Если тупо ставить антиалиасинговый фильтр на 18кГц, появляется проблема с тем, какой отсчет подавать на DSP - если просто последний, то я чувствую, что это неправильно.

Подскажите пожалуйста, как разруливаются такие ситуации?


На мой взгляд правильно это внутри DSP сделать. Ем унужна меняющаяся частота - ему и карты в руки. Тем более что сама частота дискретизации низкая

Цитата
Вот нашел похожую App Note https://www.xilinx.com/support/documentatio...tes/xapp936.pdf
Это правильный подход?


Не очень. Вам бы что-то про Farrow structure почитать, особенно если частота может быть любой
bve
В закромах есть книга:Гольденберг Л.М., Матюшкин Б.Д., Поляк М.Н. - Цифровая обработка сигналов 1985.djvu
Посмотрите главу 7.4
syoma
Цитата(andyp @ Apr 5 2017, 21:29) *
Не очень. Вам бы что-то про Farrow structure почитать, особенно если частота может быть любой

Читал про Farrow Structure. В Matlab в DSP Toolbox есть хорошее описание и блоки. Но проблема не столько в том, чтобы получить дробное соотношение частот дискретизации - на что и настроен Farrow, сколько в возможности изменения этого соотношения "на лету", что в Farrow structure, я так понимаю, не предусмотрено.
andyp
Цитата(syoma @ Apr 6 2017, 10:40) *
Читал про Farrow Structure. В Matlab в DSP Toolbox есть хорошее описание и блоки. Но проблема не столько в том, чтобы получить дробное соотношение частот дискретизации - на что и настроен Farrow, сколько в возможности изменения этого соотношения "на лету", что в Farrow structure, я так понимаю, не предусмотрено.


Farrow structure вообще-то позволяет получать отсчеты любым и меняющимся сдвигом относительно исходной последовательности.
https://www.dsprelated.com/freebooks/pasp/F..._Structure.html

Они как раз используются там, где полифазная интерполяция не прокатывает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.