今だけ人気マンガ100円レンタル特集♪

VisualC++6.0でバンドパスフィルタのプログラムを作りたいのですが
ネットではあまり有用な情報が得られません。
フィルタの具体的なプログラムの記述について教えてください。

A 回答 (1件)

参考URLでバタワース、チェビシェフのIIRフィルタ係数が計算できます。


FIRなら正規化周波数の2^n倍でサンプリングしてFFTすれば係数が求められます。ただし、有限応答誤差については算出が必要です。

参考URL:http://momiji.i.ishikawa-nct.ac.jp/dfdesign02/iir/
    • good
    • 1
この回答へのお礼

ありがとうございます。
ですが他のプログラムに組み込みたいので
できましたらフィルタのプログラムの記述
も教えていただけると助かります。

お礼日時:2007/05/25 22:23

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qデジタルフィルタ

ハイパスフィルタのプログラムをC言語で
作成したいのですが、デジタルフィルタは
初めてさわるのでよくわかりません。

そこでC言語でハイパスフィルタを作成したことが
ある人がいたらどのようにプログラムを組めばいいか?
参考ソースプログラムや、
あるいはこの書籍が丁寧でわかりやすく説明してあった、
というような情報をいただけないでしょうか?

Aベストアンサー

デジタルフィルタのプログラミング自体は、遅延を表わすZ-1(-1はZの右肩に小さく書かれる)と係数と加算を表わす+を○で囲んだもので表わされる構成図をプログラムとして実現するだけですので何も難しくはないと思います。遅延Z-1のところを次のサンプルの処理まで記憶しておくという点を除けば単なる乗算と加算の組み合わせだけです。ある程度のC言語でのプログラミング経験があれば難しくはないと思います。

ただし、リアルタイム処理になるとバッファ処理が必要になるので複雑になります。これはデジタルフィルタ自体の問題でないので割愛します。

おそらく一番の問題は構成はどのようにすればいいのか、次数や係数はどのように決定すればいいのかだと思います。大きく分けるとFIRとIIRの2つの構成方法がありますが、それぞれに長所と短所があります。まずはデジタル・フィルタに関する書籍をじっくりをお読みすることをお勧めします。検索すればデジタルフィルタに関する書籍は沢山あると思いますが、選ぶときはC言語のプログラムが載っているかではなく、内容が分かり易いあるいは質問者様の要求仕様・応用分野が近いなどの基準で選択するのがいいと思います。

フィルタの概要が理解でき形式と次数を決定したら、次の問題は係数を決めることです。これについては、フィルタの要求仕様から係数を算出してくれるサイトあるいはソフトがありますので検索してみてください。まずFIRかIIRかを決定してから、検索する方がいいかもしれません。(どちらか一方しかサポートしていない場合も結構あります)

デジタル・フィルタに関する書籍は決して簡単ではありませんので、理解するのに根気とある程度の時間が必要なことは考慮しておいてください。

デジタルフィルタのプログラミング自体は、遅延を表わすZ-1(-1はZの右肩に小さく書かれる)と係数と加算を表わす+を○で囲んだもので表わされる構成図をプログラムとして実現するだけですので何も難しくはないと思います。遅延Z-1のところを次のサンプルの処理まで記憶しておくという点を除けば単なる乗算と加算の組み合わせだけです。ある程度のC言語でのプログラミング経験があれば難しくはないと思います。

ただし、リアルタイム処理になるとバッファ処理が必要になるので複雑になります。これはデジタルフ...続きを読む

Qエクセルを使用してデジタルフィルタのハイパスフィルタ・ローパスフィルタの掛け方を教えてください。

タイトルどおりなのですが、エクセルを使用してデジタルフィルタのハイパスフィルタ・ローパスフィルタをかけたいです。

ご存知の方、よろしくお願いします。

Aベストアンサー

わたしはわかりませんが、こんなページがありました。

エクセルを使用してデジタルフィルタのハイパスフィルタ・ローパスフィルタの掛け方を教えてください。
出来ましたらそのまま使える式をお願いいたします。

http://q.hatena.ne.jp/1204546061

Qピークの検出方法

ある離散時系列データf(x)があったとき、単純に考えれば
f'(x)=f(x+1)-f(x)<0.0001,f''(x)=f'(x+1)-f'(x)<0
となるxを求めればピークのxが検出できると思いますが、
f(x)が滑らかでない場合はどんな方法でピークが検出できますでしょうか?

Aベストアンサー

>f'(x)=f(x+1)-f(x)<0.0001, f''(x)=f'(x+1)-f'(x)<0 ....

基本はこれでOKなので、「f(x)が滑らかでない場合」に引っかかりそうなケースを考えてみましょう。

[誤検出しそうな例]
(1) サンプリングしたデータでは、ピークでの増分が 0.0001 未満とは限らない。(つまり、とんがり気味のピークは検出できない)
(2) 真のピークではなく、裾野の細かいうねりまで検出するおそれがある。

[対策例]
(1) 単純に、f'(x)が正から負へ極性反転したらピークとみなす。
(2) #1 さんの「平滑化」処理を適用する。
(2)' あるいは、f'(x)が正から負へ極性反転したピークの高さに閾値を設定しておく。(つまり、細かなピークは無視する)

ピーク検出には、適用分野に応じたノウハウが多数あるようです。

Qバンドパスフィルターについて計算方法がわかりません

90hz~200hzのバンドパスフィルターを作りたくて
計算のページを見つけたのですが(http://sim.okawa-denshi.jp/OPtazyuBakeisan.htm)
フイルターのことが判らないので
どこに何の数字を入れたら良いのかさっぱりわかりません。
どなたか教えていただけないでしょうか?
よろしくお願いします。

Aベストアンサー

回答NO.3です。
補足説明です。
 
実際にフィルターをシミュレータで設計してみました。添付図を参照ください。

左の回路図が2次のアクティブ・バンドパスフィルタで右側の回路図がCRの2次バンドパスフィルタです。
回路図の下にそれぞれの周波数特性が示されてます。図でV(out)が2次のアクティブ・バンドパスフィルタの周波数特性で、V(out_cr)がCRの2次バンドパスフィルタの周波数特性です。
 回路は複雑ですが、2次のアクティブ・バンドパスフィルタの方が特性的に優れているのが分かると思います。必要な特性が分かりませんので必要に応じてどちらかのフィルタをお使いになれば良いかと思います。

QEXCELにてローパスフィルタを作成する

実験の測定データをEXCELでデータ整理しようと考えております。データ整理のためローパスフィルタをかけたいのですが、具体的にどういった式、もしくはEXCELの機能を使用したらいいのでしょうか?デジタルフィルタが良く分からないのでよろしくお願いします。
ちなみにローパスフィルタは1000Hzをかけたいです。

Aベストアンサー

時系列データの処理ならば

OutputData(n+1) = OutputData(n) + (InputData(n+1) - OutputData(n)) * dt / T

dt:データのサンプリング間隔
T:フィルタの時定数 1/2πf
f:カットオフ周波数
n,n+1:それぞれn個目,n+1個目のデータをしめす。

でいけると思いますが、一次のパッシブなんで効果が薄いかも。(普通はベッセルかけるんでしょうけど、そこまではわからない)

Qパワースペクトルとは?

パワースペクトルについて説明してくださいと先生に言われました。
全くわからない人に説明するので端的にわかりやすく説明したいのですが誰かできる人はいませんか?ちなみにぼくも詳しいことは全然わかりません。
本などを見ても式があったりしてそれをまた理解することが出来ません。
なんかイメージがわくような方法はないですかね?

Aベストアンサー

スペクトルとは、独立な成分それぞれについての強さをグラフにしたものです。
光の場合、光の種類を色で分類する事ができます。光といっても、その中に青はどれくらい、オレンジはどれくらいとそれぞれの色に応じて強さがあります。
光をそれぞれに分ける方法は、たとえばプリズムがあって、光をプリズムに通すといろいろな色にわかれてみえます。

ニュートンはプリズムを使った実験で有名です。一つ目のプリズムで光を分光し、赤と青の光を残して他の光を遮り、赤と青を二つ目のプリズムやレンズで一つにまとめました。その後でもう一度プリズムを通すと、いったんまとめたのにやはり赤と青しかでてこないのです。これから光の色の独立性(赤や青は、混ざらないものとして独立に扱って良い、ということ)がわかります。

このように色にはそれぞれを別々に扱ってもよいので、色ごとに物事を考えると分かりやすくなります。この色ごとについての強度を「光のスペクトル」、といいます。
強度はふつう「時間当たりに光りが運ぶエネルギー」(パワー)で表すので、この時は「パワースペクトル」です。

こんなふうに物事を自然な「成分(光の時は色)」にわけて考えた物がスペクトルです。詳しくは座標とフーリエ成分の関係について(フーリエ変換について)勉強するといいと思います(電磁場の実空間の振動とフーリエ空間上での振動の対応として)。

スペクトルとは、独立な成分それぞれについての強さをグラフにしたものです。
光の場合、光の種類を色で分類する事ができます。光といっても、その中に青はどれくらい、オレンジはどれくらいとそれぞれの色に応じて強さがあります。
光をそれぞれに分ける方法は、たとえばプリズムがあって、光をプリズムに通すといろいろな色にわかれてみえます。

ニュートンはプリズムを使った実験で有名です。一つ目のプリズムで光を分光し、赤と青の光を残して他の光を遮り、赤と青を二つ目のプリズムやレンズで一つにま...続きを読む

Qデジタルフィルタの計算式について

すいませんがIIRのデジタルフィルタの計算式についてわかる人がいましたら教えてください。スポーツ関係をしていて、データ処理をエクセルで計算式を今作っているのですがどうもわかりません。

 2次のバターワースフィルタの計算式Y(n)=AX(n)+AX(n-1)+AX(n-2)+BY(n-1)+BY(n-2)と専門書に書かれていますがこの式でデータの反対からもフィルタを掛けていることになるのでしょうか?時間的なずれはなくなることですよね

 それと実際計算をするときには、初めのY(n-1)、Y(n-2)は、どのような値を入れたらいいのですか?

 よろしくお願いします

Aベストアンサー

時間を逆に、、
なるほど
最初に
Yn=A Xn + AX(n-1) A X(n-2)+ B Y(n-1) + B Y(n-2)
という処理をnを増やす向きでしたあと
Zn= A Y(n) + A Y(n+1) + A Y(n+2) + B Z(n+1) B+ B Z(n+2)
という処理nを減らす向きでして、Znを最終的な出力として使うということかと。
これでしたら、haba999さんがご質問出かかれていたように、一回目の処理と2回目の処理で時間遅れをキャンセルさせて、最終的な信号ZとXの間の時間差を無くす処理でしょう。

フィルタの次数と、往復で何回かけるというというのは別の話になるかと思います。
(Yn=A Xn + AX(n-1) A X(n-2)+ B Y(n-1) + B Y(n-2) 自体は二次のフィルタですが、先に書いたように、出力信号と入力信号の間には時間差があります)

この処理が通常のデジタルフィルタで使われないのは、現在の出力を計算するために未来の入力を使う(因果律が成立しない、実時間で処理できない)ことと、同じフィルタを往復で使うので最終的に得られるフィルタの特性に若干の制約がある ことが理由かと思います。


以下余談

IIRでなくて、FIR形式のフィルタなら、往復の操作を
Zn= C(-k) x(n+k)+ +C(1) x(n+1)+C(0) x(n) + +C(1) x(n-1) + ... + C(k) x(n-k)
という具合にひとつにまとめれます。
で、このままだと、因果律を満たさないので、ちょいと変形して
z(m)=C(-k)x(m)+..+C(-1)x(m-k+1)+C(0)x(m-k)+..+C(k)x(m-2k)

と言う具合にすれば因果律を満たす(でも、出力は入力よりkだけ送れるけど)ようになります。
が、IIRだとこういうわけにいかない(無限の過去から出力信号が出てる)ので,,

時間を逆に、、
なるほど
最初に
Yn=A Xn + AX(n-1) A X(n-2)+ B Y(n-1) + B Y(n-2)
という処理をnを増やす向きでしたあと
Zn= A Y(n) + A Y(n+1) + A Y(n+2) + B Z(n+1) B+ B Z(n+2)
という処理nを減らす向きでして、Znを最終的な出力として使うということかと。
これでしたら、haba999さんがご質問出かかれていたように、一回目の処理と2回目の処理で時間遅れをキャンセルさせて、最終的な信号ZとXの間の時間差を無くす処理でしょう。

フィルタの次数と、往復で何回かけるというというのは別の話にな...続きを読む

Qバンドパスフィルターの作り方

初心者です。抵抗とコンデンサを組み合わせて作るローパスフィルター、ハイパスフィルターというのがありますね。バンドパスフィルターはその両者を直列につなぎ合わせて作る、と考えていいんでしょうか?

Aベストアンサー

RF回路の設計者です。50MHz程度から10GHz程度まで
幅広く扱っています。アンテナも設計した事
あります。

本気でインピーダンス整合とかアンテナとかについて
勉強したいのでしたら、下記サイトは本当に便利だと
思います。
※中でも特に「高周波回路教室」は素人の方必見。
同サイトを作った市川裕一さんの本も素人の方には
とっても読みやすい本ですよ☆

本題のバンドパスフィルターですが、かなり奥が
深いんでまずは質問された程度の知識で良いのでは
ないでしょうか?へなちょこBPFならともかく、
本気のBPFはちょっと勉強して理解出来るほど
甘くは無いです^^;。

参考URL:http://www.geocities.jp/rfpagejp/rfpage.html

QFFT・PSDの縦軸は何を意味するのでしょう?

加速度計測の結果について、PSD(パワースペクトラムデンシティ)をかけた場合、その縦軸の意味を教えてください。
また、FFTとPSDはどういう違いが有るのでしょうか?
これまでは、周波数の分布のみに着目していました。
どなたか、わかりやすく教えてください。
よろしくお願いします。

Aベストアンサー

一般に加速度センサー信号の出力は電圧です。

縦軸は係数をかけていない状態では#1さんがおっしゃるように計測した電圧の値を示しています。

よって、縦軸に物理的な意味を持たせるのには、電圧と加速度の間の換算係数をかけてやる必要があります。

フーリエ解析は時刻歴波形は正弦波の組み合わせで構成されるという仮定の下で計算を行っています。FFTの結果は横軸で示される周波数の正弦波の振幅を示しています。
電圧と加速度の換算係数をかけてやると、FFTの縦軸はその周波数成分を持つ加速度振幅を示しています。

ここで1つ問題があります。FFTはサンプリング周波数により分解能が変わります。FFTによる周波数分析は正確にいうと、離散値なので、ジャストの周波数のもをだけを表しているのではなく、ある範囲の周波数範囲にある成分を表しています。
このため分解能が変わると周波数範囲が変わり、同じ波形を分析しても振幅が変わります。
これでは分解能が異なるデータ同士は比較できないなどの問題が生じます。
そのため、周波数幅で振幅を基準化して、1Hzあたりの振幅としたものがPSDです。
PSDならサンプリング周波数が異なるデータ同士の比較ができます。

要はフーリエ振幅(FFT)はサンプリング周波数・分解能により変わる値であり、PSDはそのようなことのないように周波数幅で基準化した値という差があります。

なお、2乗表示したものをパワースペクトルと呼び、それを周波数で基準化したものをPSDと呼びますが、PSDは表示方法によって2乗した状態のあたいを表示(パワー表示)するときと、2乗した値の平方根を計算して表示することがありますので、使用する際には縦軸の表示方法については要注意です。

一般に加速度センサー信号の出力は電圧です。

縦軸は係数をかけていない状態では#1さんがおっしゃるように計測した電圧の値を示しています。

よって、縦軸に物理的な意味を持たせるのには、電圧と加速度の間の換算係数をかけてやる必要があります。

フーリエ解析は時刻歴波形は正弦波の組み合わせで構成されるという仮定の下で計算を行っています。FFTの結果は横軸で示される周波数の正弦波の振幅を示しています。
電圧と加速度の換算係数をかけてやると、FFTの縦軸はその周波数成分を持つ加速...続きを読む

Q周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・

周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・
時刻歴を持った波形をエクセルのフーリエ解析にかけたところ以下のような結果が出ました。

時刻(s)波形(風速)(フーリエ結果)
0 0 4964.547892
0.01 0.016148 162.934386092482+757.485796541738i
0.02 0.024223 -176.671853947744+679.108499109482i
0.03 0.032297 -38.1198577747876+304.999881074942i
0.04 0.040371 -33.7184553866481+283.069540754i
0.05 0.047921 67.2878230094194+268.189434427773i
0.06 0.055471 -5.3340068659851+181.755877831686i
0.07 0.063021 43.7700366445313+188.325607658826i
0.08 0.070571 95.1628904739282+115.524911946043i
0.09 0.078121 79.1610244918527+286.809861194846i
0.1 0.084849 -20.9326884388047+207.486443103952i
0.11 0.091578 -10.0874722910491+176.517532576085i

この場合の結果をパワースペクトル密度にしたいのですが,
一番上が定常分で,事項以降が ωt,2ωt,・・・nωtということに
なって,それぞれの実部^2+虚部^2の平方がスペクトルになると思いますが
これを横軸周波数のおなじみのグラフにするには横軸の周波数はどのよう
に考えればいいのでしょうか。
(たとえば2ωtの項の場合の周波数はいくらになる?)
また,風速のパワースペクトルの単位はどのようになるでしょう。
基本的な質問だと思います。とても恥ずかしいのですが,ご教授いただけますか。
もしかすると根本的な間違いをしている気もします・・

周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・
時刻歴を持った波形をエクセルのフーリエ解析にかけたところ以下のような結果が出ました。

時刻(s)波形(風速)(フーリエ結果)
0 0 4964.547892
0.01 0.016148 162.934386092482+757.485796541738i
0.02 0.024223 -176.671853947744+679.108499109482i
0.03 0.032297 -38.1198577747876+304.999881074942i
0.04 0.040371 -33.7184553866481+283.069540754i
0.05 0.047921 67.2878230094194+268.189434427773i
0.06 0.055471 ...続きを読む

Aベストアンサー

> これを横軸周波数のおなじみのグラフにするには横軸の周波数はどのように考えればいいのでしょうか。

例えば、256点のデータをエクセルで「フーリエ解析」したとします。結果も256点(#0~#255とします)出てきます。ただし、パワースペクトル(複素数の実部^2+虚部^2)にすると、#1~#127と#255~#129は対称形になっていますから、実際には129点の結果になります。
さて周波数ですが、この#1は

 元のデータ256点の中に、ちょうど1周期現れる周波数

に相当します。サンプリングの定理から、最大周波数は、256点の中に128周期の波で、周期は2点毎の波になります(#128)。

具体的に、例えばデータ間隔が1秒で全256点の場合、#1の周波数は1/256Hz、#2の周波数は1/128Hzになります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング