MATLAB で配列に対して複雑なケプストラム変換を実行しようとしてcceps(x)
いますが、使用するコマンドが正しいかどうかについて混乱しています。私の研究を通じて、次の式を使用して複素ケプストラム変換を計算する論文を見つけました。c(n) = ifft(log(fft(x))
ここx
で、 は音声信号です。ただし、cceps
はこの式とは異なるデータを返し、 によって返されるデータcceps
も複雑ではありません。どんな助けでも大歓迎です!ありがとう!
質問する
720 次
2 に答える
2
doc
forは、cceps
使用する処理方法に関する参考文献を提供します。を使用する場合edit cceps
は、コードを見ることができます (これはツールボックス関数の場合です)。 をcceps
使用していることがわかりますがifft(log(fft(x))
、位相アンラッピング関数も使用しており、実際の値のみを返すため、要するにreal(ifft(unwrap(log(fft(x)))))
. 必要に応じて、複雑な値を返すように関数を編集できます。
于 2013-07-16T15:20:35.720 に答える
0
私にとって cceps(x) と c(n)=ifft(log(fft(x)) は非常に近い結果を返します
コード例:
frame = signal;
win = hamming(length(frame));
windowedSignal = frame.*win;
fftResult=log(abs(fft(windowedSignal)));
ceps=ifft(fftResult);
subplot(2,1,1); plot(ceps); legend('c(n)=ifft(log(fft(x))');
subplot(2,1,2); plot(cceps(frame));legend('cceps');
ここで見られる違いは、ウィンドウ処理が原因のようです
于 2013-07-16T15:28:47.773 に答える