4.2系统功能设计
本系统由数据采集和数据分析两大部分组成,数据采集部分是实现信号采集功能,根据用户选择的采样频率和预设的采样样本数从声卡获得用户需要的数据。数据分析部分主要实现以下功能:(1)从信号采集部分获取数据,或者从数据文件读取数据;(2)实现将采集到的声音信号数据进行频谱分析,画出频谱图以图形方式很直观地反映出信号特征;(3)保存数据,包括保存所有数据和部分数据的功能,同时保存对应的频谱数据;(4)显示声音信号数据的时域图和频谱图;(5)其他功能。根据不同的需要,还可以进行修改,以选择合适的实验方案。
4.3系统设计实现
声音信号采集功能的实现是由matlab控制计算机声卡将传感器得到的模拟信号转换为数字信号并存储在计算机中;而信号分析功能是将采集得到的数据进行时、频域分析和各项数值分析等。整个系统设计主要包括系统的硬件配置、编制程序实现数据采集、编制程序实现数据分析及系统的界面设计四部分。
4.3.1声音信号采集的硬件配置
将声卡插入计算机的pci插槽,安装好相应的驱动程序后,将声音传感器设备与声卡的模拟输入端连接起来,这就构建了声音采集的硬件设备,需要注意的是对声音传感器的选择,应选择音频专用电缆或屏蔽电缆以减小噪声信号的引入,最好能选择单向性声音传感器。在matlab的信号采集工具箱中有专门为声卡生成一个操作对象的函数,初始化该操作对象即能建立matlab与声卡的通信,并为已创建的声卡设备对象增加数据采集通道和触发方式。若缺省设置则系统采用一个数据通道、手动触发方式启动工作。进行数据采集时,根据所配置的声卡的工作特性和信号分析的设计要求,可设置相应的参数来控制声卡在数据采集时的行为,如采样频率、采样时间、预计模拟信号的输入/输出范围、采样的出发方式,采样点数据的存储等。另外需要注意的一点是采样频率是由声卡的物理特性决定的,实际应用中可以根据情况选择一个声卡支持的采样频率.matlab支持电平触发、事件触发和手动触发三种方式来启动数据采集工作。声音信号采集硬件配置的具体实现过程:
sound=analoginput(‘winsound’);%‘winsound’为声卡的驱动程序
channel=addchannel(sound,1);%添加通道为单声道
set(sound,‘samplerate’,44100);%设置采样频率为44100hz
set(sound,‘samplespertrigger’,22050);%设置采样时间为0.5s
set(sound,‘triggertype’,‘manual’);%设置触发方式为手工触发
...%其它的相关设置
4.3.2数据采集
启动设备对象,控制声卡开始采集数据,采集过程中可以向声卡发送控制命令,如暂停采集、退出采集等。采集到的数据被暂时存放在计算机的内存中,理论上可采集的最大数据量是由计算机的内存量所决定的。同时,matlab能够记录采集设备的硬件属性、采集的启动时刻、采集时间、采样频率及采样通道等信息,如果采集过程中出现了错误,则出错的时刻、错误产生的来源等信息也都会被记录下来供后续工作参考。需要注意的是,执行完一次数据采集工作后应删除设备对象,将内存中的数据存储在硬盘上之后释放数据存储所占用的内存空间,以备下一次采集能有足够的内存空间存储新的数据,声音信号采集的实现程序为:
start(sound);%启动设备对象
try
time=0;data=0;
[data,time]=getdata(sound);%获取采样数据
catch
time=0;data=0;disp(‘atimeoutoccurred’);
end
stop(sound);%停止设备对象
delete(sound);%删除设备对象
4.3.3数据分析
在设计该部分时,不仅要求实现能从数据采集部分直接获取数据,还需实现能从文件中读取以前所保持好的数据。之后,用户可以根据实际研究的需要,在matlab中调用频谱分析函数(periodogram等)、功率谱分析函数(psd等)或数值分析函数(fminbnd等),就可以将采集到的声音信号分别进行频谱、功率谱分析等多种谱分析,并且可方便地将分析结果以图形的形式显示出来,如图4-2所示。在研究蛋壳破损自动检测过程中,通过对所采集的蛋壳声音信号进行频谱分析,找出区分损壳蛋与好壳蛋的特征变量,从而实现蛋壳破损的自动检测。对所采集的声音信号进行频谱分析的程序为:
...%获取采样数据
px=abs(fft(data,512))2/512;%对所采集的数据进行傅立叶变换
px=px(1:256);
s=60+10*log10(px);
...%其它功能
图4-2声音信号的采集与频谱分析
4.3.4系统界面设计
利用matlab软件中gui模块进行设计,在matlab中可以方便地设计出基于对话框的图形用户界面,它提供了诸如编辑框、按钮、滚动条等图形对象,通过对这些图形对象的有机组合,再对相应的图形对象编写程序,就可以设计出界面友好、操作方便的系统软件。图4-2所示为声音信号采集与频谱分析系统的运行界面,还可再根据实际需要进行扩展。
建立基于声卡和matlab的信号采集与分析系统,能够实现信号采集、设备控制、数据分析以及结果显示等功能。实践证明该系统具有精度高、实时性好、性价比高、人机界面友好、升级修改简单等优点。在进行项目研究过程中,常常需要进行多次实验,采集大量的数据,并且要求对数据能实时地进行分析处理,该系统能很好地满足这种研究需要。此外,这一系统还可以扩展应用到其他相关的领域中,如在语音识别工作中可以用该系统采集语音信号并且加入语音处理的相关分析等。因此,该系统不仅具有良好的实用性,还可为其他的相关研究提供理论和应用基础。
语音信号分析处理系统一般由声电传感器(麦克风)、数据采集卡、处理器(计算机)、软件系统等几部分组成。商品数据采集卡(a/d板)都包含了完整的数据采集电路和计算机接口电路,并同时提供驱动程序,产品和种类繁多,性能价格各异,价格一般都比较贵。pc机的声卡本身就是一个廉价同时又非常优秀的语音信号采集系统,它采用直接内存读取方式传输数据,极大地降低了cpu的占用率;不仅如此,声卡16位的a/d转换精度比普通16位a/d卡要高,能够满足语音信号采集分析要求。
5应用设计
一、对声卡产生的模拟输入对象(ai)进行操作
声卡是matlab数据采集工具箱所支持的一种硬件,用声卡完成一个简单的数据采集过程,麦克风就成了数据采集系统中的传感器.
1)创建设备对象,这里创建的是一个声卡ai设备对象,硬件设备标示符为2.
ai=analoginput(‘winsound’,2);
2)给设备对象添加通道,这里添加1个通道.
addchannel(ai,1);
3)设定设备属性值,控制数据采集.
freq=8000;\采样频率8000hz
set(ai,samplerate.freq)
duration=2;\采样时间2s
set(ai,samplespertrigger,duration*freq);
4)数据采集及结果处理.在这里首先将所采集到的数据进行快速傅立叶变换,然后转化成分贝,并显示结果的实数部分.
start(ai);
data=getdata(ai);
fftdata=abs(fft(data));
mag=20*logl0(fftdata);
mag=mag(1:end/2);
5)清除内存中的设备对象.
delete(ai);
clearai;
图5-1采样过程中没有对麦克风讲话
图5-2采样过程中对麦克风讲话
结果分析:图5-1是在采样过程中打开麦克风,但是没有对麦克风讲话的结果(对不同品牌、质量的声卡,结果可能有所不同),图5-2是在采样的过程中对麦克风讲话的结果.可以看出,讲话与否(传感器感受端的变化)改变了所采集到的数据的结果.