0

MATLAB で配列に対して複雑なケプストラム変換を実行しようとしてcceps(x)いますが、使用するコマンドが正しいかどうかについて混乱しています。私の研究を通じて、次の式を使用して複素ケプストラム変換を計算する論文を見つけました。c(n) = ifft(log(fft(x))ここxで、 は音声信号です。ただし、ccepsはこの式とは異なるデータを返し、 によって返されるデータccepsも複雑ではありません。どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

2

docforは、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 に答える