基于MATLAB的信号采集和分解方法.docx
- 文档编号:25287149
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:18
- 大小:125.14KB
基于MATLAB的信号采集和分解方法.docx
《基于MATLAB的信号采集和分解方法.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的信号采集和分解方法.docx(18页珍藏版)》请在冰豆网上搜索。
基于MATLAB的信号采集和分解方法
一种基于MATLAB的信号采集和分解方法 收藏
MATLAB是美国Mathworks公司开发的适合于工程各领域的分析设计与复杂计算的软件,该软件包括基本部分和专业扩展两大部分。
扩展部分称为工具箱,用于解决某一方面的专业问题。
文中实现的是基于数据采集工具箱和小波变换工具箱的声音信号采集和分析方法。
数据采集工具箱是一种建立在MATLAB环境下的M函数文件和MEX动态库文件的集合,包含大区域的组件:
M文件函数、数据采集引擎及硬件驱动适配器,它具有如下特点:
是一种通过使用与PC机兼容的、即插即用的数据采集设备在MATLAB环境中的架构;支持模拟信号的输入输出,据采集工具箱采集!
个通道的动态信号,然后利用以及数字信号的输入、输出,子系统还包括同步模拟输入输出的转换;支持声卡;事件驱动采集。
MATIAB数据采集工具箱被广泛的使用在工程学和科学的领域,从数据采集和分析到应用程序开发。
MATLAB环境集合了数学计算,图形化输出,和强有力的计算机程序语言。
建的接口让使用者可以从仪器、档案、和外部数据库和程序中读取数据。
另外,MATLAB应用程序还可以整合使用其它著名的计算机语言所开发出来的函式库如C、C++、FORTRAN,和Java。
下面介绍MATLAB数据采集工具箱的部结构,和外部的使用接口,熟悉数据采集工具箱的使用方法将会了解如何使用同一组指令去操作各种不同硬件的数据采集卡以进行模拟输入(AI),模拟输出(AO),数字输出入(DIO)的各种操作。
对于MATLAB的使用者而言将是一项有力的工具。
何谓MATLAB数据采集工具箱(DataAcquisitionToolbox)。
数据采集工具箱是一组M-File函式集和MEX-File等动态库所组成的,专门使用在数据采集方面的一组函式库。
它提供了以下主要的功能:
1.以相同的指令操作模拟输入(AI),模拟输出(AO),数字输出入(DIO)和同步模拟输出入转换各式功能,不会因不同硬件而产生不同的指令.
2.一个及时数据采集环境,被测量的数据不需经由转换可直接进入MATLAB直接进行分析。
3.支持主要的数据采集卡的厂商,如:
凌华,Agilent,ComputerBoards和NationalInstruments。
4.支持事件驱动(Event-driven)的数据采集。
MATLAB数据采集工具箱的部结构
数据采集工具箱包括三个模块分别为:
M-File函式集,数据采集引擎(DataAcquisitionEngine),
和硬件转接驱动程序(HardwareDriverAdaptors)。
如下图所示,
这些模块允许使用者在MATLAB和使用者的数据采集硬件之间交换数据。
数据采集工具箱的三大模块和数据流动的关系属性和事件是部沟通的方式,数据是主要传送的标的,分述如下:
属性(Propertyvalues)使用者能经由属性的改变而改变使用者的数据采集行为,经由数据采集工具箱属性的改变将会影响到硬件驱动程序的行为,使硬件的工作符合使用者的实际需要。
资料(Data)
使用者能从感应器获取数据并存放它在MATLAB,或从MATLAB输出数据到作动器。
此外使用者能在数字(1和0)和数字的输出入(DIO)之间进行数据转换。
事件(Events)
事件发生在当某个特定的情况符合之后,通常在使用者设定属性后使用者可以指定一个或更多的回呼函数(Callback
function)去处理不同的事件。
使用者能使用事件的一些方式包括预先决定相当数量的数据被采集之后立刻进行分析,或当硬件驱动程序有错误发生时显示一个错误讯息到MATLAB的工作区。
开始进行数据采集
或许最有效学习数据采集工具箱的方式为,连接使用者的硬设备然后开始使用数据采集工具箱实际的进行数据采集的工作.
实际进行如何输入或输出数据。
这个部分提供使用者一个简单的例子说明怎么从实际的硬件上采集数据(AI),又如何从MATLAB中产生数据并输出到实际的硬件(AO),另一种常见的数据采集是使用数字I/O(DIO)。
以上均为典型的数据采集例并且会对个例作说明。
使用者应该记住这些步骤并修改成为自己的数据采集应用。
注意模拟输入和模拟输出例使用一凌华DAQ2010的数据采集卡,如果使用者使用一种另外支持的硬件装置,使用者应该修改硬件转接驱动程序的名称(HardwareDriverAdaptorName.)和设备识别码(HardwareDeviceIdentifier)。
如果使用者想要所有函数的相关说明,可以参考MATLAB的函数说明。
如果使用者想要其它的属性相关说明,可以参考MATLAB的基本属性说明。
如果使用者已经安装好凌华DAQ2010的数据采集卡,安装好硬件驱动程序.就可在光盘中或是到凌华科技.凌华tech.中寻找D2K-MTLB的DAQ2000系列的硬件转接驱动程序,安装D2K-MTLB后就算完成了准备动作。
模拟输入(AI)例
这个例将会使用数据采集工具箱对真实的数据采集卡进行设定,
操作,采集数据,并以图表显示出来.,只要稍为修改设定属性值,即可使用在真实的应用中.
1.宣告一个装置对象–
宣告一个可以代表DAQ2010的模拟输入对象(ai)
ai=
analoginput('凌华',1);
2.增加输入信道(Addchannels)–
增加一个硬件信道到ai
chan=addchannel(ai,0);
3.设定属性值–
设定取样频率和触发来源和条件
set(ai,'SampleRate',2000)
set(ai,'TriggerType',
'Immediate')
set(ai,'TriggerChannel',chan)
%不一定要执行此指令因为会需要Trigger讯号
set(ai,'TriggerConditionValue',
2.0)%不一定要执行此指令因为会需要Trigger讯号
4.开始采集数据–当数据采集结束时,
ai会自动停止数据采集并传回数据.此时亦可使用图表将数据显示.
.
start(ai)
data=getdata(ai);
plot(data)
5.清除宣告的对象变量–当使用者不再需要使用ai
装置对象变量时,使用者必需清除并释放ai
所占用的存.
delete(chan)
clear
chan
delete(ai)
clearai
图二:
数据采集模拟输入(AI)例的执行结果
模拟输出(AO)例
这个例将会使用数据采集工具箱对真实的数据采集卡进行设定,
操作,输出数据,并以图表显示准备要输出的波形.,只要稍为修改设定属性值,
即可使用在真实的应用中.
1.宣告一个装置对象–
宣告一个可以代表DAQ2010的模拟输出对象(ao)
ao=analogoutput
('凌华',1);
2.增加输出通道(Addchannels)–
增加一个或二个硬件信道到ao
chan=addchannel(ao,0);%或
addchannel(ao,0:
1);
3.设定属性值–
设定更新频率
set(ao,'SampleRate',2000)
4.开始输出资料–
首先先在MATLAB产生所要输出的波形,然后可以把波形数据写入ao,
一次可以写入一个通道或是写入二个通道.
data=
10*sin(linspace(0,2*pi*10,8000)');
plot(data)
putdata(ao,
data)%或putdata(ao,[datadata])
5.清除宣告的对象变量–当使用者不再需要使用ao
装置对象变量时,使用者必需清除并释放ao
所占用的存.
stop(ao)
delete(chan)
clear
chan
delete(ao)
clearao
图三:
数据模拟输出(AO)例的输出波形
数字输出入(DIO)例
这个例将会使用数据采集工具箱对真实的数据采集卡进行数字的输出,
同时读回那些值.
1.宣告一个装置对象–
宣告一个可以代表DAQ2010的数字输出入对象(dio)
dio=digitalio
('凌华',1);
2.增加数字讯号线(Addlines)–
增加八个数字讯号线到dio,
同时将数字讯号线设定为”输出”
addline(dio,0:
7,'out');
3.读和写数值–产生一个数值的数组,
并将它送到dio装置对象,注意读和写数字讯号线通常不必再对其输出入的方向重新设定.
pval
=[11110101];
putvalue(dio,pval)
gval
=getvalue(dio);
plot(gval)
5.清除宣告的对象变量–当使用者不再需要使用dio
装置对象变量时,使用者必需清除并释放dio
所占用的存.
delete(dio)
cleardio
在此简单的介绍MATLAB数据采集工具箱的部结构和使用方法,使用此种方式在MATLAB控制数据采集卡是最直接的方式,同时可以完全和MATLAB整合并进行实时的数据存取和实时的分析,使用资料采集工具箱再加上一片可以在工具箱使用的数据采集卡是所有需要作数据采集的工程师必备的工具。
小波分析是近十几年才发展起来并迅速应用到图像处理和语音分析等众多领域的一种数学工具,属于时频分析的一种。
小波变换是一种信号的时间-尺度(时间-频域)分析方法,具有多分辨率分析的特点,在信号处理中,小波在信号(如声音信号,图像信号等)处理中得到极其广泛的应用。
小波分析是当前数学中一个迅速发展的新领域,它同时具有理论深刻和应用十分广泛的双重意义。
小波变换的概念是由法国从事石油信号处理的工程师J.Morlet在1974年首先提出的,通过物理的直观和信号处理的实际需要经验的建立了反演公式,当时未能得到数学家的认可。
正如1807年法国的热学工程师J.B.J.Fourier提出任一函数都能展开成三角函数的无穷级数的创新概念未能得到著名数学家J.L.Lagrange,P.S.Laplace以及A.M.Legendre的认可一样。
幸运的是,早在七十年代,A.Calderon表示定理的发现、Hardy空间的原子分解和无条件基的深入研究为小波变换的诞生做了理论上的准备,而且J.O.Stromberg还构造了历史上非常类似于现在的小波基;1986年著名数学家Y.Meyer偶然构造出一个真正的小波基,并与S.Mallat合作建立了构造小波基的同意方法枣多尺度分析之后,小波分析才开始蓬勃发展起来,其中比利时女数学家I.Daubechies撰写的《小波十讲(TenLecturesonWavelets)》对小波的普及起了重要的推动作用。
它与Fourier变换、窗口Fourier变换(Gabor变换)相比,这是一个时间和频率的局域变换,因而能有效的从信号中提取信息,通过伸缩和平移等运算功能对函数或信号进行多尺度细化分析(MultiscaleAnalysis),解决了Fourier变换不能解决的许多困难问题,从而小波变化被誉为“数学显微镜”,它是调和分析发展史上里程碑式的进展。
小波(Wavelet)这一术语,顾名思义,“小波”就是小的波形。
所谓“小”是指它具有衰减性;而称之为“波”则是指它的波动性,其振幅正负相间的震荡形式。
与Fourier变换相比,小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题,成为继Fourier变换以来在科学方法上的重大突破。
有人把小波变换称为“数学显微镜”。
小波分析的应用是与小波分析的理论研究紧密地结合在一起地。
现在,它已经在科技信息产业领域取得了令人瞩目的成就。
电子信息技术是六大高新技术中重要的一个领域,它的重要方面是图像和信号处理。
现今,信号处理已经成为当代科学技术工作的重要部分,信号处理的目的就是:
准确的分析、诊断、编码压缩和量化、快速传递或存储、精确地重构(或恢复)。
从数学地角度来看,信号与图像处理可以统一看作是信号处理(图像可以看作是二维信号),在小波分析地许多分析的许多应用中,都可以归结为信号处理问题。
现在,对于其性质随实践是稳定不变的信号,处理的理想工具仍然是傅立叶分析。
但是在实际应用中的绝大多数信号是非稳定的,而特别适用于非稳定信号的工具就是小波分析。
小波分析是当前应用数学和工程学科中一个迅速发展的新领域,经过近10年的探索研究,重要的数学形式化体系已经建立,理论基础更加扎实。
与Fourier变换相比,小波变换是空间(时间)和频率的局部变换,因而能有效地从信号中提取信息。
通过伸缩和平移等运算功能可对函数或信号进行多尺度的细化分析,解决了Fourier变换不能解决的许多困难问题。
小波变换联系了应用数学、物理学、计算机科学、信号与信息处理、图像处理、地震勘探等多个学科。
数学家认为,小波分析是一个新的数学分支,它是泛函分析、Fourier分析、样调分析、数值分析的完美结晶;信号和信息处理专家认为,小波分析是时间—尺度分析和多分辨分析的一种新技术,它在信号分析、语音合成、图像识别、计算机视觉、数据压缩、地震勘探、大气与海洋波分析等方面的研究都取得了有科学意义和应用价值的成果。
事实上小波分析的应用领域十分广泛,它包括:
数学领域的许多学科;信号分析、图像处理;量子力学、理论物理;军事电子对抗与武器的智能化;计算机分类与识别;音乐与语言的人工合成;医学成像与诊断;地震勘探数据处理;大型机械的故障诊断等方面;例如,在数学方面,它已用于数值分析、构造快速数值方法、曲线曲面构造、微分方程求解、控制论等。
在信号分析方面的滤波、去噪声、压缩、传递等。
在图像处理方面的图像压缩、分类、识别与诊断,去污等。
在医学成像方面的减少B超、CT、核磁共振成像的时间,提高分辨率等。
(1)小波分析用于信号与图像压缩是小波分析应用的一个重要方面。
它的特点是压缩比高,压缩速度快,压缩后能保持信号与图像的特征不变,且在传递中可以抗干扰。
基于小波分析的压缩方法很多,比较成功的有小波包最好基方法,小波域纹理模型方法,小波变换零树压缩,小波变换向量压缩等。
(2)小波在信号分析中的应用也十分广泛。
它可以用于边界的处理与滤波、时频分析、信噪分离与提取弱信号、求分形指数、信号的识别与诊断以及多尺度边缘检测等。
(3)在工程技术等方面的应用。
包括计算机视觉、计算机图形学、曲线设计、湍流、远程宇宙的研究与生物医学方面。
文中提出的简单、经济的信号采集方法是利用声卡的A/D转换工作原理和MATLAB环境下的数据采集工具箱采集2个通道的动态信号,然后利用小波变换工具箱对音频信号进行分解,观察信号的近似和细节。
1音频信号的采集方法
在音频信号处理方面,下面介绍一种简单,实用,经济的适用于中低频的信号处理方法,如图1所示。
采集时将随时间变化的力、位移、时间变化的电压信号,并将其降压处理,
图1 中低频信号采集分析图
其变化围在-1~1V之间以满足声卡的输入要求,然后就可以将两路信号直接连接到声卡的LINEIN接口上,利用MATLAB环境下数据采集工具箱(DataAcquitsition)采集声音信号,为提高声音信号的质量,可对采样频率等属性进行必要的设置。
在对声音进行录制过程中,不可避免地会夹杂一些噪音,需要通过滤波器才能过滤掉这些噪音。
实际上,数字滤波器设计是信号处理工具箱一个重要的组成部分,可以根据频谱的特点和处理信号的目的组成部分,设计出各种各样符合要求的数字滤波器。
图2 输入信号频谱图
下面以验证吉他每根弦的基本(最低)频率为例,说明信号采集的方法(在声卡的一个通道上采集了1s的声音信号)由于一根吉他琴弦的振荡频率为112Hz,配置声卡的最低采样率应为8000,甚至可以更低。
在弹响琴弦后,在之附近放置麦克风,然后用手动触发器触发信号采集文件如下,结果如图2、3所示。
图3输入信号波形图
AI=analoginput('winsound');%定义模拟输入目标AI为声卡
chan=addchannel(AI,1);%设置通道数为1
duration=1;%1s采集
set(AI,'SampleRate',8000);%设置采样率为8000Hz
ActualRate=get(AI,'SampleRate');
set(AI,'SamplePerTrigger',duration*ActualRate);%设置触发采样数量
set(AI,'TriggerType','Manual')%触发类型为手动
blocksize=get(AI,'SamplePerTrigger');%模块大小为每触发采样的大小
Fs=ActualRate;%设置频率
start(AI)
trigger(AI)%触发启动(这时要拨响吉他,并将声音传入声卡)
data=getdata(AI);
figure
(1),plot(data);
[f,mag]=daqdocfft(data,Fs,blocksize)
%[f,mag]=daqdocfft(data,Fs,blocksize)calculatestheFFTofX
%usingsamplingfrequencyFsandtheSamplesPerTrigger
%pervidedtheBLOCKSIZE
xfft=abs(fft(data));%Avoidtakingthelogof0.
index=find(xfft==0)
xfft(index)=1e-17;
mag=20*log(xfft);
mag=mag(1:
floor(blocksize/2));
f=(0:
length(mag)-1)*Fs/blocksize;
f=f(:
);
figure
(2),plot(f,mag)
gridon
[ymax,maxindex]=max(mag)
2 信号的分析
为对信号进行更细致、更深入地分析,可以利用小波分解函数对信号进行多层分解,观察信号的近似和细节A信号中低频部分代表着信号的发展趋势,在小波分析中,则对应着最大的尺度小波变换的低频系数,随着尺度的增加,时间分辨率地降低,对信号的这种发展趋势会表现得更明显。
另外,尺度分解中的低频部分随着层次的增加,含有的高频信息会随之减少A当分解到下一层次时,就有更高频率的信息被去除,则剩下的就是信号的发展趋势。
下面对采集到的信号进行尺度为的小波分解,表现声音最主要的部分是低频部分,因此一个最简单的压缩方法是利用小波分解,去掉信号的高频环境下数据采集工具部分而只保留低频部分AN文件如下
[y,Fs,NBITS]=WAVREAD('t2.wav');
figure
(1),plot(y)
wavetype=input('Pleaseinputthewavetype:
','s')
%以下进行1级分解
[a1,h1,v1,d1]=dwt2(y,wavetype);
%画出图像
figure
(2),
subplot(2,2,1);plot(a1);title('1级分解编码低频系数');axissquare;axisoff
fn=strcat('t1','-',wavetype,'1a.wav');
subplot(2,2,2);plot(h1);title('1级分解编码水平高频系数');axissquare;axisoff
fn=strcat('t1','-',wavetype,'1h.wav');
wavwrite(h1,fn)
subplot(2,2,3);plot(v1);title('1级分解编码垂直高频系数');axissquare;axisoff
fn=strcat('t1','-',wavetype,'_1v.wav');wavwrite(v1,fn)
subplot(2,2,4);plot(d1);title('1级分解编码斜线高频系数');axissquare;axisoff
fn=strcat('t1','-',wavetype,'_1d.wav');wavwrite(d1,fn)
上述的程序在MATLAB环境下运行通过,文件执行后,输出各级分解的低频系数、水平高频系数、垂直高频系数和斜线高频系数图像,以及采用haar、db1和db3小波可得到如下的信号分解测试表(其中原始文件大小为158K字节),见表1。
表1信号三级分解测试表(只列出低频部分):
分解层次 haar/字节 db1/字节 db3/字节
I级 79 79 237
II级 40 40 158
III级 20 20 80
从表1可以看出,haar和db1小波比db3小波效果要好,在应用时,应反复实验选取小波的类型,必要时可以自己编写小波函数。
本文中结合应用MATLAB环境下数据采集工具箱、信号处理工具箱和小波工具箱采集和分析信号处理工具箱和小波工具箱采集和分析信号的方法,试验结果表明,进行信号分析具有简单易行,分析结果可靠的特点因此,充分利用好这个有效的分析工具,必将为有效地进行信号分析提供技术帮助。
目录:
C-MEX程序编写学习笔记
1MEX文件简介
在MATLAB中可调用的C或Fortran语言程序称为MEX文件。
MATLAB可以直接把MEX文件视为它的建函数进行调用。
MEX文件是动态的子例程,MATLAB解释器可以自动载入并执行它。
MEX文件主要有以下用途:
1.对于大量现有的C或者Fortran程序可以无须改写成MATLAB专用的M文件格式而在MATLAB中执行。
2.对于那些MATLAB运算速度过慢的算法,可以用C或者Frotran语言编写以提高效率。
2一个ME
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 信号 采集 分解 方法