Если взять КИХ фильтр нижних частот и пропустить через него синусоиду с частотой, большей, чем
частота заграждения, то в некоторых случаях отклик фильтра будет уже не синусоидой. У меня ФНЧ отсекает частоты
выше 15 кГц при частоте дискретизации 256 кГц. Если взять синусоиду с частотой 125 кГц (меньше частоты Найквиста)
и посмотреть на отклик, то он похож на амплитудно-модулированную синусоиду, а в графике спектра появляются
ненулевые нижние частоты. Если же два раза применить такой фильтр к синусоиде 15 кГц(то есть на краю полосы пропускания) , то результат будет такой же. Такое впечатление, что при малом уровне сигнала КИХ фильтр значительно искажает синусоиду, хотя, в идеале, не должен. Ничего подобного не наблюдается, если частота синусоиды берется из полосы пропускания. Думаю, что это происходит из-за погрешности машинных вычислений. Есть ли какие-то другие объяснения этому явлению?
искажение синусоиды ких фильтром вне полосы пропускания
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: искажение синусоиды ких фильтром вне полосы пропускания
КИХ фильтр не может делать этого в принципе потому что он линейный.
При очень грубой целочисленной арифметике с округлениями такой эффект теоретически возможен, но в любом случае надо проводить анализ.
Покажите плиз картинки и приведите параметры фильтра.
При очень грубой целочисленной арифметике с округлениями такой эффект теоретически возможен, но в любом случае надо проводить анализ.
Покажите плиз картинки и приведите параметры фильтра.
Re: искажение синусоиды ких фильтром вне полосы пропускания
Во вложении файл fir_lp15kHz.csv с коэффициентами КИХ фильтра и картинки -
АЧХ(децибелы от максимума) в общем и крупно около полосы пропускания, s1- реакция фильтра на сигнал
s = sin(2*pi*125000*t), частота дискретизации 256kHz. На одном из рисунков показан фрагмент
s1 (укрупненно, чтобы были видны особенности), на другом - периодограмма s1 с неожиданным
возмущением в нижней части спектра. Все выполнено в Питоне.
АЧХ(децибелы от максимума) в общем и крупно около полосы пропускания, s1- реакция фильтра на сигнал
s = sin(2*pi*125000*t), частота дискретизации 256kHz. На одном из рисунков показан фрагмент
s1 (укрупненно, чтобы были видны особенности), на другом - периодограмма s1 с неожиданным
возмущением в нижней части спектра. Все выполнено в Питоне.
- Вложения
-
- exampleForDSPlib.zip
- (223.13 КБ) 200 скачиваний
Re: искажение синусоиды ких фильтром вне полосы пропускания
После того, как написал, понял, что непохожесть s1 на синусоиду объясняется тем, что s = sin(2*pi*125000*t)
и должен так выглядеть при частоте дискретизации 256 kГц из-за малого отношения частот 256/125. Но почему тогда сигнал s2, полученный применением фильтра к s1 (т.е. фильтр два раза применили к s), выглядит уже совсем не так? И спектр плохой.
Обновил вложение, чтобы вставить картинки для s2 (сигнал и спектр). Предыдущее вложение можно не смотреть.
и должен так выглядеть при частоте дискретизации 256 kГц из-за малого отношения частот 256/125. Но почему тогда сигнал s2, полученный применением фильтра к s1 (т.е. фильтр два раза применили к s), выглядит уже совсем не так? И спектр плохой.
Обновил вложение, чтобы вставить картинки для s2 (сигнал и спектр). Предыдущее вложение можно не смотреть.
- Вложения
-
- ExamlesForDSPlib.zip
- (286.31 КБ) 247 скачиваний
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: искажение синусоиды ких фильтром вне полосы пропускания
Посмотрел в октаве. Воспроизвелось практически все, кроме s2.
Если беру исходный сигнал без окна, то по выходу фильтра получается переходной процесс:
но после переходного процесса как раз получается что ожидается
Смотрю спектральную плотность мощности (Welch method) для сигнала s1 и s2 c прямоугольным окном получаем:
Чтобы убрать переходной процесс надо на исходный s1 наложить окно (я например накладывал окно Тьюки) и получим:
s1 = sin(2*pi*125000*t).*tukeywin(N, 0.05)';
тогда после фильтрации s2 идет без переходного процесса:
и спектральную плотность мощности тоже вполне нормальная
Почему ваша s2 так странно выглядит я сказать не могу.
Если хотите, то можете показать ваш код на питоне, попробую посмотреть.
Теперь по существу вопроса:
НЧ мусор на спектре возникает ввиду шумов представления числа на уровне -300дБ (это уже практически граница динамического диапазона формата double). Поскольку фильтр получился аж 800 порядка с подавлением 150 дБ, то этот шум виден на спектре. Но в сигнале его должно быть не видно, потому что он на 100 дБ ниже
Если беру исходный сигнал без окна, то по выходу фильтра получается переходной процесс:
но после переходного процесса как раз получается что ожидается
Смотрю спектральную плотность мощности (Welch method) для сигнала s1 и s2 c прямоугольным окном получаем:
Чтобы убрать переходной процесс надо на исходный s1 наложить окно (я например накладывал окно Тьюки) и получим:
s1 = sin(2*pi*125000*t).*tukeywin(N, 0.05)';
тогда после фильтрации s2 идет без переходного процесса:
и спектральную плотность мощности тоже вполне нормальная
Почему ваша s2 так странно выглядит я сказать не могу.
Если хотите, то можете показать ваш код на питоне, попробую посмотреть.
Теперь по существу вопроса:
НЧ мусор на спектре возникает ввиду шумов представления числа на уровне -300дБ (это уже практически граница динамического диапазона формата double). Поскольку фильтр получился аж 800 порядка с подавлением 150 дБ, то этот шум виден на спектре. Но в сигнале его должно быть не видно, потому что он на 100 дБ ниже
Re: искажение синусоиды ких фильтром вне полосы пропускания
Огромное спасибо за такой детальный ответ! У меня вопрос по терминологии: правильно ли я понял, что переходной процесс - это первые Lf отсчетов выходного сигнала, где Lf -длина фильтра? То есть, та часть отклика фильтра, где суммирование в свертке отчасти по сигналу, а отчасти по нулям? Кроме того, судя по Вашей формуле для s1, для Вас s1 - это исходный сигнал, a s2=F(s1). A у меня, может, я не очень четко это объяснил, есть сигнал s = sin(2*pi*125000*t), далее s1=F(s), и s2 = F(s1) =F(F(s)), т.е. s2 - результат двукратного применения фильтра к синусоиде, так сказать, каскад из двух одинаковых фильтров. Может, мы поэтому не сходимся по s2? Я вместо применения окна просто отрезаю от выходного сигнала куски, равные длине фильтра (от начала и от конца) и думаю, что таким образом избавляюсь от переходных процессов. Интересно было бы узнать Ваше мнение, насколько это правильно/неправильно.
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: искажение синусоиды ких фильтром вне полосы пропускания
А ну тогда все сходится. Два раза отфильтровав вы полностью подавляете сигнал на 300 дБ. В результате остаётся остаётся только шум представления в полосе пропускания фильтра. Не удивительно что он такой некрасивый.
Устанять переходной процесс отбрасыванием можно. Только делать это приходится каждый раз укорачивая выход относительно входа.
Устанять переходной процесс отбрасыванием можно. Только делать это приходится каждый раз укорачивая выход относительно входа.
Re: искажение синусоиды ких фильтром вне полосы пропускания
Все ясно, благодарю.