简介及运行效果图
本文介绍利用Matlab对.wav文件的语音信号读取和频谱分析,包括读取wav音频文件、选择声道、调整采样率输出.wav文件和绘制频谱图。
正文
1、Matlab读取.wav文件
wav文件是常见的音频文件格式之一。同时Matlab提供了一套简洁的工具来读取和处理wav文件,通过 audioread 函数快速读取wav文件,获取音频数据和采样率。这个函数不仅能够加载音频数据,还能保留许多重要的音频属性,比如声道信息和采样率等。
[y,Fs] = audioread(filename) 从名为 filename 的文件中读取数据,并返回样本数据 y 以及该数据的采样率 Fs。
▪️y- 文件中的音频数据,返回为 m×n 矩阵,其中 m 是读取的音频样本数,n 是文件中的音频通道数。y 是 single 或
double,BitsPerSample 是 32 或 64,y 中的值可能会超过 −1.0 或 +1.0。
▪️Fs- 音频数据 y 的采样率(以赫兹为单位),返回为正标量。
% 读取.wav文件[signal,fs]=audioread('ringing.wav');
2、判断读取.wav文件的音频通道数
signal 变量将包含音频数据,而 fs 变量则包含音频的采样率。使用 size 函数检查 signal 的第二个维度来确定是否为单声道。
% 读取.wav文件[signal,fs]=audioread('ringing.wav');% 判断音频通道数ifsize(signal,2)==1% 音频为单声道disp('音频为单声道');else% 可能是立体声或其他多声道音频disp('音频为多声道');end
3、绘制.wav文件声道波形图
% 读取.wav文件[signal,fs]=audioread('ringing.wav');% 绘制声道信号波形图t=(0:length(signal)-1)/fs;% 时间向量plot(t,signal);title('声道信号波形');xlabel('时间 (秒)');ylabel('振幅');
4、分别绘制.wav文件左右两个声道波形图
通过 subplot 函数可在同一图形窗口绘制两个声道波形图。这种分开的波形分析直观的识别立体声效果的差异。
% 读取.wav文件[signal,fs]=audioread('ringing.wav');% 判断音频通道数ifsize(signal,2)==1% 音频为单声道disp('音频为单声道');else% 可能是立体声或其他多声道音频disp('音频为多声道');% 分离左右声道leftChannel=signal(:,1);rightChannel=signal(:,2);% 绘制左右声道波形图t=(0:length(leftChannel)-1)/fs;% 时间向量subplot(2,1,1);plot(t,leftChannel);title('左声道信号波形');xlabel('时间 (秒)');ylabel('振幅');subplot(2,1,2);plot(t,rightChannel);title('右声道信号波形');xlabel('时间 (秒)');ylabel('振幅');end
5、采样率调整并输出新的.wav文件
Matlab提供一些内置函数和工具用于对采样率的调整,原ringing.wav采样率为44100,设置输出采样率8192后保存的DST.wav播放时,由于采样间隔过大导致音质粗糙低沉
% 读取WAV文件[signal,fs]=audioread('ringing.wav');% 设置目标采样率targetFs=8192;% 使用resample函数进行重采样resampledAudio=resample(signal,targetFs,fs);% 写入新采样率的音频文件audiowrite('DST.wav',resampledAudio,targetFs);关注
笔者 - 东旭