1. 从录音到文本:语音识别全流程拆解
1.1 录音采集与预处理
要让Matlab听懂人话,第一步是获取高质量的语音样本。我通常使用智能手机自带的录音功能采集原始音频,保存为.wav格式。这里有个关键细节:采样率建议设置为16kHz,这个频率既能保留语音特征又不会产生过大文件。
录音文件导入Matlab后,需要执行三个关键预处理步骤:
- 归一化处理:将音频幅度缩放到[-1,1]范围,避免不同录音音量差异影响分析
- 静音段切除:使用短时能量检测去除首尾静音,我常用voiceActivityDetector函数实现
- 预加重滤波:通过y[n] = x[n] - 0.97x[n-1]补偿高频分量,提升后续特征提取效果
实测发现,预处理阶段对最终识别准确率的影响能达到15%-20%,这个环节绝对不能马虎。特别是在多人说话场景下,静音检测的阈值需要反复调试。
1.2 特征提取关键技术
MFCC(梅尔频率倒谱系数)是语音识别的黄金标准特征。在Matlab中实现时要注意:
- 帧长通常取25ms,帧移10ms
- 梅尔滤波器组数量建议26-40个
- 保留前12-13个倒谱系数即可
我封装了一个特征提取函数,核心代码如下:
matlab复制function mfcc = extractMFCC(audio, fs)
frameLength = round(0.025*fs);
overlapLength = round(0.015*fs);
mfcc = mfcc(audio, fs, ...
'Window', hamming(frameLength,'periodic'), ...
'OverlapLength', overlapLength, ...
'NumCoeffs', 13);
end
1.3 声学模型训练方案
对于说话人识别,GMM-UBM(高斯混合模型-通用背景模型)是经典选择。具体实现步骤:
- 用大量非目标说话人语音训练UBM模型
- 通过MAP自适应得到目标说话人模型
- 使用对数似然比进行判决
Matlab中的关键函数:
matlab复制ubm =
