Почему мой фильтр в полосе затухания ослабляет другие частоты?

12

Вот мой код для двухтонного сигнала, где я использую полосу остановки для удаления более высокого тона, а затем нанёс график до (синим) и после (красным) в частотной области после свертывания моего сигнала с коэффициентами фильтра ,

Если вы поместите этот код в Matlab, вы ясно увидите, что более высокая частота была успешно удалена фильтром, но по какой-то причине амплитуда более низкой частоты была уменьшена вдвое, и чем больше я увеличиваю количество коэффициентов фильтра, чем больше это просто сглаживает всю мою кривую, почему это происходит? И как я могу предотвратить это, чтобы стоп-полоса не распространялась наружу? Вот изображение и код:

введите описание изображения здесь

fSampling = 8000;
tSampling = 1 / fSampling;

t = 0: t Отбор проб: 0,005;
F0 = 1000;
F1 = 3000;

xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t);
ht = fir1 (40, .25, «стоп»);
yt = conv (xt, ht);

fAxis = -4000: 125: 4000-125;

xF = fft (xt, 64);
MagXF = fftshift (abs (xF));

участок (fAxis, MagXF);
Оставайтесь на линии

yF = fft (yt, 64);
MagYF = fftshift (abs (yF));

участок (fAxis, MagYF, 'г')
Zaubertrank
источник
1
Полосная / полосовая фильтрация изначально несовершенна и всегда будет влиять на области спектра, которые вы хотели бы оставить в покое. Это природа зверя.
Даниэль Р Хикс
1
Хм ... есть ли способы противодействовать этому? Или другой относительно простой фильтр, который лучше подойдет? Я не знаю много о режекторных фильтрах, но я знаю, что это действительно узкополосные фильтры и что у Matlab есть команды для них.
Заубертранк
2
Как я уже сказал, это присуще. Разработка фильтра - это всегда компромисс с точки зрения оптимизации одних параметров за счет других (и за счет затрат).
Даниэль Р Хикс

Ответы:

12

Фильтры всегда имеют свой «спад» в своей частотной характеристике, потому что практически невозможно реализовать полосу пропускания, которая является идеальной прямоугольной функцией. Для фильтра нижних частот точка, в которой величина вашей частотной характеристики падает до -3 дБ, называется полосой пропускания, а все, что находится за ее пределами, называется полосой останова (технически все, что находится за пределами угловой частоты, но мы возьмем угловая частота должна быть на уровне -3 дБ). Как быстро ваша частотная характеристика ослабевает за пределами полосы пропускания, зависит от длины фильтра.

Если вы посмотрите на частотную характеристику вашего фильтра, htвы увидите, что он падает до -6 дБ при 1000 Гц:

введите описание изображения здесь

Таким образом, имеет смысл, что после фильтрации мощность падает на 6 дБ, что вы видите на своем рисунке как уменьшение амплитуды вдвое.

Если бы вы посмотрели документацию по fir1функции, которую использовали, вы бы тоже это поняли (выделено мое):

B = fir1(N,Wn)создает Nнизкочастотный КИХ-фильтр первого порядка и возвращает коэффициенты фильтра по N+1вектору длины B. Частота среза Wn должна быть между 0 < Wn < 1.0, что 1.0 соответствует половине частоты дискретизации. Фильтр Bнастоящий и имеет линейную фазу. Нормализованное усиление фильтра при Wn составляет -6 дБ.

Теперь, чтобы создать более четкие фильтры с ответами, которые довольно близки к прямоугольнику, вам придется использовать фильтры IIR, которые имеют свои собственные проблемы со стабильностью и т. Д., Но, безусловно, вариант. Вы можете увидеть мой ответ здесь для некоторых идей по реализации дискретного БИХ-фильтра 2-го порядка, который дает очень острые углы. Здесь приведен пример для полосового фильтра, но вы можете прочитать документы об используемых там функциях и самостоятельно реализовать низкочастотную версию.

Лорем Ипсум
источник
1

Фильтру требуется время, чтобы «решить», находится ли сигнал только внутри или за пределами перехода фильтра. Одно из решений состоит в том, чтобы просто отодвинуть переход фильтра от любого интересующего сигнала, например, на полпути между вашими двумя тестовыми сигналами, когда в вашем тестовом случае очень мало сигналов для искажения из-за несовершенного решения.

hotpaw2
источник
0

использование

ht = fir1(40,.5,'stop');

вместо этого у вас будет очень низкое затухание в F0 и очень высокое затухание в F1.

введите описание изображения здесь

Telaclavo
источник