我正在尝试对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 回答