プロが教えるわが家の防犯対策術!

線形位相(直線位相)を持つハイパスフィルタを設計したいのですが、どういう手順でやれば良いでしょうか?
最終的にはプログラムとして実現しますが、現段階はそのアルゴリズムを考え中です。
このようなディジタルフィルタを実際に設計したことのある方などいましたら、ご教授ください。

A 回答 (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は相当に大きくしなければなりません
    • good
    • 0

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)
    • good
    • 0

ちょっとと手直し(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とすれば方程式が作れる)
係数が決まればプログラムで作るのはかけて足すの繰り返しをするだけの単純なものである
窓関数は使わないこと最適解ではなく求める方法を知らない人の妥協の産物だから
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいた内容を基にして、自分なりにやってみようとしましたが、よくわからない部分があったので
できれば教えていただきたいと思います。

まず、直線位相を実現するにはFIRフィルタになるのはわかったのですが
H(f)= の式がどういう仕組みになっているのかよくわかりません。
c[n]がインパルス応答行列なのでしょうか?
あと、W(f)とD(f)、fs、fはどういう風に決めたらいいのか(何のパラメータか)もわかりませんでした。
例えば100Hz以上の周波数を通過させるようなハイパスフィルタの場合は
それぞれのパラメータはどんな感じになるのでしょうか?

お礼日時:2005/11/09 08:16

フィルタの形は直線位相だと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次方程式を解くことになる
係数が決まればプログラムで作るのはかけて足すの繰り返しをするだけの単純なものである
窓関数は使わないこと最適解ではなく求める方法を知らない人の妥協の産物だから
    • good
    • 0

Xwindowが使えるUnix, Linux環境でしたら、xdigfil


http://line.to/mac/soft/xdigfil/
というフリーソフトで、FIRのハイパスフィルターを設計できます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!