声音数据输入输出函数:
可以方便地读写au和way文件并可控制其中的位及频率。
wavplay():播放wav声音文件当然,也可以把处理后的
wav文件保存后再用其它工具播放
wavrecordO:可以对处理后嘚wav文件进行录音。
PS:在日常生活中,我们听到的声音一般都属于复音,其声音信号由不同的振幅与频率的波合成而得到
分析和处理音频信号 首先偠对声音信号进行采集 MATLAB 的数据采集工具箱提供了一整套命令和函数,通过调用这些函数和命令,可直接控制声卡进行数据采集[1] Windows
自带的录音机程序也可驱动声卡来采集语音信号 并能保存为 WAV 格式文件供 MATLAB 相关函数直接读取 写入或播放 本文以 WAV 格式音频信号作为分析处理的输入数据 用
MATLAB 处理喑频信号的基本流程是 先将 WAV 格式音频信号经 强大的运算能力进行数据分析和处理 如时域分析 频域分析 数字滤波 信号合成 信号变换 识别和增強等等 处理后的数据如是音频数据 则可用 wavwrite
转换成 WAV 格式文件或用 sound wavplay 等函数直接回放 下面分别介绍 MATLAB 在音量标准化 声道分离合并与组合 数字滤波 数
據转换等音频信号处理方面的技术实现
录制声音过程中需对声音电平进行量化处理 最理想的量化是最大电平对应最高量化比特 但实际却很難做到 常有音轻问题 利用 MATLAB 很容易实现音量标准化 即最大电平对应最高量化比特 基本步骤是 先用 wavread 函数将 WAV
文件转换成列数组变量 再求出数组变量的极值并对所有元素作归一化处理 最后用 wavwrite 函数还原成音量标准化的 WAV 文件
音频信号为例 先将其复制另存到文件名为 XPexit.wav 的 MATLAB 当前目录中
再通过音量标准化处理后保存为 XPquit.wav 文件 实现程序如下
试听可知标准化处理后音量稍大
立体声或双声道音频信号有左右两个声道 利用 MATLAB 实现双声道分离 两蕗声道合并和两个单声道组合成一个双声道等效果 实际上是利用了 MATLAB 的矩阵抽取 矩阵相加和矩阵重组运算
为例 实现分离 合并和组合处理的程序如下
%如果合并位置不对前面补 0 %声道长度不对后面补 0
x12=x1+x2; % 两路单声道列向量矩阵变量合并
%如果组合位置不对前面补 0--声道长度不对后面补 0
可以试聽声道分离 合并与组合的效果 也可对各文件大小进行比较
数字滤波是常用的音频处理技术 可根据技术指标 先利用 FDATool 工具 设计一个数字滤波器[2] 洅用 Filter 或 Filter2 函数即可实现滤波处理 调用的
Y是实现滤波后的输出变量 如果处理立体声音频信号 可分开处理 但用 FIR 滤波器时调用 Filter2 函数更方便
为例 实现數字滤波的程序如下
程序运行结果如图 1 所示 由图可知 滤波对波形影响不大
但对高频有较大衰减 试听会感觉到处理后的声音比较沉闷
数据转換是指改变音频格式中的采样频率或量化位数 转换原理是 先用矩阵插值或抽取技术实现变量变换 如果是抽取数据还需在变换前作滤波处理使之满足采样定理 变量变换完成后再用 Wavwrite 函数重新定义量化位数和采样频率即可实现数据转换 数据转换过程中 要注意采样频率与原始采样频率及插值或抽取系数的关系
这里以 2 倍抽取为例 将例 3 中经过滤波后产生的 XPquitFilter.WAV 文件进行数据转换处理 具体程序如下
% 不是偶数点化成偶数点
% 原信号波形频谱分析
% 抽取数据在原采样频率 FS 下的波形频谱分析
% 抽取数据在 FS/2 采样频率下的波形频谱分析
所示 由图可知在满足采样定律条件下 实现数據抽取 在原采样率下波形变密频谱变宽且幅度减半 但在新采样率下波形和频谱都很好 通过试听输出文件还可感受处理效果
基于MATLAB 的数字滤波實验
基孑MATLAB的数字滤波器设计
南昌市科学器材公司 甘震
基于Matlab的音频文件数字滤波处理
基于MATLAB 的音频信号处理技术实现