アプリ版:「スタンプのみでお礼する」機能のリリースについて

周波数特性(ボード線図)を描きたいのですが、データは「時間」、「正弦波のデータ(入力)」、「実験による正弦波に似たデータ(出力)」です。この時、振幅と、位相角を計算したいのですが、エクセルで可能でしょうか?計算のやり方を教えて下さい。

A 回答 (1件)

FFTしたあとでどうすればよいのかが分からなかったんですね。


フーリエ変換というのは、信号波形f(t)をsin/cosで表す方法です。
もし単一の周波数ωの信号であれば、

f(t) = A * { cos(ωt) + i * sin(ωt) } + A' * { cos(ωt) - i * sin(ωt) }
i : 虚数
と表すことが出来ます。
(A,A'は周波数+ω、-ωのところでの複素振幅)
フーリエ変換して得られたデータというのは、このA, A' と ωにほかなりません。
つまり信号の位相も振幅も求まっているのです。

1.FFTのデータから求める方法
いま、出力データが単一周波数fしか持たないのであれば、全パワースペクトル(パワースペクトルの合計)の平方根は振幅になります。
が、どうせノイズが含まれているでしょうから、目的の周波数のパワースペクトル部分だけを抽出して平方根をとればよいかと思います。

位相は、スペクトルの複素数で表されています。実部はcosで虚部はsinですから、実部を横軸、虚部を縦軸に取ったグラフに、複素振幅の値(周波数がfのところのFFTの結果)をプロットすると、原点からその値の点のベクトルをかくことが出来ます。
そのベクトルの方向を、虚部の軸に対する角度で表すと、f(t) = sin( ω*t + θ) のθと等しくなります。
つまり時間tに対する位相θが分かりますので、入力波形の位相との差をとれば、入力信号に対する出力信号の位相が求められます。


2.ついでですからFFTを使わないもう一つの方法です。
出力データを正弦波(sin)としてフィッティングを行い、振幅と位相を求める方法でもまあよいでしょう。

f(t) = A * sin( 2*π*f*t + B)

として、fは入力した周波数と同一なのできめ打ちします。
数値A,Bをどこかのセルに入れて、データのとなりに上記式(式の中でA,Bを参照)の値を入れていきます。
次に、データとこの式の値との差の2乗をとり、その差を全部sum()で合計するセルを用意します。
このsum()の値が最小になるようにA,Bを決めるのが最小二乗法です。

エクセルのツールからソルバー(アドインなのでなければ導入してください)を選択して、目的のセルをsum()のセルにして最小を目標とし、変化させるセルはA,Bのセルを指定して実行すれば、結果が入ります。

どちらでもお好みのものをどうぞ。
なお、私は電気屋さんではないから、正式にはどのような定義で導出した数値でボード線図を書くのが正しいのかは知りません。
上記は純粋に数学的な話です。
    • good
    • 1

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