您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页基于声卡和MATLAB的音频信号的采集和处理 (1)

基于声卡和MATLAB的音频信号的采集和处理 (1)

来源:爱玩科技网
第33卷第3期2010年9月

长春理工大学学报(自然科学版)

JournalofChangchunUniversityofScienceandTechnology(NaturalScienceEdition)Vol.33No.3

Sep.2010

基于声卡和MATLAB的音频信号的采集和处理

陈璇1,李启海1,朱万彬2,张继勇3,鲁秀娥3

(1.长春理工大学,长春

130022;2.中国科学院

长春光学精密机械与物理研究所,长春130022;

130022)

3.吉林省文化科技研究所,长春

摘要:MATLAB是数据分析和处理功能都非常强大的工程实用软件,可以灵活地驱动声卡采集和处理音频信号。本文探讨了基于声卡和MATLAB的音频信号采集和数据处理方法,并结合古琴音板音频检测的应用实例进一步证明:利用声卡做主要硬件,MATLAB做软件进行音频信号的采集和处理不仅简单可行,而且编程处理方便,可以广泛应用于音频检测等工程领域。

关键词:声卡;MATLAB;音频信号采集;频谱分析中图分类号:TG501;TG113.24+4

文献标识码:A

文章编号:1672-9870(2010)03-0071-04

CollectingandProcessingofAudioSignalwith

MATLABandSoundcard

CHENXuan1,LIQihai1,ZHUWanbin2,ZHANGJiyong3,LUXiu'e3

(1.ChangchunUniversityofScienceandTechnology,Changchun130022;

2.ChangchunInstituteofOptics,FineMechanicsandPhysics,ChineseAcademyofSciences,Changchun130022;

3.JilinCultureandTechnologyInstitute,Changchun130022)Abstract:MATLABcandrivesoundcardtocollectandprocesstheaudiosignalsmartlywithitshugefunctionofdataanal-yzingandprocessing.ThemethodofcollectingandprocessingofaudiosignalwithsoundcardandMATLABsoftwareisdi-scussedinthispaper.Acaseofusingaudiosignaltodetectthesoundboardofancientqiniscombinedtoprovethat,thismethodhavebeenwidelyapplicatedintheengineeringfieldsforitssimplenessandconveniency.Keywords:soundcard;MATLAB;collectionofaudiosignal;analyzingoffrequency

音频是多媒体信息的一个重要组成部分,音频

信号的频率范围大约是20Hz~20kHz。音频信号的采集和处理已经广泛应用于材料无损检测、语音识别、噪声抑制等工程领域。对实时采集音频信号并进行分析处理的技术和方法进行探讨,具有一定的意义。

MATLAB是由美国Mathworks公司于1984年正式推出的一种将矩阵运算作为基础的交互式程序语言。它是一款数据分析和数据处理功能都十分强大的工程实用软件,不仅方便编程而且可以实现信号可视化[1]。目前一般的PC机声卡采样频率都达

到44.1kHz或48kHz,其16位的A/D精度比普通的16位A/D卡都要高,是性价比很高数据采集卡,完全能满足一般的音频信号的采集分析要求。将二者结合起来,利用声卡作为音频信号采集和处理的主要硬件,运用MATLAB驱动声卡进行实时采集,并利用MATLAB的数据分析处理功能可实现音频信号的特征量提取。

1音频信号的采集

DataAcquisitionToolbox是MATLAB中主要用于数据采集的工具箱,它提供了一套完整的工具

收稿日期:2010-05-26

基金项目:文化部科技创新项目(27_2009)

作者简介:陈璇(1986-),女,硕士研究生,主要从事虚拟设计的研究,E-mail:chenxuan3121@163.com。

通讯作者:朱万彬(1963-),男,副研究员,硕士生导师,主要从事激光应用方向的研究,E-mail:Wanbinzhu@163.com。

72

长春理工大学学报(自然科学版)2010年

集,用于对基于PC的数据采集硬件进行控制和与

之通讯,并将采集的数据写入MATLAB工作区进行分析。DataAcquisitionToolbox通过MATLAB接口与硬件设备打交道,通过MATLAB编程来直接控制声卡进行数据采集[2]。采集方法主要有以下两种:

方法一:将声卡作为一个模拟输入对象来进行采集,分四个步骤进行:

(1)建立设备对象,进行初始化。MATLAB将声卡等设备都作对象处理,通过对对象的操作来作用于硬件设备,并同时建立起模拟信号采集的对象:

ai=analoginput('winsound');%'winsound'为声卡的驱动程序

(2)给ai对象添加采集通道,设置音频采集的属性参数:

addchannel(ai,value);%设置采集音频的通道set(ai,'SampleRate',value);%设置音频信号采集的采样频率

set(ai,'SamplesPerTrigger',value);%设置采集音频信号的长度

set(ai,'TriggerRepeat',value);%设置连续采集的次数

set(ai,'TriggerDelay',value);%设置延长的时间长短

set(ai,'TriggerType',value);%设置音频信号采集的触发方式

set(ai,'TriggerConditionValue',value);%设置音频信号采集的触发临界值

set(ai,'TimeOut',value);%设置超时等待的时间长短

在进行数据采集时,可通过以上函数按照实际实验或工作要求来节制数据采集时的行为。其中采样频率是由声卡物理特性直接决定的参数,在对其进行设置时需根据采样定理选择声卡支撑的采样频率。

(3)启动设备对象,开始采集数据:start(ai);

[data,time]=getdata(ai,ai.SamplesPerTrig-ger);%获得采样值向量

当声卡被触发后,声卡设备会自动将采集的数据存入MATLABdataEngin中,利用函数getdata即可从中提取所需数据,同时在dataEngin中删除。也可以通过save函数直接将包含数据的变量存

成MAT文件保存于计算机中,并通过调用函数load进行数据加载,从而利用MATLAB中其他工具箱的函数做进一步数据分析和处理。

(4)停止采集并清除设备对象:stop(ai);delete(ai);

方法二:直接调用wavrecord功能函数采集音频信号。wavrecord是利用windows音频输入设备录制声音,函数调用方式为:

wavrecord(n,fs,ch,dtype);

n:采样点数,决定录音长度;

fs:采样频率,为8000Hz、11025Hz、22050Hz、44100Hz之一,默认值为11025Hz;ch:样本采集通道,1为单声道,2为双声道,默认值为1;

dtype:采样数据存储格式,即每个样本的解析度。

以上两种方法皆可很好的实现对音频信号的采集。

2音频信号的处理

MATLAB具有强大的矩阵运算能力,它提供了许多可用于音频信号分析和处理的工具箱,如:系统时域辨别、系统频域辨别、数值分析和统计等。利用MATLAB分析处理音频信号的基本方法主要是对采集得到的信号进行合适的滤波处理,时域分析、频域分析、等。分析处理后如果是音频数据,还可用wavwrite转换成WAV格式文件或用soundwavplay等函数直接回放。

音频频率范围一般可以分为四个频段:低频段(30-150Hz);中低频段(30-150Hz);中低频(150-500Hz);中高频段(500-5000Hz);高频段(5000-20000Hz)。受环境噪声和信号噪声比等方面的,在对声信号采集过程中,不可避免地会产生噪声。为剔除噪声等干扰信号,一般需通过滤波器对所采集的信号进行滤波。滤除无用的干扰信号从而准确确定频率成分是信号分析中的关键。数字滤波器设计是MATLAB信号处理工具箱一个重要的组成部分。在滤波器的设计中,既可以采用直接程序设计法,也可利用MATLAB中专门的设计工具FDATOOL、SPTOOL等进行设计。数字滤波器根据其单位冲激响应函数的时域特性可分为两类:无限长单位冲激响应(IIR)数字滤波器和有限长单位冲激响应(FIR)数字滤波器。就设计方法

第3期陈璇,等:基于声卡和MATLAB的音频信号的采集和处理

73

而言,MATLAB信号处理工具箱提供了各种滤波器

设计函数和滤波器实现函数,针对IIR滤波器的设计方法主要有巴特沃斯法、切比雪夫法、椭圆滤波法,FIR滤波器设计方法有窗函数法、频率采样法和切比雪夫等波纹逼近的最优化设计方法[3,4]。具体可根据频谱的特点和处理信号的目的,设计出各种各样符合要求的数字滤波器。

音频信号在时域上只是基于时间轴上的一维数字信号,通过时域分析只能反映信号的幅值随时间的变化情况,相比之下,频域中往往包含更多的信息,所以一般常对音频信号进行频域内的研究。功率谱分析法可以反映能量在各个频率下的分布情况,应用最为广泛。功率谱分析可以分为经典谱分析与现代谱分析。经典谱分析中最简单的就是周期图法,又分为直接法与间接法。直接法是对采样信号的序列直接进行离散傅里叶变换,然后去幅值的平方;间接法先计算N点样本数据的自相关函数,然后取自相关函数的傅里叶变换。在MATLAB中可用periodogram()、psd()、pwelch()等实现经典功率谱分析。现代谱分析可以分为参数模型谱估计和非参数模型谱估计。参数模型谱估计有AR模型,MA模型,ARMA模型等;非参数模型谱估计有最小方差法和MUSIC法等[5]。在matlab中,现代谱估计的很多方法都可以实现。music方法用pmusic命令实现;pburg函数利用burg法实现功率谱估计;pyulear函数利用yule-walker算法实现功率谱估计等等。另外,sptool工具箱也具有功率谱估计的功能。窗口化的操作界面很方便,而且有多种方法可以选择。

木材的音频检测理论,通过敲击装置使古琴音板产生音频信号,并通过声音传感器将音频信号传入声卡,利用声卡的A/D转换功能将数据存入计算机,运用了MATLAB软件编制程序实现实时采集敲击古琴音板的音频信号,并对该音频信号进行滤波处理以及功率谱分析,提取该音频信号的基音频率,即古琴音板的一阶共振频率,根据木材声学振动理论,可实现对古琴音板的初步音色评估。

实验中采用PC机普通声卡,驻极体电容式传声器WM61,传声器到声卡之间是普通电线,未采取任何屏蔽措施,背景噪声控制-20dB以下。古琴音板试材为1200mmx180mmx30mm的白松,正常气干,含水率已调至平衡。

实验原理框图如图1所示。

音频信号

敲击装置

古琴音板

PC机+Matlab软件

结果显示

数据处理

卡话

图1古琴音板检测系统实验原理图

Fig.1Theschematicdiagramofexperimentalsetupofthe

detectingsystemfortheancientqin'ssoundboard

3应用实例

笔者在古琴音板的声学振动特性研究中,基于

在音频信号的采集过程中,采用人工触发方式启动,采样率为44100HZ(单通道),采样时间为3s。图2是采集音频信号的时域图,表现了音板振动发出的声音自由衰减的整个过程。截取200ms内的数据进行观察,如图3所示,可发现在瞬态激励的前40ms内,振动波形显得较为杂乱,在后40ms~140ms内,振动波形基本呈现规律,波形衰减幅度也较小。此段振动发出的声音中泛音肯定很弱,是最佳提取基音频率的阶段。图4为提取40ms~140ms时间段内的音频信号经滤波后再进行

图2古琴音板音频信号完整衰减的时域图

Fig.2

Thetimedomainchartoftheancientqin'ssoundboardaudiosignalattenuationof

图3Fig.3

200ms内古琴音板音频信号衰减的时域图

Fig.4

图4古琴音板音频

信号的频域图

Thefrequencydomainchart

soundboard

oftheaudiosignalofancientqin's

Thetimedomainchartoftheau-soundboardin200ms

diosignalattenuationofancientqin's

74

长春理工大学学报(自然科学版)2010年

频谱分析得到的频域图。图中峰值频率即古琴音板

的一阶共振频率。

以下是音频信号采集和处理的部分程序:ai=analoginput('winsound');ch=addchannel(ai,1);

------;%设置音频信号采集的属性参数start(ai);

[data,time]=getdata(ai);stop(ai);delete(ai);

plot(time,data,'b');xlabel('时间/s');ylabel('幅值/V');gridon;

timelength=0.2;

------;%截取200ms内数据;figure

plot(time,data,'b');

axis([min(time)max(time)1.1*min(data)1.1*max(data)]);

xlabel('时间/s');ylabel('幅值/V');gridon;stop(ai);delete(ai);

------;截取40ms~140ms内数据;------;%滤波处理;

------;%功率谱分析处理;figure

plot(f,F(1:length(f)),'b');xlabel('频率/HZ');ylabel('幅值归一化');

axis([5020000min(F(1:length(f))),max(F(1:length(f)))]);

set(gca,'Xscale','log','Yscale','linear');

set(gca,'Xtick',[50,100,200,500,1e+3,2e+3,5e+3,1e+4,2e+4]);

[C,I]=max(F(1:length(f)));

title(sprintf('峰值频率%fHZ',f(I)));

4结论

本文介绍了基于声卡和MATLAB的音频信号

采集和处理技术。在实际应用中根据实验的具体情况,可运用MATLAB软件对各属性参数进行修改,在不同的实验条件下根据实验效果的对比得出最佳实验方案。经实例证明该音频信号采集和处理技术实现简单,人机界面友好,性价比高。

参考文献

[1]李亚微,郭敏.基于MATLAB的音频数据采集系统[J].

电声技术,2007,31(3):57-58.

[2]付俊庆,李凤玲.MATLAB环境下的实时数据采集方法

[J].测控技术,2004,23(1):30-32.[3]姜占才,袁海良.基于声卡和MATLAB的数据采集和分

析系统[J].青海大学学报,2006,24(6):67-69.[4]常春,倪铭.基于MATLAB和声卡的虚拟仪器设计[J].自动化与仪器仪表,2005(3):23-25.[5]薛年喜.MATLAB在数字信号处理中的应用[M].北京:

清华大学出版社,2003.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务