La conversión de samplerate frecuencia / de corte para pi radianes / muestra en un muestreada sistema de filtro IIR de tiempo discreto

StackOverflow https://stackoverflow.com/questions/4697235

Pregunta

Estoy trabajando en hacer algún trabajo de filtro digital usando Python y Numpy / Scipy.

Estoy usando scipy.signal.iirdesign para generar mis coefficents filtro, pero requiere el filtro de paso de banda coefficents en un formato que no estoy familiarizado con

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

( de aquí )

No estoy familiarizado con los filtros digitales (vengo de un fondo de diseño de hardware). En un contexto análogo, Me gustaría determinar la pendiente deseada y el 3 dB hacia abajo punto, y calcular valores de los componentes de eso.

En este contexto, ¿cómo me tomo una velocidad conocida de la muestra, una frecuencia de corte deseada, y una atenuación deseada, y calcular los valores wp, ws de eso?

(Esto podría ser más apropiado para math.stackexchange. No estoy seguro)

¿Fue útil?

Solución

Si su frecuencia de muestreo fs es, la tasa de Nyquist es fs / 2. Esto representa la frecuencia representable más alto que puede tener sin aliasing. También es equivalente al valor normalizado de 1 se refiere la documentación. Por lo tanto, si está diseñando un filtro de paso bajo con una frecuencia de corte fc, debería ingresar como FC / (fs / 2).

Por ejemplo, usted tiene fs = 8000 así fs / 2 = 4000. ¿Quieres un filtro de paso bajo con una frecuencia de corte de 3100 y una frecuencia de banda de detención del 3300. Los valores resultantes serían wp = fc / (fs / 2) = 3100/4000. La frecuencia de la banda de parada sería 3300/4000.

sentido?

Otros consejos

Tome la x(t) = cos(2*pi*fa*t) función. Si estamos en el muestreo de frecuencia fs, la función muestreada es x(n*ts) = x(n/fs) = cos(2*pi*n*fa/fs). La frecuencia máxima antes de aliasing (plegable) es la frecuencia de Nyquist fa = fs / 2, que normaliza a (fs/2)/fs = 1/2. La frecuencia angular normalizada es 2*pi*1/2 rad/sample = pi rad/sample. Así, el x[n] = cos[pi*n] = [1,-1,1,-1,...] señal.

La versión muestreada de una frecuencia dada, tal como 2*pi*fc rad/s frecuencia de corte sería 2*pi*fc/fs rad/sample. Como una fracción de la frecuencia de Nyquist pi, eso es 2*fc/fs = fc/(fs/2).

Algunas fórmulas para vivir por:

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

La DFT del componente incluso (una suma de cosenos) de una señal de valor real será real y simétrica, mientras que la DFT del componente extraño (una suma de los senos) será imaginario y anti-simétrica. Por lo tanto para las señales de valor real, tales como la respuesta al impulso de un filtro típico, el espectro de magnitud es simétrica, mientras que el espectro de fase es antisimétrica. Por lo tanto es suficiente con especificar un filtro para el rango de 0 a pi, que se normalizó a [0,1].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top