Как мне реализовать полосовой фильтр, заданный этим уравнением? - PullRequest
4 голосов
/ 01 декабря 2011

Я бездельничаю с некоторыми звуковыми вещами и алгоритмом, который я пытаюсь реализовать, вызовами для полосового КИХ-фильтра второго порядка, заданного уравнениемполосовой фильтр в C?

У меня есть необработанные аудиоданные, а также FFT для этих аудиоданных, доступных для меня, но я все еще не уверен, как реализовать этот фильтр, и при этом я точно не знаюозначает уравнение.

На изображении ниже я пытаюсь реализовать HF3:

Band Pass Filter

Ответы [ 2 ]

7 голосов
/ 01 декабря 2011

z^-1 - это задержка на единицу (одна выборка), z - это одна выборка в будущее.Таким образом, ваш выход фильтра на выборке i зависит от входных выборок на i-1 и i+1.(В общем, вы можете думать, что z^-n - это задержка n выборок.)

Если у вас есть выборки во временной области во входном буфере x[], и вы хотите отфильтровать эти выборки в выходной буфер y[], тогда вы бы реализовали данную передаточную функцию следующим образом:

y[i] = x[i+1] - x[i-1]

Например, в C вы можете обработать буфер из N сэмплов следующим образом:

for (i = 1; i < N - 1; ++i)
{
    y[i] = x[i + 1] - x[i - 1];
}

Это оченьпростой нерекурсивный фильтр верхних частот первого порядка - он имеет нули в +1 и -1, поэтому отклик величины равен нулю в DC (0) и в Найквисте (Fs / 2), и он достигает максимума в Fs / 4. Такэто очень широкий полосовой фильтр.

1 голос
/ 01 декабря 2011

КИХ-фильтр умножается на коэффициенты и накапливает группу смежных выборок входных данных для каждой выборки выходных данных.Количество коэффициентов будет таким же, как количество членов z в нужном размере вашего преобразования Z.

Обратите внимание, что для полосового КИХ-фильтра обычно требуется намного больше членов или коэффициентов, примерно пропорциональных крутизнежелательные полосовые переходы, так что 2 отвода, вероятно, слишком короткие для любой полезной полосовой фильтрации.

...