无法计算真实信号的真实倒谱

信息处理 matlab 语音处理 倒谱分析
2022-02-04 22:05:28

我正在尝试使用 rceps 函数在 Matlab 中计算录制的电话音频的真实倒谱系数。

在某些音频帧上(每帧 480 个样本——8kHz 的 60ms 音频),我得到一个 Matlab 错误:“rceps:ZeroInFFT”。倒谱不存在,因为某些 DFT 系数为 0。所讨论的帧不为零,任何样本值也不复数。根据帧的 RMS,许多有错误的帧具有显着的能量。我大约 10% 的帧会出现这个错误,所以这似乎是一个比侥幸更大的问题。

我很困惑,因为这种类型的分析很常见,特别是对于语音分析,但我找不到其他人有这个问题的记录。

任何建议将不胜感激。


audio % is a 236000x1 vector of doubles containing PCM audio data at 8kHz
window_size = 3 %Working with multiples of 20-ms frames
errs = zeros(N_frames,1);
for i=0:N_frames-window_size
    %% Cepstral analysis
    s = audio((i*160+1):((i+window_size)*160)); %Grab 60ms of audio -- 480x1 matrix
    try
        c = rceps(s);
    catch err
        errs(i+1) = 1;
    end 
end 
1个回答

在计算倒谱时,通常用一些(噪声)底值替换第一个 FFT 结果中的任何零或微小幅度,以保持对数函数的规模和范围“看起来合理”。

来自微小频谱幅度的 log() 的巨大负尖峰(或 -inf)通常不会为倒谱型分析中的其余结果提供那么多有用的信息。