2011-01-15 6 views
4

私はPythonとNumpy/Scipyを使用していくつかのデジタルフィルタ処理を行っています。離散時間サンプリングされたIIRフィルタシステムのサンプラレート/カットオフ周波数からパイラジアン/サンプルへの変換

私は私のフィルタ的係数を生成する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 

from here)に精通していないです私はデジタルフィルタに精通していません(私はハードウェア設計の背景から来ています)。アナログの文脈では、私は所望の勾配と3dbダウンポイントを決定し、それから成分値を計算する。

ここでは、既知のサンプルレート、希望のコーナー周波数、および希望のロールオフをどのように取って、その値からwp, wsの値を計算しますか?

(これはmath.stackexchangeのためのより適切かもしれない。私はよく分からない)

答えて

6

あなたのサンプリングレートがfsのであれば、ナイキスト・レートは、FS/2です。これは、エイリアシングなしで持つことができる最も高い表現可能な周波数を表します。また、ドキュメントで参照される正規化された値1に相当します。したがって、コーナー周波数がfcのローパスフィルタを設計する場合は、fc /(fs/2)と入力します。

たとえば、fs = 8000 fs/2 = 4000です。コーナー周波数が3100、ストップバンド周波数が3300のローパスフィルターが必要です。結果の値はwp = fc /(fs/2)= 3100/4000になります。ストップバンド周波数は3300/4000になります。

意味がありますか?

+0

意味があります。私はまだ興味がありますが、悪魔はパイのラジアンをどこからやっていますか? –

2

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)です。

によって生きるためにいくつかの式:実数値信号(余弦の和)も成分のDFTは奇数成分(AのDFTながら実対称になり

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]に正規化されています。

関連する問題