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 回答