Matlab PDA的倒谱分析

Matlab PDA的倒谱分析,matlab,signal-processing,Matlab,Signal Processing,嘿,我目前正在开发一种算法来决定一帧是浊音还是清音。我试图用倒谱来区分这两种情况。我使用MATLAB来实现 我有一些问题,大致说了一下框架,但我目前的实现看起来像MATLAB的I'm award具有rceps功能,但这两个功能都不起作用: ceps = abs(ifft(log10(abs(fft(frame.*window')).^2+eps))); 有谁能给我一个小的演示,它将把帧转换成功率倒谱,所以一个棒棒糖在音调频率。例如,使用此代码生成频率 fs = 8000; timelength

嘿,我目前正在开发一种算法来决定一帧是浊音还是清音。我试图用倒谱来区分这两种情况。我使用MATLAB来实现

我有一些问题,大致说了一下框架,但我目前的实现看起来像MATLAB的I'm award具有rceps功能,但这两个功能都不起作用:

ceps = abs(ifft(log10(abs(fft(frame.*window')).^2+eps)));
有谁能给我一个小的演示,它将把帧转换成功率倒谱,所以一个棒棒糖在音调频率。例如,使用此代码生成频率

fs = 8000;
timelength = 25e-3;
freq = 500;
k = 0:1/fs:timelength-(1/fs);
s = 0.8*sin(2*pi*freq*k);
谢谢

根据,功率倒谱是信号傅里叶变换的幅度平方对数的傅里叶变换的幅度平方。所以我想你在找

function c = ceps(frame, win)
    c = abs(fft(log10(abs(fft(frame.*win)).^2+eps))).^2;
请注意,我更改了一个变量名,因为它是信号处理工具箱中的预定义函数

但是,ifft和fft只在比例因子上有所不同,外部的abs不会改变整体形状,那么棒棒糖在哪里呢?请参阅下面的页面

正弦时间输入不会给你倒谱中的脉冲。正弦应在频谱中产生一个脉冲,在logmag操作后仍然是一个脉冲,它将在倒谱中转换为电平偏移。为了得到倒谱中的脉冲信号,你需要频谱中的周期性信号,这意味着你需要时域中具有多个谐波频率的信号。例如,考虑方波:

N = 1024;
h = hann(N, 'periodic');
f = 10;
x = sin(2*pi*f*((1:N)'-1)/N); %#'# to deal with SO formatting
s = 2*(x > 0) - 1; %# square wave
cx = ceps(x, h);
cs = ceps(s, h);
cs将有你渴望的棒棒糖,而不是cx


在第0倒谱槽中似乎总是有一个较大的分量。我猜这是因为对数运算总是使第二个FFT的输入有一个大的电平偏移?另外,我不知道该怎么做,我本以为棒棒糖会在N/f。因此,也许这段代码仍然有问题,或者更可能是我的理解有问题。

好吧,我在情节中看到了某种峰值。。。就像你在文献中看到的一样。是的,我看过维基百科,但我发现的大部分材料都使用ifft而不是fft。但这不是重点。它给出了完美的解释,光谱必须是周期性的,如果我想要峰值,所以谢谢你的解释。但是我会尝试用一个方波来构建我的演示。谢谢@CziX-很高兴能帮上忙!我仍然对x轴的位置很好奇,如果你看到我理解上的缺陷,请告诉我。