- ベストアンサー
特定の周波数レベルだけ取り出したい
ある時間関数f(t)がありまして、その中から特定の周波数のレベルだけリアルタイムに取り出したいのですが、その処理をするCPUの処理能力に限界がありFFTなどという高級なことはできません。ある一つの周波数についてだけでよいので簡単に取り出す演算方法はないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その周波数の振幅を乗算して、フィルタ関数で 一定周波数以下を抜きだして下さい。 フィルタ関数もめんどうなら、 単に平均化でも大丈夫です。
その他の回答 (2)
- jojiirofu
- ベストアンサー率55% (5/9)
特定の周波数が与えられているとすると,下の回答のようにその周波数をもつ正弦波を乗算します.この結果,特定の周波成分と正弦波信号の周波数の和と差の成分が現れます.和の方は低域フィルタか積分演算で除きます.差の方は正弦波と特定周波数成分と同じ成分の強度を表しています.すなわち,差の成分(直流成分)がその強度を表していますのでこれを除去することは情報を捨ててしまうことになります.この直流成分は正弦波と特定成分との位相差を表しています.従って強度を調べるためには振幅と位相情報の両方が必要になります.現実にはFFTを使うのが一番と思います.フィルタを通す方法は結局周波数領域での畳み込みが必要になりますのでFFT以上に時間がかかります.時間関数の周波数帯域がどの程度かわかりませんがソフトウエアで行うには相当制限があります.ソフトウエアのサイトで例えばVectorでfftと検索すればオーディオ帯域のリアルタイム表示の可能なフリーソフトがあったと思います.参考にしてはどうでしょうか.
お礼
FFTのソースコードは持っているのですが、CPUの制約で今回はやっぱり使えそうにありません。ありがとうございました。
- ametsuchi
- ベストアンサー率31% (81/257)
特定の周波数とは、Givenと思っていいのですね? であれば、あとは、「位相」の問題だけですよね? 「位相合わせ」は初めに一度やれば済む話ではないんでしょうか? 位相のズレをいくつか試して、サンプル波(=正弦波またはその代用)との「畳み込み積分」的なことをやり、「ピーク」を見つける。ただし、ピークの見つけ方には「力ずく」にならないような工夫が必要でしょう。 初めに1回だけなら、別にFFTでもいいと思うんですけど...。 無責任な発言お許しください。
お礼
回答ありがとうございます。おそらく下のかたと似たような考えかと思います。 位相のズレはDC成分としてだけ出てくるようなので後から除けば良いのではないでしょうか。
お礼
素早く的確な回答ありがとうございました。 問題のほとんどはこれで解決しましたが、「単に平均化でも大丈夫です。」をもう少し解説いただけるとありがたいです。乗算する正弦波の位相によってはDC成分が出てきてしまうのですが。