Project4_DTW/ ├── 📂 train/ # 训练音频 (生成模板用) │ ├── zero-1.wav ... zero-25.wav │ ├── one-1.wav ... one-25.wav │ └── ... ├── 📂 test/ # 测试音频 │ ├── 0.wav, 1.wav, ..., 9.wav ├── train_template.m # ⭐ 模板训练程序 (生成template.mat) ├── template.mat # 模板库 (运行train_template后生成) ├── extract_label.m # 辅助函数 (标签提取) ├── ex0_all.m # 主程序 (批量识别) ├── ex1_preemphasis.m # 预加重滤波器 需修改 ├── ex2_enframe.m # 分帧函数 需修改 ├── ex3_mfcc.m # MFCC特征提取 需修改 ├── ex4_dtw.m # DTW距离计算 需修改 ├── ex5_recognize.m # 识别决策 已完成 ├── ex6_vad.m # 端点检测 已完成 └── test_Project4.p # 自动评测程序
train_template.m 生成 template.mat,否则识别程序无法运行!
功能:从 train/ 目录读取训练音频,使用中心样本法生成模板。
>> train_template % 生成 template.mat
| 参数 | 类型 | 说明 |
|---|---|---|
x | 输入 | 原始语音信号 |
alpha | 输入 | 预加重系数,默认0.97 |
y | 输出 | 预加重后的信号 |
filter([1, -alpha], 1, x) 实现高通滤波
| 参数 | 类型 | 说明 |
|---|---|---|
x | 输入 | 语音信号 |
frame_len | 输入 | 帧长(样本点数) |
frame_shift | 输入 | 帧移(样本点数) |
frames | 输出 | 帧矩阵 [frame_len × num_frames] |
num_frames = floor((N - frame_len) / frame_shift) + 1
| 参数 | 类型 | 说明 |
|---|---|---|
x | 输入 | 语音信号 |
fs | 输入 | 采样率 |
mfcc_all | 输出 | 36维特征 (12 MFCC + 12 Δ + 12 ΔΔ) |
| 参数 | 类型 | 说明 |
|---|---|---|
template | 输入 | 模板特征 [dim × n] |
test | 输入 | 测试特征 [dim × m] |
dist | 输出 | DTW距离 |
D(i,j) = d(i,j) + min{D(i-1,j), D(i,j-1), D(i-1,j-1)}
| 测试场景 | 预期识别率 | 原因 |
|---|---|---|
使用 test/ 目录 | 10-30% | 不同说话人/录音环境 |
使用 train/ 目录 | 70-90% | 同源数据 |
ex0_all.m 中的 audio_dir = 'train' 进行对比测试。
? 已替换为正确代码? 已替换为正确代码? 已替换为正确代码? 已替换为正确代码train_template.m 成功生成 template.mattest_Project4.p 全部通过Q1: 提示"找不到template.mat"?
A: 请先运行 train_template.m 生成模板文件。
Q2: test目录识别率只有10-30%,正常吗?
A: 完全正常!这体现了DTW的说话人相关性。请用train目录测试验证代码正确性。
Q3: DTW距离为Inf?
A: 检查D矩阵初始化,确保 D(1,1)=0,其余边界为Inf。