サンプル/カットオフ周波数から、個別の時間でサンプリングされたIIRフィルターシステムでのPIラディアン/サンプルへの変換

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

質問

私は、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

(ここから)

私はデジタルフィルターに精通していません(私はハードウェアデザインの背景から来ています)。アナログのコンテキストでは、目的の勾配と3dBダウンポイントを決定し、それからコンポーネント値を計算します。

これに関連して、既知のサンプルレート、目的のコーナー周波数、目的のロールオフを取得し、計算するにはどうすればよいですか。 wp, ws それからの値?

(これはmath.stackexchangeに適しているかもしれません。よくわかりません)

役に立ちましたか?

解決

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

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

わかる?

他のヒント

関数を取ります 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

実際の価値のある信号の偶数成分(コサインの合計)のDFTは現実的かつ対称であり、奇数成分のDFT(sumの合計)は想像上および対称的です。したがって、典型的なフィルターのインパルス応答などの実数信号の場合、マグニチュードスペクトルは対称的であり、位相スペクトルは反対称です。したがって、[0,1]に正規化される範囲0からPIのフィルターを指定するだけでいい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top