La conversion de fréquence d'échantillonnage / blocage à pi radians / échantillon dans un temps discret du système de filtre IIR échantillonné

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

Question

Je travaille à faire un travail de filtre numérique en utilisant Python et Numpy / Scipy.

J'utilise scipy.signal.iirdesign pour générer mes coefficents de filtre, mais il faut le filtre passe-bande coefficents dans un format que je ne suis pas familier avec

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

( d'ici )

Je ne suis pas familier avec les filtres numériques (je viens d'un arrière-plan de la conception matérielle). Dans un contexte analogue, je déterminer la pente désirée et la 3db bas point et calculer les valeurs des composants de ce.

Dans ce contexte, comment puis-je prendre un taux échantillon connu, une fréquence d'angle désiré, et un rolloff désiré, et calcule les valeurs wp, ws de cela?

(Cela pourrait être plus approprié pour math.stackexchange. Je ne suis pas sûr)

Était-ce utile?

La solution

Si votre taux d'échantillonnage est fs, le taux Nyquist est fs / 2. Cela représente la plus haute fréquence représentable vous pouvez avoir sans aliasing. Il est également équivalent à la valeur normalisée de 1 visé par la documentation. Par conséquent, si vous concevez un filtre passe-bas avec une fréquence angulaire de fc, vous saisiriez comme fc / (fs / 2).

Par exemple, vous avez fs = 8000 si fs / 2 = 4000. Vous voulez un filtre passe-bas avec une fréquence de coin de 3100 et une fréquence de bande d'arrêt de 3300. Les valeurs résultantes seraient wp = fc / (fs / 2) = 3100/4000. La fréquence de bande d'arrêt serait 3300/4000.

sens?

Autres conseils

Prenez la fonction x(t) = cos(2*pi*fa*t). Si nous l'échantillonnage à la fréquence fs, la fonction échantillonnée est x(n*ts) = x(n/fs) = cos(2*pi*n*fa/fs). La fréquence maximale avant aliasing (pliage) est la fréquence de Nyquist fa = fs / 2, ce qui normalise à (fs/2)/fs = 1/2. La fréquence angulaire normalisée est 2*pi*1/2 rad/sample = pi rad/sample. Ainsi, le signal x[n] = cos[pi*n] = [1,-1,1,-1,...].

La version échantillonnée d'une fréquence donnée comme une 2*pi*fc rad/s de fréquence d'angle serait 2*pi*fc/fs rad/sample. En tant que fraction de la fréquence de Nyquist pi, qui est 2*fc/fs = fc/(fs/2).

Quelques formules à vivre par:

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 du composant même (une somme de cosinus) d'un signal de valeur réelle sera réelle et symétrique tandis que la DFT de la composante impaire (une somme de sinus) sera imaginaire et anti-symétrique. Ainsi, pour les signaux à valeurs réelles telles que la réponse impulsionnelle d'un filtre typique, le spectre d'amplitude est symétrique alors que le spectre de phase est antisymétrique. Ainsi, il suffit de spécifier un filtre pour la plage de 0 à pi, qui est normalisé à [0,1].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top