複雑な応答(および正当化)を平均化する方法?


11

入力信号と出力信号のFFTを比較して、システムの応答を計算するソフトウェアを開発しています。入力信号と出力信号はウィンドウに分割され、ウィンドウごとに、信号は中央値減算され、ハン関数で乗算されます。そのウィンドウの機器応答は、処理されたデータのFFTの比率になります。

上記は標準的な手順であると思いますが、説明が不十分な場合があります。私の問題は、複数のウィンドウからの応答を組み合わせる方法にあります。

私が見る限り、正しいアプローチは、すべてのウィンドウにわたって複雑な値を平均することです。振幅と位相の応答は、各周波数での平均の複素数値の振幅と位相になります。

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

周波数ビン上の暗黙のループ。

しかし、私はこれを変更して、最初に各ウィンドウで振幅と位相を計算し、次にすべてのウィンドウで振幅と位相を平均するように求められました。

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

角度の平均が「間違っている」ため、これは正しくないと主張しました。たとえば、0度と360度の平均は180度ですが、一緒に作業している人は「OK、振幅のみを表示します」と応答しました。

だから私の質問は:

  • 振幅についても2番目のアプローチは一般的に正しくないと私は思いますか?
  • もしそうなら、関連している可能性のある例外はありますか、そしてそれは私が一緒に働いている人々が2番目の方法を好む理由を説明するかもしれませんか?たとえば、ノイズが小さくなると2つのアプローチが一致するように見えるので、おそらくこれは低ノイズの受け入れられる近似ですか?
  • 2番目のアプローチが正しくない場合、これを示すために使用できる説得力のある信頼できる参照はありますか?
  • 2番目のアプローチが正しくない場合、振幅についてこれを示す良い、理解しやすい例はありますか(0と360度の平均は位相に対してそうです)?
  • あるいは、が間違っている場合、自分をよりよく教育するためにどんな本がいいでしょうか?

私は-1 1 1 -1 1 -1 -1の平均が1ではなくゼロであるべきだと主張しようとしましたが、それは説得力がありませんでした。そして、時間とともに、特定のノイズモデルが与えられた最尤推定に基づいて引数を構築することはできると思いますが、私が作業している人々が耳を傾けるのは、そのような理由ではありません。したがって、私が間違っていなければ、権威からの強力な議論か、「明白な」デモのどちらかが必要です。

[タグを追加しようとしましたが、関連するタグが見つからず、新しいタグを新しいユーザーとして定義できません-申し訳ありません]


彼らがあなたの方法を嫌う理由は何ですか?
nibot

2番目の方法でプロットすると、応答はより滑らかに見えます。これは、検討したケースでは有意な信号がない(fが高い)ためです。一方、2番目のアプローチでは、信号がノイズから「現れる」ようになります。また、ご想像のとおり、さまざまな政治/コミュニケーションの問題。
アンドリュークック

1
いくつかのテストケースを提供してみましたか?ランダムデータを取得し、既知の周波数応答を持ついくつかのフィルターでフィルタリングします。伝達関数推定が既知の伝達関数に収束することを確認します。
nibot

番号。私はしていません。それは良い提案です。ありがとう。うまく提示されれば、説得力があることがわかります。
アンドリュークック

回答:


13

伝達関数推定は通常、記述した方法とは少し異なる方法で実装されます。

あなたの方法は計算します

F[y]F[x]

ここで、山かっこは、データセグメントにわたって取られた平均を表し、ウィンドウ関数が各データセグメントに適用されてから、フーリエ変換()を取ります。FF

より一般的な実装では、xとyのクロススペクトル密度をxのパワースペクトル密度で除算して計算します。

F[y]F[x]|F[x]|2=F[y]F[x]F[x]F[x]

ここで、は点ごとの積を表し、は複素共役です。*

これは、ビンが小さすぎるデータセグメントの影響を減らすためだと思います。F[x]

インコヒーレント推定

あなたの雇用主は、以下を使用して伝達関数を推定することを提案しています

|F[y]||F[x]|

これは機能しますが、2つの大きな欠点があります。

  1. フェーズ情報を取得しません。
  2. 入力と出力測定に追加のノイズがある場合、伝達関数の推定は正しくありません。yxy

あなたの方法と私が説明した方法は、コヒーレント平均を使用してこれらの問題を回避ます。

参考文献

オーバーラップした平均セグメントを使用してパワースペクトル密度を計算する一般的な考え方は、ウェルチ法として知られています。これを伝達関数の推定に使用することの拡張は、ウェルチ法とも呼ばれますが、ウェルチの論文で言及されているかどうかはわかりません。ウェルチの論文を調べることは、貴重な情報源になるかもしれません。この主題に関する有用なモノグラフは、BendatとPiersolの著書であるRandom Data:Analysis and Measurement Proceduresです。

検証

ソフトウェアを検証するために、ガウスホワイトノイズを生成し、既知の伝達関数を持つデジタルフィルターにフィードするいくつかのテストケースを適用することをお勧めします。入力と出力を伝達関数推定ルーチンに送り、推定が伝達関数の既知の値に収束することを確認します。


ああ!ありがとうございました。これを調べてみます。
アンドリュークック

@nibot正確には、FFTの長さはここで使用されていますか?
Spacey

任意の長さを使用できます。長さは解像度を決定し、暗黙的に(処理するデータの量が一定の場合)、平均の数を決定します。fftが長いほど、解像度が高くなりますが、平均が少ないためエラーも大きくなります。
nibot 2012

わかりました。もう1つの違いは、フォノンには<F(y)F <(x)> /(< F(x)> <F *(x)>)afaict:o(
アンドリュークック

<F(y)> <F *(x)> /(<F(x)> <F *(x)>)を計算しても意味がありません。これは、<F *(x)>がすぐにキャンセルされるためです。私が書いたとおり、それは正しいと思います。
nibot

12

信号処理へようこそ!

あなたは絶対的に正しいです。DFTの大きさと位相、特に位相を別々に単純に平均することはできません。ここに簡単なデモがあります:

z=a+bi|z|zz

|z|=a2+b2
z=tan1(ba)

zz1z2

z=z1+z22=a1+b1i+a2+b2i2=(a1+a2)+(b1+b2)i2

この場合、

|z|=(a1+a2)24+(b1+b2)24=12(a1+a2)2+(b1+b2)2a12+b12+a22+b222

また、

z=tan1(b1a1)+tan1(b2a2)2tan1(2(b1+b2)2(a1+a2))

|z|z

さて、あなたがやろうとしていることをするために、私は以下を提案します。理論的には、出力のDFTを入力のDFTで除算すると、システムのインパルス応答を見つけることができます。ただし、ノイズが存在すると、非常に奇妙な結果が得られます。それを行うための少し良い方法は、デュアルチャネルFFTインパルス応答推定を使用することです。

Gi(f)=Fi1(f)+Fi2(f)++FiN(f)NFik(f)kkiGo(f)=Fo1(f)+Fo2(f)++FoN(f)NGH^(f)H(f)

H^(f)=Go(f)Gi(f)|Gi(f)|2

()


2
ありがとう。...ので、本の勧告を行ってきましたが、私が持っていた場合は2票はこれも含まれているだろう、私は彼らが同じプロセスを提唱していると思う-私は確かに最良の答えとして、この1かnibotのを投票するかどうかではなかった
アンドリュー・クック

1
@andrewcookeはい、どちらもまったく同じことを主張しています。これがあなたとあなたの同僚のために事を晴らしてくれることを願っています。
フォノン2012

これは私にとって大きな助けになりました(ありがとう)。月曜日に私は、(1)提案された方法を実装し、(2)3つすべての既知の(合成)データと比較することを提案します。その後、うまくいけば、最良のアプローチが勝つ:o)
andrew cooke

@PhononここでFFTを計算するためにどのFFT長を使用していますか?length_of_signal + max_length_of_channel + 1?
Spacey

@Mohammadそれはあなたが見つけることを期待している遅延の少なくとも2倍の長さでなければなりません。これはDFTの循環対称性によるものであるため、結果には因果的および非因果的遅延値の両方が表示されます。
フォノン2012

3

これは、FFTスペクトルのコヒーレント平均と非コヒーレント平均の違いです。コヒーレント平均化は、分析でランダムノイズを拒否する可能性が高くなります。インコヒーレントは、ランダムなノイズの大きさを強調する可能性が高くなります。これらのうち、あなたの結果報告にとってより重要なのはどれですか?


それらが異なる結果を与える場合、私は公平な見積もりが欲しいと思います。どちらか偏っていませんか?
アンドリュークック2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.