- ベストアンサー
matlabで波形の相関をとるときの正規化について
カテ違いだったのでこちらで質問させていただきます。 基準となる波形といくつかのデータとしての波形があり、基準となる波形との相互相関係数からどの波形が一番基準の波形と似ているか知りたいときに、単純に畳み込み積分をすると、相関係数が振幅に左右されてしまいます。 波形の振幅に左右されずどの波形が一番基準の波形に似ているか知るにはどのように正規化したらよいでしょうか? すこしでもわかる方はよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 > あと疑問なのですが、振幅や平均値でなくエネルギーを用いることの意義というのがわかれば教えていただきたいです。 振幅(Peak-Peak)では飛び抜けた値がある場合に駄目。 平均値はそれなりに比較できるけど、数値解析的にはやはりエネルギーでしょう。 ちなみに録音した波形とのことなので、音声の場合について書きますが、 エネルギーが一定=音量[dBSPL]が一定 ということになります。 平均値が一定≠音量[dBSPL]が一定 です。
その他の回答 (2)
- ICE_FALCON
- ベストアンサー率56% (63/111)
#1です。 書き忘れてたけど、相関係数求める前にオフセット消しといた方が無難かな。 base=base-mean(base)
お礼
2.の全てのエネルギーが一定値になるように正規化してから相関係数を求める方法を用いたいと思います。 録音した波形なので直流成分はあまりないかもしれませんが、すべての波形のオフセットを消してから相関係数を求めたいと思います。 わかりやすい回答ありがとうございます。 あと疑問なのですが、振幅や平均値でなくエネルギーを用いることの意義というのがわかれば教えていただきたいです。
- ICE_FALCON
- ベストアンサー率56% (63/111)
1.相関係数の二乗和が等しくなるように、相関係数を正規化。 coe = coe./std(coe,1); 2.全ての波形(基準となる波形)も含めてエネルギー(二乗和)が一定値になるように正規化してから相関係数を求める。 base = base./std(base,1); signal1 = signal1 ./std(signal1 ,1); signal2 = signal2 ./std(signal2 ,1); ... とかかな。 base = c(0) + c(1) * signal の最小二乗誤差問題解くだけでもできそうだけど。
お礼
確かにそうですね!エネルギーをもちいてやってみたいと思います。 遅くなりましたが大変丁寧に解説していただき、ありがとうございます。本当に感謝です。