- ベストアンサー
ディジタルフィルタの設計
線形位相(直線位相)を持つハイパスフィルタを設計したいのですが、どういう手順でやれば良いでしょうか? 最終的にはプログラムとして実現しますが、現段階はそのアルゴリズムを考え中です。 このようなディジタルフィルタを実際に設計したことのある方などいましたら、ご教授ください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
H(f)= の式がどういう仕組みになっているのかよくわかりません。 c[n]がインパルス応答行列なのでしょうか?: c[n]は各整数n(0≦n≦N)について実数です あと、W(f)とD(f)、fs、fはどういう風に決めたらいいのか(何のパラメータか)もわかりませんでした。: fは周波数変数で設定するものでは有りません 示した積分範囲で示した式を積分するということです fsはサンプリング周波数です 設計時に自分で決めるものです fs=1000とするもよしfs=10000000とするもよし D(f)は自分が決めた周波数特性を与えたらいいのです しかしH(f)はfsの周期関数であって実部が偶関数虚部が奇関数になります つまり当然ですがそのような関数しか近似できないのです 例えば100Hz以上の周波数を通過させるようなハイパスフィルタの場合は それぞれのパラメータはどんな感じになるのでしょうか?: fs=1000Hzならば例えば D(f)=0(0<f<100)D(f)=1(100<f<500) W(f)=1(0<f<100)W(f)=0(100<f<140)W(f)=10000(140<f<500) Nは遮断特性が十分満足できるまで大きくする N=100でよい場合N=1000でもだめな場合有るでしょう 何処までの特性を出したいかで試行錯誤的に判断します 100<f<140の部分を狭くするとNを大きくしなければなりません その幅を0にするとNは相当に大きくしなければなりません
その他の回答 (4)
- guuman
- ベストアンサー率30% (100/331)
W(f)=10000(0<f<100)W(f)=0(100<f<140)W(f)=1(140<f<500) と修正 なお次のようにしても100<f<140に相当する部分の幅があればOK W(f)=1(0<f<100)W(f)=0(100<f<140)W(f)=1(140<f<500)
- guuman
- ベストアンサー率30% (100/331)
ちょっとと手直し(dfの抜けと≦を<に) フィルタの形は直線位相だとFIRになります H(f)=Σ[0≦n≦N]・c[n]・cos(2・π・n・f/fs) (奇数タップ数フィルタ:2・N+1) または H(f)=Σ[0≦n<N]・c[n]・cos(2・π・(n+1/2)・f/fs) (偶数タップ数フィルタ:2・N) 設計方法は 希望の特性をD(f)として △=∫[0<f<fs/2]df・(H(f)-D(f))^2・W(f) が最小になるようにする W(f)はどの帯域をどの程度近似するかの関数 通常遷移域を0とし減衰域を大きく通過域を小さくする W(f)=1でもいいが減衰特性が十分得られない N×Nまたは(N+1)×(N+1)の行列を係数行列とする連立1次方程式を解くことになる (評価式をC[n]で偏微分して0とすれば方程式が作れる) 係数が決まればプログラムで作るのはかけて足すの繰り返しをするだけの単純なものである 窓関数は使わないこと最適解ではなく求める方法を知らない人の妥協の産物だから
- guuman
- ベストアンサー率30% (100/331)
フィルタの形は直線位相だとFIRになります H(f)=Σ[0≦n≦N]・c[n]・cos(2・π・n・f/fs) (奇数タップ数フィルタ:2・N+1) または H(f)=Σ[0≦n≦N]・c[n]・cos(2・π・(n+1/2)・f/fs) (偶数タップ数フィルタ:2・N) 設計方法は 希望の特性をD(f)として △=∫[0<f<fs/2](H(f)-D(f))^2・W(f) が最小になるようにする W(f)はどの帯域をどの程度近似するかの関数 通常遷移域を0とし減衰域を大きく通過域を小さくする W(f)=1でもいいが減衰特性が十分得られない N×Nまたは(N+1)×(N+1)の行列を係数行列とする連立1次方程式を解くことになる 係数が決まればプログラムで作るのはかけて足すの繰り返しをするだけの単純なものである 窓関数は使わないこと最適解ではなく求める方法を知らない人の妥協の産物だから
- mac_res
- ベストアンサー率36% (568/1571)
Xwindowが使えるUnix, Linux環境でしたら、xdigfil http://line.to/mac/soft/xdigfil/ というフリーソフトで、FIRのハイパスフィルターを設計できます。
お礼
回答ありがとうございます。 教えていただいた内容を基にして、自分なりにやってみようとしましたが、よくわからない部分があったので できれば教えていただきたいと思います。 まず、直線位相を実現するにはFIRフィルタになるのはわかったのですが H(f)= の式がどういう仕組みになっているのかよくわかりません。 c[n]がインパルス応答行列なのでしょうか? あと、W(f)とD(f)、fs、fはどういう風に決めたらいいのか(何のパラメータか)もわかりませんでした。 例えば100Hz以上の周波数を通過させるようなハイパスフィルタの場合は それぞれのパラメータはどんな感じになるのでしょうか?