我正在尝试在MATLAB中对数组执行complex cepstral transform,并且对于cceps(x)
是否使用正确的命令感到困惑。通过我的研究,我发现了一篇论文,它使用公式c(n) = ifft(log(fft(x))
计算复数倒谱谱,其中x
是音频信号。但是,cceps
返回的数据与此公式不同,cceps
返回的数据也不复杂。任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
doc
的{{1}}提供了有关其使用的处理方法的参考文献。如果您使用cceps
,则可以查看代码(任何工具箱函数都是如此),您可以看到edit cceps
使用cceps
,但也使用了相位展开功能,并且只返回实际值,所以简而言之ifft(log(fft(x))
。如果需要,可以编辑函数以返回复数值。
答案 1 :(得分: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');
我们在这里看到的差异似乎是由窗口引起的