|
После децимации фильтр - не фильтр, Децимация на 2. Хрень какая-то! |
|
|
|
Nov 27 2011, 12:19
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-02-05
Пользователь №: 2 399

|
Цифрую сигнал на Fs=44кГц, после пропускаю через небольшой КИХ и на ЦАП Смотрю АЧХ, все более менее, начиная с 11кГц (Fs/4) затухание в пределах 30дБ.
Теперь просто выкидываю каждый второй отсчет и получается совсем другой результат. Fs теперь равно 22кГц. Частоты в районе 12-20кГц (теперь они отражены и на выходе они 10-2кГц соответственно) имеют амплитуду всего лишь на 8-10дБ меньше от исходных. Получается, что фильтр теперь не работает как надо! Но без децимации-то фильтр работает.
В общем не понимаю, подскажите, что не так-то?
|
|
|
|
|
Nov 27 2011, 13:03
|
Участник

Группа: Участник
Сообщений: 74
Регистрация: 29-10-09
Из: Воронеж
Пользователь №: 53 299

|
Если выводите на ЦАП с частотой 22 кГц, то должен быть после ЦАП аналоговый реконструирующий ФНЧ с частотой задерживания выше Fc/2, т. е. выше 11 кГц должно быть приемлемое для вас затухание, иначе будут возникать отражения спектра.
Сообщение отредактировал HFSSLer - Nov 27 2011, 13:12
|
|
|
|
|
Nov 27 2011, 16:42
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-02-05
Пользователь №: 2 399

|
Цитата(HFSSLer @ Nov 27 2011, 16:03)  Если выводите на ЦАП с частотой 22 кГц, то должен быть после ЦАП аналоговый реконструирующий ФНЧ с частотой задерживания выше Fc/2, т. е. выше 11 кГц должно быть приемлемое для вас затухание, иначе будут возникать отражения спектра. Я тоже так подумал поначалу, и поставил в качестве цап аудиокодек CS42L51 у которого все это хозяйство уже внутри есть (он делает оверсемплинг на 128Fs и последующую фильтрацию), результат тот же.
|
|
|
|
|
Nov 27 2011, 18:12
|
Участник

Группа: Участник
Сообщений: 74
Регистрация: 29-10-09
Из: Воронеж
Пользователь №: 53 299

|
Может действительно из какой-нибудь верхней зоны Найквиста перекочевали? Чудес в этом деле не бывает.
|
|
|
|
|
Nov 28 2011, 07:50
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-02-05
Пользователь №: 2 399

|
Цитата(V_G @ Nov 27 2011, 20:44)  Вообще-то до децимации, а не после ЦАП, должен быть хороший, а не "небольшой" фильтр, давящий частоты выше 11 кГц. Вопрос не в том "хороший" или "небольшой" фильтр, а в том что его измеренная ачх после децимации другая.
|
|
|
|
|
Nov 28 2011, 09:20
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(avmsystem @ Nov 28 2011, 10:50)  Вопрос не в том "хороший" или "небольшой" фильтр, а в том что его измеренная ачх после децимации другая. Скорее всего, у Вас где-то ошибка. Возможно, что-то у Вас ломается при добавлении децимации. Информации мало. Что за фильтр? Как измеряете АЧХ? Аппаратная платформа (DSP/FPGA)? Ну и т.д.
|
|
|
|
|
Nov 28 2011, 11:09
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-02-05
Пользователь №: 2 399

|
Цитата(Самурай @ Nov 28 2011, 13:20)  Скорее всего, у Вас где-то ошибка. Возможно, что-то у Вас ломается при добавлении децимации. Информации мало. Что за фильтр? Как измеряете АЧХ? Аппаратная платформа (DSP/FPGA)? Ну и т.д. Фильтр делаю на STM32 (arm), ацп его внутренний, цап внешний cs42l51. АЧХ снимаю обычным способом на входе генератор, на выходе миливольтметр и осциллограф. Фильтр обрабатывает данные пачками по 100 отсчетов. Вот его реализация: Код #define lentg 10 void filtr(void) { const int16_t FIRCoef[lentg] = { -1380,-298,5444,15153,22974,22974,15153,5444,-298,-1380}; static int16_t x[lentg]; int32_t y=0; uint16_t n; for(int i=0; i<100; i++)//обсчет сразу 100 сэмплов { for(n=lentg-1; n>0; n--) x[n] = x[n-1];
x[0] = ADC_array[i]; y=0; for(n=0; n<(lentg/2); n++) y += FIRCoef[n] * (x[n]+x[(lentg-1)-n]); DAC_array[i]=(int16_t)(y>>13); } } Графики с децимацией и без:
|
|
|
|
|
Nov 29 2011, 04:17
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-02-05
Пользователь №: 2 399

|
Цитата(Alex11 @ Nov 28 2011, 23:41)  Что-то у Вас не так в системе. Какая амплитуда сигнала после АЦП? Если полные 16 бит - то у Вас переполнение в фильтре на выходе. Должет быть сдвиг на 16, а не на 13. Кроме того, спектр сигнала даже до децимации отличается от теоретического. Ваш фильтр на модели дает другую характеристику:
ацп (и соотв-но отсчеты на входе фильтра) 12 разрядный, а сдвиг на 13 после фильтра - это я его к 16 разрядам привожу для цап. Переполнения нет, синус в норме, проверено. Спектр похож, еслу уж говорить более подробно, то без децимации система у меня работает на 46кгц с копейками. А когда используется децимация то на около 43кгц и соответственно 21,5кгц на выходе. Просто у STM32 такой не очень удобный делитель для I2S стоит, по другому сделать пока не получается. Поэтому и спектр немного другой, но это ничего не меняет, просто горбы немного по частотной оси смещаются, а суть-то остается прежняя. Цитата(V_G @ Nov 28 2011, 15:01)  Почему "где-то", если элементарно не соблюдаются условия теоремы Котельникова? Я не совсем понимаю причем здесь теорема Котельникова, про наложение спектров все в курсе. Но я не помню, чтобы в теореме говорилось про минимально допустимое затухание. Меня устроит алиазинг с ослаблением более 30дБ, поэтому и фильтр такой, но после децимации он не дает то что требуется, вот в чем вопрос. Может быть Вы помните из теоремы что-то более глубокое? Поясните пожалуйста свою мысль.
|
|
|
|
|
Nov 29 2011, 12:19
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(avmsystem @ Nov 29 2011, 07:17)  Спектр похож, еслу уж говорить более подробно, то без децимации система у меня работает на 46кгц с копейками. А когда используется децимация то на около 43кгц и соответственно 21,5кгц на выходе.
Просто у STM32 такой не очень удобный делитель для I2S стоит, по другому сделать пока не получается.
Поэтому и спектр немного другой, но это ничего не меняет, просто горбы немного по частотной оси смещаются, а суть-то остается прежняя. Первый момент: если все сделано корректно, то таких эффектов, как у Вас на графике АЧХ, не должно быть в принципе. Момент второй: на мой взгляд, вот эти две Ваши фразы очень слабо между собой согласуются: Цитата(avmsystem @ Nov 27 2011, 15:19) Теперь просто выкидываю каждый второй отсчет и получается совсем другой результат. Fs теперь равно 22кГц. и Цитата(avmsystem @ Nov 29 2011, 07:17)  А когда используется децимация то на около 43кгц и соответственно 21,5кгц на выходе. Так на какой же все-таки частоте у Вас работает ЦАП, когда Вы используете децимацию? Момент третий: А выполняются ли у Вас правильные соотношения между частотами всех сигналов I2S ЦАПа? Какова частота MCLK, LRCK и SCLK сигналов? В каком режиме работает ЦАП, Slave Mode или Master Mode? Не может быть так, что Ваш эффект вызван тем, что у ЦАП просто срывает крышу? И еще, Вы смотрели осциллографом, что творится на выходе ЦАПа? И действительно ли когда Вы подаете на вход синус, к примеру 15кГц, он у Вас заворачивается на выходе ЦАП в 7кГц? А вообще, если есть такая возможность, то лучше конечно скидывать данные на комп и уже там анализировать АЧХ.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|