目录
手把手教你学Simulink——使用Simulink进行音频特征提取
📌 特征2:频谱特征(Spectral Centroid, Bandwidth...)
📌 特征4:零交叉率(Zero Crossing Rate)
手把手教你学Simulink——使用Simulink进行音频特征提取
一、什么是音频特征提取?
音频特征提取 是从原始音频信号中提取出有助于后续处理或分析的关键信息,广泛应用于语音识别、音乐分类、情感分析、语音增强等领域。
常见的音频特征包括:
- MFCC(梅尔频率倒谱系数)
- 频谱质心、带宽、滚降点
- 零交叉率(Zero Crossing Rate)
- 能量与短时能量
- 基频(Pitch)
本教程将手把手教你如何在 Simulink 中实现这些音频特征的提取。
二、本教程目标
我们将使用 Simulink 搭建一个完整的音频特征提取系统,支持以下功能:
- 实时或离线音频输入
- 提取 MFCC、能量、频谱等常见特征
- 可视化特征输出
- 支持导出到 MATLAB 工作区用于进一步处理
三、准备工作
确保你已经安装了以下工具箱:
- MATLAB R2023a 或更新版本
- Simulink
- DSP System Toolbox(必须)
- Audio Toolbox(推荐)
四、实现步骤详解
✅ 步骤1:创建Simulink模型
matlab
深色版本
modelName = 'AudioFeatureExtraction';
new_system(modelName);
open_system(modelName);
✅ 步骤2:添加音频输入模块
方法一:读取音频文件(适合离线处理)
matlab
深色版本
add_block('dsp/Signal Management/Signal Attributes/Audio File Read', [modelName '/AudioFileReader']);
set_param([modelName '/AudioFileReader'], 'Filename', 'your_audio_file.wav');
set_param([modelName '/AudioFileReader'], 'PlayCount', 'inf'); % 循环播放
方法二:实时麦克风输入(适合实时处理)
matlab
深色版本
add_block('audioio/Audio Device Reader', [modelName '/MicInput']);
✅ 步骤3:添加特征提取模块
📌 特征1:MFCC(梅尔频率倒谱系数)
matlab
深色版本
add_block('audio/Mel-Frequency Cepstral Coefficients', [modelName '/MFCCExtractor']);
双击配置参数:
- 输入采样率(如
44100Hz) - 输出维数(默认 13 维)
- 是否输出对数能量(Log energy)
📌 特征2:频谱特征(Spectral Centroid, Bandwidth...)
matlab
深色版本
add_block('audio/Spectral Descriptor', [modelName '/SpectralDescriptor']);
选择输出类型:
- Spectral Centroid(频谱质心)
- Spectral Spread(频谱宽度)
- Spectral Skewness(偏度)
- Spectral Kurtosis(峰度)
- Spectral Rolloff Point(滚降点)
📌 特征3:能量和短时能量
matlab
深色版本
add_block('audio/Power Estimate', [modelName '/EnergyEstimator']);
可以设置帧长、重叠长度等参数。
📌 特征4:零交叉率(Zero Crossing Rate)
matlab
深色版本
add_block('audio/Zero-Crossing Rate', [modelName '/ZCR_Estimator']);
✅ 步骤4:连接特征提取模块并可视化
添加 Scope 查看特征变化
matlab
深色版本
add_block('simulink/Sinks/Scope', [modelName '/MFCC_Scope']);
add_block('simulink/Sinks/Scope', [modelName '/Spectral_Scope']);
add_block('simulink/Sinks/Scope', [modelName '/Energy_Scope']);
add_block('simulink/Sinks/Scope', [modelName '/ZCR_Scope']);
连接信号线
matlab
深色版本
add_line(modelName, 'AudioFileReader/1', 'MFCCExtractor/1');
add_line(modelName, 'MFCCExtractor/1', 'MFCC_Scope/1');
add_line(modelName, 'AudioFileReader/1', 'SpectralDescriptor/1');
add_line(modelName, 'SpectralDescriptor/1', 'Spectral_Scope/1');
add_line(modelName, 'AudioFileReader/1', 'EnergyEstimator/1');
add_line(modelName, 'EnergyEstimator/1', 'Energy_Scope/1');
add_line(modelName, 'AudioFileReader/1', 'ZCR_Estimator/1');
add_line(modelName, 'ZCR_Estimator/1', 'ZCR_Scope/1');
✅ 步骤5:导出特征到MATLAB工作区(可选)
使用 To Workspace 模块将特征保存下来供后续训练或分析使用:
matlab
深色版本
add_block('simulink/Sinks/To Workspace', [modelName '/MFCC_ToWorkspace']);
set_param([modelName '/MFCC_ToWorkspace'], 'VariableName', 'mfccData');
set_param([modelName '/MFCC_ToWorkspace'], 'SaveFormat', 'StructureWithTime');
✅ 步骤6:配置仿真参数
进入菜单栏:Simulation > Model Configuration Parameters
设置如下参数:
- Solver:
Fixed-step - Type:
Discrete (no continuous states) - Stop time:
'inf' - Fixed-step size:
1/44100(对应采样率)
五、完整框图结构示意(文字版)
深色版本
[ Audio Input ] --> [ MFCC Extractor ] --> [ Scope / To Workspace ]
|
v
[ Spectral Descriptor ] --> [ Scope / To Workspace ]
|
v
[ Power Estimate ] --> [ Scope / To Workspace ]
|
v
[ Zero-Crossing Rate ] --> [ Scope / To Workspace ]
六、运行仿真并观察结果
点击 Run 开始仿真,你会看到各个Scope窗口中显示:
- MFCC随时间的变化
- 频谱质心、带宽
- 能量波动
- 零交叉率变化趋势
同时,如果添加了 To Workspace 模块,可以在MATLAB命令行中查看变量如 mfccData, spectralData 等。
七、结论与拓展方向
✅ 本章收获:
- 学会使用 Simulink 提取常用音频特征(MFCC、能量、频谱、ZCR)
- 掌握音频特征的实时可视化方法
- 初步了解如何将特征数据导出用于机器学习或模式识别任务
🔍 后续建议拓展方向:
- 结合机器学习模型(如SVM、CNN)进行音频分类;
- 构建端到端语音识别系统(结合深度学习模块);
- 实现实时特征提取+GUI界面控制(使用App Designer);
- 部署到嵌入式平台(如树莓派、FPGA);
- 多通道音频特征提取(立体声或多麦克风场景);
- 自定义特征提取算法(通过MATLAB Function Block编写)
八、参考代码汇总
matlab
深色版本
modelName = 'AudioFeatureExtraction';
new_system(modelName);
open_system(modelName);
% 添加音频输入源
add_block('dsp/Signal Management/Signal Attributes/Audio File Read', [modelName '/AudioFileReader']);
set_param([modelName '/AudioFileReader'], 'Filename', 'your_audio_file.wav');
set_param([modelName '/AudioFileReader'], 'PlayCount', 'inf');
% 添加特征提取模块
add_block('audio/Mel-Frequency Cepstral Coefficients', [modelName '/MFCCExtractor']);
add_block('audio/Spectral Descriptor', [modelName '/SpectralDescriptor']);
add_block('audio/Power Estimate', [modelName '/EnergyEstimator']);
add_block('audio/Zero-Crossing Rate', [modelName '/ZCR_Estimator']);
% 添加示波器
add_block('simulink/Sinks/Scope', [modelName '/MFCC_Scope']);
add_block('simulink/Sinks/Scope', [modelName '/Spectral_Scope']);
add_block('simulink/Sinks/Scope', [modelName '/Energy_Scope']);
add_block('simulink/Sinks/Scope', [modelName '/ZCR_Scope']);
% 连线
add_line(modelName, 'AudioFileReader/1', 'MFCCExtractor/1');
add_line(modelName, 'MFCCExtractor/1', 'MFCC_Scope/1');
add_line(modelName, 'AudioFileReader/1', 'SpectralDescriptor/1');
add_line(modelName, 'SpectralDescriptor/1', 'Spectral_Scope/1');
add_line(modelName, 'AudioFileReader/1', 'EnergyEstimator/1');
add_line(modelName, 'EnergyEstimator/1', 'Energy_Scope/1');
add_line(modelName, 'AudioFileReader/1', 'ZCR_Estimator/1');
add_line(modelName, 'ZCR_Estimator/1', 'ZCR_Scope/1');
% 设置仿真参数
set_param(modelName, 'StopTime', 'inf');
set_param(modelName, 'Solver', 'Fixed-step');
set_param(modelName, 'SolverName', 'discrete (no continuous states)');
set_param(modelName, 'FixedStep', '1/44100');
📌 下节预告:手把手教你学Simulink——使用Simulink实现语音活动检测(VAD)系统
如果你喜欢这个系列,请点赞、收藏,我会持续更新更多实用教程!

902

被折叠的 条评论
为什么被折叠?



