当前位置:AIGC资讯 > 数据采集 > 正文

使用MATLAB对语音信号进行采集以及读写的方法

一、语音信号特点
20世纪90年代以来,语音信号采集与分析在实用化方面取得了许多实质性的研究进展。其中,语音识别逐渐由实验室走向实用化。一方面,对声学语音学统计模型的研究逐渐深入,鲁棒的语音识别、给予语音段的建模方法及隐马尔可夫模型与人工神经网络的结合成为研究的热点。另一方面,为了语音识别实用化的需要,讲者自适应、听觉模型、快速搜索识别算法以及进一步的语音模型研究等课题备受关注。
通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点:
1)在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。利用这个特点,可以用一个防混叠的带通滤波器将此范围内的语音信号频率分出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。
2)在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。

二、语音信号采集的基本原理
为了将原始模拟语音信号变为数字信号,必须经过采样和量化两个步骤,从而得到时间和幅度上均为离散的数字信号语音。采样是信号在时间上的离散化,即按照一定时间间隔△t在模拟信号x(t)上逐点采取其瞬时值。采样时必须要注意满足奈奎斯特定理,即采样频率f必须以高于受测信号的最高频率两倍以上的速度进行取样,才能正确地重建信号。
在Windows环境下,可以使用Windows自带的录音机录制语音文件,下图是基于PC的语音信号采集过程,声卡可以完成语音波形的A/D转换,获得WAV文件。通过Windows录制的语音信号,一方面可以为后续实验储备原始语音,另一方面可以与通过其他方式录制的语音进行比对,比如使用MATLAB自带的audiorecorder 函数进行录制。

三、基于MATLAB的语音信号采集与读写方法
MATLAB将声卡作为对象处理,其后的一切操作都不与硬件直接相关,而是通过对该对象的操作来作用于硬件设备(声卡)。操作时首先要对声卡产生一个模拟输入对象,并给模拟输入对象添加一个通道设置采样频率,然后就可以启动设备对象,开始采集数据,采集完成后停止对象并删除对象。常用的相关MATLAB函数包括audiorecorder、audioread、audiowrite、play、sound等。

案例、MATLAB采集语音信号,把采集到的语音信号进行播放,储存在电脑文件当中,并画出其相应的时域图,程序如下:

%语音采集与读写实验
fs=16000;                                   %采样频率
nBits = 8;
duration=2;                                %时间长度
n=duration*fs;
t=(1:n)/fs;
% fprintf('Begin by pressing any key %gseconds:\n',duration);pause;
% fprintf('recording...\n');
y=audiorecorder(fs,nBits,2);
% ymax=max(abs(y));                         %归一化
% y=y/ymax;
disp('Start speaking.')
%开始录制声音
recordblocking(y, 2);
disp('End of Recording.');

% 回放录音数据
play(y);
% 获取录音数据
myRecording = getaudiodata(y);
% fprintf('Finish\n');
% fprintf('Press any key to play audio:\n');pause;
file_name=strcat('mask.wav');
audiowrite(file_name,myRecording,fs);
figure(1);
axis([0 2 -1 1]);
plot(t,myRecording);
xlabel('time/s');

ylabel('amplitude');

参考文献:语音信号处理实验教程;梁瑞宇、赵力、魏昕(编著) 

更新时间 2023-11-08