基于MATLAB的数据采集与分析系统设计(7)

时间:2017-06-11 我要投稿

  4.3.2 数据采集

  启动设备对象,控制声卡开始采集数据,采集过程中可以向声卡发送控制命令,如暂停采集、退出采集等。采集到的数据被暂时存放在的内存中,理论上可采集的最大数据量是由计算机的内存量所决定的。同时, MATLAB能够记录采集设备的硬件属性、采集的启动时刻、采集时间、采样频率及采样通道等信息,如果采集过程中出现了错误,则出错的时刻、错误产生的来源等信息也都会被记录下来供后续工作参考。需要注意的是,执行完一次数据采集工作后应删除设备对象,将内存中的数据存储在硬盘上之后释放数据存储所占用的内存空间,以备下一次采集能有足够的内存空间存储新的数据,声音信号采集的实现程序为:

start(sound);% 启动设备对象

try

time=0;data=0;

[data,time]=getdata(sound);% 获取采样数据

catch

time=0;data=0;disp(‘A timeout occurred’);

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=8 000; \采样频率8 000 Hz

  set(AI,SampleRate.freq)

  duration=2; \采样时间2 s

  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);

clear ai;

        图5-1 采样过程中没有对麦克风讲话

       图5-2 采样过程中对麦克风讲话

基于MATLAB的数据采集与分析系统设计(7)相关推荐
最新推荐
热门推荐