本节核心: 掌握使用MATLAB读取各类声学数据、利用向量化高效处理数据,并绘制专业、直观的声学图表。
2.1 读取与处理常见声学数据格式
在声学工作中,数据来源多样,格式不一。MATLAB提供了丰富的函数来处理这些常见格式。
文本文件 (.txt, .csv)
这是最常见的格式,常用于存储测试仪器导出的数据,如Klippel的TRF/LSI模块数据、AP测试数据等。
读取:
- • readmatrix: 读取纯数值的文本文件,非常方便。
- • readtable: 读取包含文本和数值的表格数据,结果为table类型,可以通过列名访问数据,推荐使用。
- • textscan: 更底层的函数,可以精细控制读取过程,处理复杂或不规范的文本文件。
写入:
- • writematrix / writetable: 将矩阵或表格数据写入文件。
- • fprintf: 精确控制输出格式,常用于生成格式化的报告文件。
代码示例:读取CSV格式的频响数据
音频文件 (.wav)
WAV是声学信号记录最常用的无损音频格式。
- • audioread: 读取WAV文件,返回音频数据(通常为-1到1之间的double类型)和采样率 Fs。
- • audiowrite: 将音频数据写入WAV文件。
- • audioinfo: 获取WAV文件的元数据,如采样率、位数、时长等。
代码示例:读取WAV文件并显示其时域波形
2.2 MATLAB数组与矩阵高级操作
高效处理声学数据的关键在于充分利用MATLAB的矩阵运算能力,避免使用for循环,这个过程称为"向量化"(Vectorization)。向量化代码更简洁、可读性更高,且执行效率远超循环。
- • 高级索引:逻辑索引 (Logical Indexing): 使用逻辑数组(true/false)来选取符合条件的元素,非常强大且常用。
- • 常用函数: find, sum, mean, max, min, std, reshape等。
代码示例:向量化处理数据
2.3 MATLAB专业声学图表绘制
一张好的图表胜过千言万语。MATLAB可以绘制出版物质量的专业声学图表。
二维绘图:
- • semilogx: X轴为对数坐标,Y轴为线性坐标(频响曲线常用)。
极坐标图:
- • polarplot: 绘制极坐标图(指向性图常用)。
三维与特殊图表:
- • waterfall: 瀑布图,常用于展示累积频谱衰减(CSD)。
- • spectrogram: 计算并显示信号的短时傅里叶变换,即声谱图。
- • imagesc / surf / contour: 用于绘制声场分布等二维/三维数据。
图形定制与导出:
- • title, xlabel, ylabel, legend, grid on, xlim, ylim。
- • subplot / tiledlayout: 在一个窗口中绘制多个子图(tiledlayout是新版本中更推荐的方式)。
- • exportgraphics (推荐): 提供更多导出选项和更好的质量控制。
代码示例:绘制扬声器指向性图