You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MATLAB得到与商用软件一致的Cepstrum(倒谱)计算结果

你使用MATLAB内置的cceps、rceps函数得到的结果和商用软件不一致,核心是计算逻辑不匹配:绝大多数工业领域商用分析软件默认输出的是功率倒谱(Power Cepstrum),而非复倒谱或实倒谱。

功率倒谱的计算逻辑为:
时域信号 → 傅里叶变换 → 计算功率谱(幅值平方)→ 对功率谱取对数 → 逆傅里叶变换取实部

MATLAB的rceps是对傅里叶变换的幅值取对数后做逆变换,和功率倒谱差了2倍的系数;cceps则是对复频谱做相位解绕后的复对数逆变换,和常规工程场景用的倒谱差异更大。此外你当前代码直接对全段信号做计算,未做加窗、预加重等常规预处理,也会和商用软件的默认处理流程产生偏差。

整段信号功率倒谱实现(和你现有代码逻辑对齐)

%% 功率倒谱计算(适配商用软件默认逻辑)
% 加载信号
A = importdata('21.txt');
M = A(:,2);
Fs = 1552;
L = length(M);

% 预处理:预加重提升高频分量,加汉明窗减少频谱泄漏
M = filter([1 -0.97], 1, M);
win = hamming(L);
M = M .* win;

% 核心计算流程
Y = fft(M);
P = abs(Y).^2 / L; % 计算功率谱
logP = log(P); % 对功率谱取自然对数
cep = real(ifft(logP)); % 逆变换取实部得到功率倒谱

% 倒频率轴(单位:秒)
q = (0:L-1)/Fs;

% 绘图
plot(q, cep)
xlabel('Quefrency (s)')
ylabel('Amplitude')
title('Power Cepstrum')
ylim([0 0.2]);
xlim([0 4.6]);

分帧平均功率倒谱实现(适配商用软件短时处理逻辑)

如果商用软件采用分帧处理的短时分析逻辑,可使用如下代码:

%% 分帧平均功率倒谱计算
A = importdata('21.txt');
M = A(:,2);
Fs = 1552;

% 分帧参数,可根据商用软件配置调整:帧长256,帧移128,汉明窗
frame_len = 256;
frame_shift = 128;
win = hamming(frame_len);
frames = buffer(M, frame_len, frame_len - frame_shift, 'nodelay');
frames = frames .* win;

% 逐帧计算功率倒谱
cep_frames = zeros(frame_len, size(frames, 2));
for i = 1:size(frames, 2)
    Y = fft(frames(:,i));
    P = abs(Y).^2 / frame_len;
    logP = log(P);
    cep_frames(:,i) = real(ifft(logP));
end

% 计算平均倒谱并绘图
cep_mean = mean(cep_frames, 2);
q = (0:frame_len-1)/Fs;
plot(q, cep_mean)
xlabel('Quefrency (s)')
ylabel('Amplitude')
title('Average Power Cepstrum')

调整说明

若结果仍有偏差,可对应调整预加重系数、窗函数类型、分帧参数,若商用软件对输出做了绝对值、归一化处理,也可在输出环节对应调整即可。

内容的提问来源于stack exchange,提问作者user33834

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:24:03