MATLAB和计算机声卡的模拟
2014-10-22戴熙
戴熙
摘 要:本设计采用MATLAB中数据采集工具箱(Data Acquisition Toolbox)来实现,数据采集工具箱包括三个模块分别为: M-File 函式集,数据采集引擎(Data Acquisition Engine),和硬件转接驱动程序(Hardware Driver Adaptors),因此,在MATLAB里直接调用函数可以直接控制和计算机声卡进行其数据采集,然后再将采集到的声音信号分别进行数据处理和分析,最终将处理完的数据保存在文件中并以图形的形式呈现在用户面前。
关键词:MATLAB 数据采集工具箱 声卡 信号采集转换
中图分类号:TP37 文献标识码:A 文章编号:1672-3791(2014)07(c)-0022-03
1 系统设计实现
声音信号采集是通过MATLAB数据采集工具箱来实现对计算机声卡的控制并将转换传声器得到的模拟信号为能够储存在计算机的数字信号;信号分析就是分析被采集数据的时、频域以及其它各项数值等,其中时域分析包括(信号还原,自相关分析,互相关分析)频域分析包括(FFT变换,幅值谱,相位谱,功率谱,幅值谱密度,功率谱密度)等。整个系统实施设计主要是包括系统的硬件配置,数据采集,数据分析及系统的界面设计四部分。
1.1 声音信号采集的硬件配置
一个被测量的及时数据采集环境,将会直接进入MATLAB进行分析而不需要转换,所以在第一步通过MATLAB和声卡之间的联系之后采集的声音信号,将会通过MATLAB的数据采集工具箱中的函数(analoginput)语句,使用该语句来建立MATLAB和声卡之间的通信,并为已经创建的声卡增加数据采集通道和触发方式。进行数据采集时,根据所配置声卡的型号与配置,可设置不同的参数来控制声卡的数据采集行动。另外需要注意的是采样频率是由其声卡所决定的,人的听觉器官能感知的频率约为20 Hz~20 kHz,而人的听觉器官能感知的声音幅度约为0~130 DB,因此在实际当中可以根据实际情况来选择声卡支持的采样频率和强度范围,然后根据不同硬件而产生不同的指令。模拟输入(AI),模拟输出(AO),数字输出入(DIO)和同步模拟输出入转换等等各项功能。
(1)通过MATLAB中的数据采集工具箱中的函数功能,便能实现声音信号采集的硬件配置。首先,MATLAB将会把声卡作为一个设备对象进行处理,然后直接调用MATLAB认定对象来操作而不是直接调用此硬件。由于使用声卡来采集数据使用的信号是模拟信号,需转换成数字信号,这时MATLAB强大的功能就体现出来了,直接使用analoginput语句,此语句是专门用于建立模拟信号输入,其语句为:
AI=analoginput(‘adaptor)
或者AI=analoginput(‘adaptor,ID)
其中,adaptor是硬件设备的名称,MATLAB所支持的硬件设备很多(包括多媒体声卡,美国国家仪器E系列和1200系列接口板,Hewlett-Packard-VXIE1432系列接口板等等)。ID则是该硬件设备的标识,由于对本系统而言是用计算机的声卡作为硬件采集设备,因此不需要用到硬件ID,直接用AI=analoginput(‘winsound)语句:就可以使MATLAB在其计算机的硬件中直接找到声卡,并创建一个模拟信号的采集目标。
但这个模拟信号的采集目标被创建之后,为了充分的利用计算机硬件的性能,提高传输的效率,快捷方便的达到控制硬件设备的目的,此时需要让计算机直接控制硬件信号通道来用于此模拟信号数据的传输,这时就用到MATLAB中的addchannel语句。其语法一般为以下格式:
chan=addchannel(obj,hwch)
其中,obj是模拟输入或输出的目标,此时用(AI)为模拟输入,用(AO)为模拟输出;hwch是计算机设备中的ID的数量。此系统指定hwch为1。以下此语句是MATLAB中用于创建数据传输通道的:
chan=addchannel (AI, 1)
(2)在完成创建数据传输通道之后,还需设置其数据的采样频率和采样时间以及采样点数,可以由以下语句完成:
duration=2;
Fs=8000;
Blocksize=duration*Fs;
设置完采样频率和采样时间以及采样点数之后,还将利用MATLAB中的set语句对它们进行赋值,以便于以后的用户对其进行配置和修改。其语法格式为:
set(object,‘property,value);
在该系统中,object为AI,property为SampleRate, 而value取为8000。即:
set (AI,‘SampleRate,8000 );
当设置采样点数时,object为AI,property为SamplesPerTrigger,而value为duration*ActualRate。即:
set(AI,‘SamplesPerTrigger,duration*ActualRate);而后则可以使用get语句将设定好的值传送给变量,其基本语法格式为:
get (ob,‘PropertyName)
其中ob为目标名称,在此系统中也是用模拟输入AI表示,PropertyName为数值来源名称,在这里为SampleRate和Samples PerTrigger。即:
ActualRate= get (AI,‘SampleRare);
blocksize=get(AI,‘SamplesPerTrigger);endprint
所以该部分的全部语句为:
duration=2; %设定采样时间(单位:s)
set(AI,‘SampleRare,8000);%采样频率设置为8kHz
ActualRate= get (AI,‘SampleRate);
set (AI,‘SamplesPerTrigger, duration*ActualRate);
blocksize=get(AI,‘SamplesPer Trigger);%设置数据块大小(也就是采样点数)
Fs=AcrualRate;
(3)根据其系统的触发来源和条件来设置触发方式。在MATLAB中当中,Manual为手动触发;Immediate为自动触发;;Hardware为硬件触发,Software为软件触发。如果用户想自己控制其数据采集的运作,并随时监控数据采集的时间,最好的方式就是采用手动触发方式,,其MATLAB语句如下:
set (AI,‘ TriggerType,‘Manual);
1.2 数据采集
(1)开始采集数据,当数据采集结束时, ai会自动停止数据采集并传回数据。首先要先完成声卡的数据采集参数设置,之后才能启动该设备进行数据采集。其语句格式为:
start (AI);
trigger (AI);
data=getdata (AI);
由于该声卡当设置为自动触发方式时,start命令将立刻自动触发声卡,对其输入信号进行数据采集;而本系统采用的是人工触发方式,因此必须使用trigger(AI)命令来人工触发启动声卡对输入信号的数据采集。
(2)当所有数据采集完成后,清除宣告的对象变量,当使用者不再需要使用ai装置对象变量时,使用者必需清除并释放ai所占用的内存,停止并删除该声卡设备,使用如下命令:
stop (AI);
delete (AI);
clear(AI);
其中,stop命令将停止其声卡设备运行;delete命令将从系统中删除声卡设备,clear命令清除并释放AI所占用的内存。由于系统不会自动清除这次使用的设置,因此在退出数据采集任务之前,先执行以上语句,删除声卡设备和清除内存;这样就不会在下一次启动数据采集任务的时候该系统就发出声卡设备在使用中的错误信息。
1.3 数据分析与处理
本系统在数据采集完成后将会进行数据分析与处理,由于MATLAB中的数据采集工具箱具有非常完整的功能,因此本系统不仅能从数据采集部分中直接获取数据,还能利用命令此文件中读取以前的数据。因此用户可以根据不同的需求调用不同的命令,把可将采集到的声音信号分别进行时域分析和频域分析,然后将分析结果以图形界面的形式显示出来,以便用户使用。
(1)绘制此采集数据的时域和频谱波形。MATLAB中,数据可视化的最基本形式是绘制二维图形,其中最核心也是最基本的函数是绘制二维平面图函数plot(),其他许多特殊的图形绘制函数都是以它为基础而形成的,PLOT()绘制线性二维图时,在线条多于一条时,若用户没有指定使用颜色,则PLOT循环使用当前坐标轴的颜色顺序属性所定义的颜色进行区分。如果是绘制三维图时则需用到plot3(x,y,z),mesh(x,y,z),surf(x,y,z)等等函数命令。①绘制时域波形。绘制时域波形可使用plot(y)命令,如果y是向量,plot将以该向量的索引为横坐标值,以向量元素的值为纵坐标绘制一条连续曲线。下面是时域波形的绘制程序:axes(handles.time_axes2);%来确立该图在界面上的位置;plot(data);%绘制时域波形;grid On;%加坐标网格;ylabel(‘voltage(V));%Y轴名称为voltage(V)。②绘制频谱波形。如要绘制频谱波形,可使用命令plot(X,y),而X,Y是同维矩阵时,则以x和y对应列元素为横,纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
傅立叶变换是数字信号处理领域一种很重要的算法,因此在数据处理时先进行快速傅里叶变换,所谓傅立叶变换,也称作傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合,即变换域反映了信号包含的频率内容。MATLAB提供函数daqdocfft来实现这个功能,其格式为:
[f,mag]=daqdocfft(data,Fs,blocksize);
其中data是采集到的数据;Fs为采样频率;blocksize为采样点数。
为了让用户能更直观的观察本系统的频谱波形,最好在画图的时候增加网格线,其画图时增加网格线就需用到grid on命令,下面是绘制频谱波形的程序:
[f,mag]=daqdocfft(data,Fs,blocksize);%进行FFT(快速傅立叶变换)
axes (handles.frequency_axes1);%确立该图在界面上的位置
plot(f,mag);%绘制频谱图
grid on;%加坐标网格
ylabel(‘magnitude(dB));%Y轴名称为magnitude(dB)
xlabel(‘frequency (Hz));%X名称为frequency(Hz)
(2)数据处理完毕后需保存数据。MATLAB中的数据保存是通过用户界面将处理完毕的数据打包成文件然后在进行保存。其格式为:
save(‘wave,‘data);save Fs;save blocksize;endprint
(3)声音回放。通过使用MATLAB的功能函数,将从扬声器输入到声卡的A/D转化器上采集到的声音信号再通过声卡上的D/A转换器输出到扬声器。
AO=analogoutput('winsound'); %创建模拟输出对象AO
chan=addchannel(AO,1); %创建数据传输通道
duration=2; %设置采样时间
set(AO,'SampleRate',8000); %设置采样频率
ActualRate=get(AO,'SampleRate'); %获取采样频率到ActualRate
len=duration*ActualRate; %设置采样点数
putdata(AO,data); %调用putdata函数将数据排列到对象AO
set(AO,'TriggerType','Manual'); %设置为手动触发方式
start(AO); %开始设备对象
trigger(AO); %命令人工触发声卡
waittilstop(AO,5); %在清除工作空间前,确保AO已停止运行
stop(AO); %停止设备对象
delete(AO); %删除设备对象
2 结论
声卡是采用16位的A/D转换器,它的分辨率高,且A/D转换的工作时间较短,采样频率可以高达44 kHz。图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的用户操作界面。MATLAB通过图形用户界面直观的将数据展现给用户,从而实现人机交互的功能。
MATLAB本身的功能非常强大,函数多,而且并不复杂,只能充分的利用其强大的功能,才能最大程度达到方便实用的目的。因此设计MATLAB和计算机声卡的模拟-数字转换器,便非常容易的实现硬件设备的配置与控制,数据信号的采集,数据信号分析与处理,用户界面的显示,等各种功能。其不断的实践也证明该系统稳定,可靠,简单实用而且具有极高的性价比,利用MATLAB整合并进行实时的数据存取和实时的分析,使用数据采集工具箱再加上一片可以在工具箱内使用的数据采集卡可以作为有需要作数据采集的工程师必备的工具。
参考文献
[1] 董华,易克初.一种基于声卡的数据采集系统[J].山西电子技术,2006.
[2] 陈家焱,陈冬娇,张达响.基于Matlab的声音信号采集与分析处理[J].计算机与现代化.2005(6):91-92.
[3] 陈桂明,张明照,戚红雨.应用MATLAB语言处理数字信号与数字图像[M].北京:科学出版社,2001.
[4] 付俊庆,李风铃.MATLAB环境下的实时数据采集方法[J].测控技术,2006,23(1):30-32.
[5] 邹光辉,田川.关于语音信号处理技术及应用的研究[J].中国科技信息,2007,(1):8.
[6] (美)亨塞尔曼(Hanselman).精通MATLAB7.0[J].2006.
[7] 伯晓晨.MATLAB工具箱应用指南[M].北京:电子工业出版社,2003.
[8] 车子萍.基于Matlab的虚拟信号发生器设计[J].电脑学习,2010(1):3-4.endprint
(3)声音回放。通过使用MATLAB的功能函数,将从扬声器输入到声卡的A/D转化器上采集到的声音信号再通过声卡上的D/A转换器输出到扬声器。
AO=analogoutput('winsound'); %创建模拟输出对象AO
chan=addchannel(AO,1); %创建数据传输通道
duration=2; %设置采样时间
set(AO,'SampleRate',8000); %设置采样频率
ActualRate=get(AO,'SampleRate'); %获取采样频率到ActualRate
len=duration*ActualRate; %设置采样点数
putdata(AO,data); %调用putdata函数将数据排列到对象AO
set(AO,'TriggerType','Manual'); %设置为手动触发方式
start(AO); %开始设备对象
trigger(AO); %命令人工触发声卡
waittilstop(AO,5); %在清除工作空间前,确保AO已停止运行
stop(AO); %停止设备对象
delete(AO); %删除设备对象
2 结论
声卡是采用16位的A/D转换器,它的分辨率高,且A/D转换的工作时间较短,采样频率可以高达44 kHz。图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的用户操作界面。MATLAB通过图形用户界面直观的将数据展现给用户,从而实现人机交互的功能。
MATLAB本身的功能非常强大,函数多,而且并不复杂,只能充分的利用其强大的功能,才能最大程度达到方便实用的目的。因此设计MATLAB和计算机声卡的模拟-数字转换器,便非常容易的实现硬件设备的配置与控制,数据信号的采集,数据信号分析与处理,用户界面的显示,等各种功能。其不断的实践也证明该系统稳定,可靠,简单实用而且具有极高的性价比,利用MATLAB整合并进行实时的数据存取和实时的分析,使用数据采集工具箱再加上一片可以在工具箱内使用的数据采集卡可以作为有需要作数据采集的工程师必备的工具。
参考文献
[1] 董华,易克初.一种基于声卡的数据采集系统[J].山西电子技术,2006.
[2] 陈家焱,陈冬娇,张达响.基于Matlab的声音信号采集与分析处理[J].计算机与现代化.2005(6):91-92.
[3] 陈桂明,张明照,戚红雨.应用MATLAB语言处理数字信号与数字图像[M].北京:科学出版社,2001.
[4] 付俊庆,李风铃.MATLAB环境下的实时数据采集方法[J].测控技术,2006,23(1):30-32.
[5] 邹光辉,田川.关于语音信号处理技术及应用的研究[J].中国科技信息,2007,(1):8.
[6] (美)亨塞尔曼(Hanselman).精通MATLAB7.0[J].2006.
[7] 伯晓晨.MATLAB工具箱应用指南[M].北京:电子工业出版社,2003.
[8] 车子萍.基于Matlab的虚拟信号发生器设计[J].电脑学习,2010(1):3-4.endprint
(3)声音回放。通过使用MATLAB的功能函数,将从扬声器输入到声卡的A/D转化器上采集到的声音信号再通过声卡上的D/A转换器输出到扬声器。
AO=analogoutput('winsound'); %创建模拟输出对象AO
chan=addchannel(AO,1); %创建数据传输通道
duration=2; %设置采样时间
set(AO,'SampleRate',8000); %设置采样频率
ActualRate=get(AO,'SampleRate'); %获取采样频率到ActualRate
len=duration*ActualRate; %设置采样点数
putdata(AO,data); %调用putdata函数将数据排列到对象AO
set(AO,'TriggerType','Manual'); %设置为手动触发方式
start(AO); %开始设备对象
trigger(AO); %命令人工触发声卡
waittilstop(AO,5); %在清除工作空间前,确保AO已停止运行
stop(AO); %停止设备对象
delete(AO); %删除设备对象
2 结论
声卡是采用16位的A/D转换器,它的分辨率高,且A/D转换的工作时间较短,采样频率可以高达44 kHz。图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的用户操作界面。MATLAB通过图形用户界面直观的将数据展现给用户,从而实现人机交互的功能。
MATLAB本身的功能非常强大,函数多,而且并不复杂,只能充分的利用其强大的功能,才能最大程度达到方便实用的目的。因此设计MATLAB和计算机声卡的模拟-数字转换器,便非常容易的实现硬件设备的配置与控制,数据信号的采集,数据信号分析与处理,用户界面的显示,等各种功能。其不断的实践也证明该系统稳定,可靠,简单实用而且具有极高的性价比,利用MATLAB整合并进行实时的数据存取和实时的分析,使用数据采集工具箱再加上一片可以在工具箱内使用的数据采集卡可以作为有需要作数据采集的工程师必备的工具。
参考文献
[1] 董华,易克初.一种基于声卡的数据采集系统[J].山西电子技术,2006.
[2] 陈家焱,陈冬娇,张达响.基于Matlab的声音信号采集与分析处理[J].计算机与现代化.2005(6):91-92.
[3] 陈桂明,张明照,戚红雨.应用MATLAB语言处理数字信号与数字图像[M].北京:科学出版社,2001.
[4] 付俊庆,李风铃.MATLAB环境下的实时数据采集方法[J].测控技术,2006,23(1):30-32.
[5] 邹光辉,田川.关于语音信号处理技术及应用的研究[J].中国科技信息,2007,(1):8.
[6] (美)亨塞尔曼(Hanselman).精通MATLAB7.0[J].2006.
[7] 伯晓晨.MATLAB工具箱应用指南[M].北京:电子工业出版社,2003.
[8] 车子萍.基于Matlab的虚拟信号发生器设计[J].电脑学习,2010(1):3-4.endprint