结果分析:图5-1是在采样过程中打开麦克风,但是没有对麦克风讲话的结果(对不同品牌、质量的声卡,结果可能有所不同),图5-2是在采样的过程中对麦克风讲话的结果.可以看出,讲话与否(传感器感受端的变化)改变了所采集到的数据的结果.
二、 直接利用MATLAB数据采集箱中提供的函数命令进行采集
一般的采样过程是对声卡产生的模拟输入对象(AI) 进行操作的,由于计算机配置和模拟通道的运用使得数据采集过程显得烦琐难以理解,有时还不易获得采样数据。实验过程发现一种更为简单实用的方法可以进行数据采集。在阐述之前,首先介绍一下MATLAB数据采集箱中的几条有关命令:
wavrecord : wavrecord 利用Windows 音频输入设备记录声音,其调用形式为:wavrecord (n ,fs ,ch) 。利用Windows音频输入设备记录n个音频采样, 频率为fs Hz ,通道数为ch。采样值返回到一个大小为n*ch 的矩阵中。缺省时,fs = 11025 ,ch = 1。
waveplay: waveplay 利用Windows音频输出设备播放声音,其调用形为:waveplay(y ,fs) 。以采样频率fs向Windows 音频设备发送向量信号。标准的音频采样率有:8000、11025、22050 和44100Hz。
wavread :wavread 用于读取Microsoft 的扩展名为“.wav”的声音文件。其调用形式为: y = wavread (file) 。其作用是从字符串file 所指的文件路径读取wave 文件,将读取的采样数据送到y 中。Y的取值范围: [ -1 ,1 ] 。
sound:音频信号是以向量的形式表示声音采样的。sound 函数用于将向量转换为声音,其调用形式为:sound (y ,fs) ,作用是向扬声器送出向量y 中的音频信号(采样频率为fs) 。
应用上述所讲到的MATLAB数据采集箱提供的函数进行一次简单的语音信号的采集实验。记录5 秒钟的8 位音频语音信号并回放之, 采样频率设为11025Hz。
﹥﹥fs = 11025 ; \ 设置采样频率
﹥﹥y1 = wavrecord (5*fs ,fs ,‘uint8’) ; \ 进行无语音采集
﹥﹥plot (y1) ;
﹥﹥y2 =wavrecord (5*fs ,fs ,‘uint8’) ; \ 开始采集8位语音信号,时间为5s
﹥﹥plot (y2) ;
﹥﹥wavplay(y2 ,fs) ; \ 回放所采集的语音
﹥﹥sound (y2 ,fs) ;
﹥﹥y1 =fft (y2) ; \ 做信号的fft 变换
﹥﹥plot (y2) ;
图5-3 无声音信号输入波形
图5-4 有声音信号输入波形
图5-5 声音信号傅里叶变换
图形分析:用户可以变换采样频率及采样时间,也可以不同的频率回放语音。感受不同函数在相同的频率下回放的语音信号是否一致。此例进行的是实时回放,若要事后回放则可用wavread 函数。从程序语言及实现上可看出此方法简便了许多,而且实验结果与传统方法得到的实验结果完全一致。图5-3为在采样过程中打开麦克风,但是没有对麦克风讲话的结果(对不同品牌、质量的声卡,结果可能不同) ,从图上可以看到除开始采样的极短一段时间内有个信号接收过程产生阶跃外,其余时间内波形都在很小的范围内平稳的波动。图5-4是采样过程中对麦克风讲话的结果,可以看出,讲话(传感器端接收到信号)改变了采集的数据的结果。从图5-4中看出波形发生了很大的变化,波形随声音信号的高低强弱而发生变化,可知计算机已经通过麦克风接收到了语音信号,说明信号采集工作成功。图5-5为对采集到的信号进行的快速傅立叶变换所得到的图形。