Преобразование частоты дискретизации / частоты среза в пи-радианы / выборку в системе БИХ-фильтра с дискретной временной выборкой - PullRequest
4 голосов
/ 15 января 2011

Я работаю над некоторыми цифровыми фильтрами, используя Python и Numpy / Scipy.

Я использую scipy.signal.iirdesign для генерации коэффициентов фильтра, но для этого требуются коэффициенты полосы пропускания фильтра в формате, с которым я не знаком

wp, ws : float

  Passband and stopband edge frequencies, normalized from 0 to 1 (1 corresponds 
      to pi radians / sample). 
  For example:
  Lowpass: wp = 0.2, ws = 0.3
  Highpass: wp = 0.3, ws = 0.2

( отсюда )

Я не знаком с цифровыми фильтрами (я работаю в области аппаратного дизайна). В аналоговом контексте я бы определил желаемый наклон и точку падения 3 дБ и из этого рассчитал значения компонентов.

В этом контексте, как мне взять известную частоту дискретизации, желаемую частоту углов и желаемый спад, и вычислить значения wp, ws из этого?

(Это может быть более подходящим для math.stackexchange. Я не уверен)

Ответы [ 2 ]

6 голосов
/ 15 января 2011

Если частота дискретизации равна fs, частота Найквиста равна fs / 2.Это самая высокая представимая частота, которую вы можете иметь без наложения псевдонимов.Это также эквивалентно нормализованному значению 1, указанному в документации.Поэтому, если вы проектируете фильтр нижних частот с угловой частотой fc, вы должны ввести его как fc / (fs / 2).

Например, у вас есть fs = 8000, поэтому fs / 2 =4000.Требуется фильтр низких частот с угловой частотой 3100 и частотой полосы останова 3300. Полученные значения будут wp = fc / (fs / 2) = 3100/4000.Частота полосы останова будет 3300 / 4000.

Имеет смысл?

2 голосов
/ 15 января 2011

Возьмите функцию x(t) = cos(2*pi*fa*t). Если мы производим выборку на частоте fs, то функция выборки будет x(n*ts) = x(n/fs) = cos(2*pi*n*fa/fs). Максимальная частота перед совмещением (свертыванием) - это частота Найквиста fa = fs / 2, которая нормализуется до (fs/2)/fs = 1/2. Нормализованная угловая частота составляет 2*pi*1/2 rad/sample = pi rad/sample. Таким образом сигнал x[n] = cos[pi*n] = [1,-1,1,-1,...].

Выборочная версия данной частоты, такой как угловая частота 2*pi*fc rad/s, будет 2*pi*fc/fs rad/sample. Как часть частоты Найквиста pi, это 2*fc/fs = fc/(fs/2).

Несколько формул, по которым можно жить:

exp[j*w*n] = cos[w*n] + j*sin[w*n]
x_even[n] = 0.5*x[n] + 0.5*x[-n]
cos[w*n] = 0.5*exp[j*w*n] + 0.5*exp[-j*w*n]    # cos is even
x_odd[n] = 0.5*x[n] - 0.5*x[-n]
j*sin[w*n] = 0.5*exp[j*w*n] - 0.5*exp[-j*w*n]  # sin is odd

ДПФ четного компонента (сумма косинусов) действительного сигнала будет действительным и симметричным, в то время как ДПФ нечетного компонента (сумма синусов) будет мнимым и антисимметричным. Таким образом, для реальных значений сигналов, таких как импульсная характеристика типичного фильтра, спектр амплитуд симметричен, а фазовый спектр антисимметричен. Таким образом, вам нужно только указать фильтр для диапазона от 0 до pi, который нормализуется до [0,1].

...