MATLAB中的复倒谱变换

MATLAB中的复倒谱变换,matlab,audio,transform,signal-processing,complex-numbers,Matlab,Audio,Transform,Signal Processing,Complex Numbers,我试图在MATLAB中的数组上执行一个命令,我不知道cceps(x)是否是正确的命令。通过我的研究,我发现了一篇论文,它使用以下公式计算复倒谱变换:c(n)=ifft(log(fft(x)),其中x是音频信号。但是,返回的数据与此公式不同,cceps返回的数据也不复杂。如果您需要任何帮助,将不胜感激!谢谢!cceps的doc提供了有关其使用的处理方法的文献参考。如果您使用编辑cceps您可以查看代码(这是任何工具箱函数的情况),您可以看到,cceps使用ifft(log(fft(x)),但也使用

我试图在MATLAB中的数组上执行一个命令,我不知道
cceps(x)
是否是正确的命令。通过我的研究,我发现了一篇论文,它使用以下公式计算复倒谱变换:
c(n)=ifft(log(fft(x))
,其中
x
是音频信号。但是,返回的数据与此公式不同,
cceps
返回的数据也不复杂。如果您需要任何帮助,将不胜感激!谢谢!

cceps的
doc
提供了有关其使用的处理方法的文献参考。如果您使用
编辑cceps
您可以查看代码(这是任何工具箱函数的情况),您可以看到,
cceps
使用
ifft(log(fft(x))
,但也使用相位展开函数,并且只返回实值,因此简言之
real(ifft(log(fft(x))展开)
。如果需要,您可以编辑函数以返回复数。

对于me,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');
我们在这里看到的差异似乎是由窗户造成的


哦,好的,我明白了。如果我编辑函数并返回所有的值,实数和复数,做逆运算会让我返回到原始实数数据吗?由于某种原因,当我使用完整公式和公式的逆运算时,我不会返回到原始数据,而且数据仍然很复杂。你为什么不试试看呢?(可能不是,但应该很接近)我试过了,返回的数据仍然很复杂。虚部是什么样的?只取
实部或
abs
看起来像原始信号吗?如果改变一个函数而不是另一个函数,它可能不会对齐。为什么不直接使用
ifft(log(fft(x)))
如果你想重现一篇论文的方法,那么反过来呢?Matlab的版本略有不同,但它对你的应用程序有什么影响?