相关论文:
Vc++下如何利用Matlab工具箱进行数字信号处理
摘要: 本文详述了在Vc环境下如何利用Matlab工具箱进行数字信号处理,全文以Matlab工具箱中功率谱密度分析函数为例,介绍了通过Matlab自带的引擎、Matlab自身的编译器以及利用MathTools公司的Matcom进行对工具箱函数的调用。
关键词:Matlab M-文件 引擎 编译器 Matcom Vc++
Matlab的信号处理工具箱是信号算法文件的集合,它处理的基本对象是信号与系统,信号处理工具箱位于目录、Toolbox\Signal下,利用工具箱中的文件可以实现信号的变换、滤波、谱估计、滤波器设计等。在其它的环境如Vc下如果能调用Matlab工具箱中的文件,会大大地加快一些算法的实现,同时其可靠性也很高。
利用Matlab引擎
Matlab引擎采用客户和服务器计算方式,在运用中,Vc的C语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数: engOpen, engGetArray, engPutArray, engEvaString,
engOutputBuffer ,engClose与客户机进行交互。
下面例程是在Vc下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine.,在对话框 .cpp文件中加入”engine.h” 和“math.h” 头文件,下面给出部分程序清单。
Void CtestmatlabDlg::OnMatlabEngine(){
Engine *ep;
mxArray* T=NULL,*result=NULL,*mFs=NULL,*mnfft= NULL;
double datax[1024];
char buffer[1024];
for(int j=0;j<1024;j++)//注:如通过采集卡采集数据可将采集的数据放在datax[]数组中,此循环就不需要
{
double samt=(double)(1.0/1024);
datax[j]=sin(2.0*63.0*samt*3.1415926+1.15*3.1415926);
}
double *pPxx,*pFxx;
if(!(ep=engOpen(" \0"))){//打开Matlab引擎,建立与本地Matlab的连接
fprintf(stderr,"\n Can't start MATLAB engine\n");
exit(-1);
}
double Fs[1]={1024};//因为Matlab所有参与运算的参数都是矩阵的形式,因而下列几行将参数转变
double nfft[1]={1024};//成Matlab可接受的矩阵形式。
T=mxCreateDoubleMatrix(1,1024,mxREAL);
mnfft=mxCreateDoubleMatrix(1,1,mxREAL);
mFs=mxCreateDoubleMatrix(1,1,mxREAL);
mxSetName(T,"T");
mxSetName(mnfft,"mnfft");
mxSetName(mFs,"mFs");
memcpy((char*)mxGetPr(T),(char*)datax, 1024*sizeof(double));
memcpy((char*)mxGetPr(mnfft),(char*)nfft, sizeof(double));
memcpy((char*)mxGetPr(mFs),(char*)Fs,1*sizeof(double));
engPutArray(ep,T); //将转化的参数放入引擎中,此时可在Matlab command窗口下查看此参数
engPutArray(ep,mnfft);
engPutArray(ep,mFs);
engEvalString(ep,"[pxx,fo]=psd(T,mnfft,mFs);"); //利用引擎执行工具箱中文件
engOutputBuffer(ep,buffer,512); //如只想看显示图形,可将返回参数去掉,psd无返回参数缺省情况下会自动画图形
result=engGetArray(ep,"pxx");//取出引擎中的数据放在所指的区域中供后续处理
pPxx=mxGetPr(result);
result=engGetArray(ep,"fo");
pFxx=mxGetPr(result);
engEvalString(ep,"plot(fo,10*log10(pxx));");//利用引擎画图
engEvalString(ep,"title('功率谱分析');");
engEvalString(ep,"xlabel('Hz');");
engEvalString(ep,"ylable('db');");
mxDestroyArray(T); //释放内存
mxDestroyArray(mFs);
mxDestroyArray(mnfft);
mxDestroyArray(result);
engEvalString(ep,"close;");
engClose(ep);
}
上述程序在Vc下编译需要将 libeng.dll和libmx.dll两个动态库利用以下的命令:
lib/def:<自己的Matlab的安装路径,下同>e:\ Matlab\extern\include\*.def /machine:ix86 /out:*.lib来生成程序所需的静态连接库libeng.lib和libmx.lib,将libeng.lib和libmx.lib所在的目录加入Vc++ project/link/object/library modules下即可。
利用Matlab自身的编译器调用工具箱中的函数
Matlab的编译器可将Matlab的M文件转换为为C或C++的源代码以产生完全脱离Matlab运行环境的独立的运用程序,但Matlab本身的资料说明编译器如用来建立独立的运用程序,不能调用Matlab工具箱中的函数,这非常不利于搞一些特殊的算法。本人研究了一段时间发现,工具箱中的函数既然是M文件就一定可以用编译器来编译,以提供如Vc的调用函数,但是编译器只能编译一个独立的M文件,即这个 M文件不依赖于其他的M文件。如果M文件中又调用了其他的M文件,可将被调用的M文件拷贝到调用M文件的相应位置,作适当的改动就可以用于编译器编译。编译器不支持图形函数,所以M文件中如有图形函数需注释掉。
当Matlab的编译器mcc加入适当的参数-e(mcc –e *.*)或-p(mcc –p *.*)就可生成将输入的M文件转换为适用于特定运用的C或C++源代码。这样如果要在Vc下编译通过,还需连入以下几个库libmmfile.dll, libmatlb.dll, libmcc.dll, libmat.dll. libmx.dll. mibut.dll 以及Matlab C MATH库,建议采用前述的方法将动态连接改为静态连接。对于C/C++编译环境的设置,在Matlab command窗口下运行mex –setup 然后依提示操作,而对于C/C++连接环境的设置,运行mbuild –setup依提示操作即可。
下面给出利用编译器将Matlab工具箱中psd.m文件生成可供Vc调用的函数。
将psd.m文件拷贝一份至Matlab\bin目录下,改写相应调用的M文件如nargchk.m, hanning.m等。为生成的代码简洁,对于采集数据处理输入参数很明了的情况下可作大量的删减,最终使psd.m成为一个不依赖于其他M文件的独立的M文件,注意千万注释掉作图代码,最终改成如下形式,限于篇幅给出关键的几步:
function [Pxx,f]=psd(Fs,nfft,noverlap,x)
window=o,5*(1-cos(2*pi*(1:nfft)’/(nffft+1)));//hanning 窗
dflag=’none’;
window=window(;)
………………………………….
以上只要稍懂Matlab语言和信号处理知识就可完成这项工作。
假设上述代码重新存为testwin.m,在Matlab command 窗口下设置好环境参数运行mcc –e testwin,则可在Matlab\bin下生成testwin.c ,如运行mcc –p testwin 则生成testwin.cpp.
Vc下建立一个基于对话框的文件,然后在对话框里加一个Button控件OnButtonPsd
将上述生成的.c文件的头文件加入到工程的.cpp中,且将#ifdef_cplusplus
extern “c”{
#end if
c代码声明加入Vc的包含文件和生成的.C的包含文件之间
将#ifdef_cplusplus
}
#end if加入.cpp文件未尾
为了简洁且便于处理将生成的c函数稍改动,给出部分代码如下:
void CTestpsdwinDlg::OnButtonPsd(){
mxArray* x_rhs_;//指向采集数据存放区
Fs=23510;//数据采集的频率 nfft=1024;//1024点的fft
double datax[1024]//采集的数据
x_rhs_mxCreateDoubleMatrix(1,1024,mxReal);
memcpy(mxGetPr(x_rhs_),datax,1024*sizeof(double));
noverlap=512;
……………….
……………….
mccCopy(&Pxx,&Spec);
mccCopy(&f,&frevgg_vector);
for(int j=0;j<(int)(nfft/2+1);j++)
{
datap[j]=mccGetRealVectorElement(&Pxx, (j+1));//功率谱密度存于datap[]数组
dataf[j]=mccGetRealVectorElement(&f, (j+1));//相应频率存于数组dataf[]中
}
mccFreeMatrix(&Pxx);
……………….
SendMessageBox(WM_PAINT,0,0);//利用Vc下的图形函数画图
Return;
}
如上生成的程序可读性不太好,而生成的c++代码则可读性较好,但千万注意只能用 Matlab的MATH库,不可用c++的MATH库,否则编译会出错,限于篇幅在此不述。
3)利用Matcom调用工具箱中的函数
Matcom编译M文件,先将M文件按照与Matcom的cpp库的对应关系翻译为cpp源代码,然后用对应版本的c编译器将cpp文件编译成相应的exe或dll文件,所以第一次运行要指定c编译器的路径,否则无法编译,指定好的编译信息就写在Matcom\bin\matcom.ini文件中,不过这一步按装matcom时,它自动寻找编译器并将其写入matcom.ini文件中,matcom4.5版中使用TeeChart3.0 OCX控件,因而它支持图形操作。
我们依然用上述的testwin.m文件,不要将图形函数注释掉,利用Mideva来生成可被Vc调用的信号处理程序。
运行Mideva在主界面上直打开M文件,在菜单中选择compile to dll,输入testwin..在Matcom debug目录下可以找到这样的几个文件,testwin.c ,testwin.h,testwin.cpp,testwin.lib,testwin.dll,testwin.exp等。
将上述testwin.cpp和testwin.h加入工程中,project/add to project/files并且在相应的文件中加入”stdafx.h”
加连接库:Tools\option\directory\ , 选include选项,加入e:\matcom45\lib (包含matcom.h)
library选项,加入e:\matcom45\lib
4) project\add to project\files 文件类型选项选(.lib)将e:\matcom45\lib\v4501.lib加入工程中编译运行。相应代码如下:
void CtestmatcomDlg::OnpsdButton(){
double datap[512],dataf[512];
initM(MATCOM_VERSION);//初始化matcom库
Mm Fs,nfft,noverlap;//创建矩阵
Mm x=zeros(1,1024);
Fs=1024;nfft=1024;noverlap=128;
dMm(Pxx_o);dMm(f_o);//创建并命名矩阵
datax[];//数据采集的数据存于此数组中
for(int i=1;i<=1024;i++)
{
x.r(1,i)=datax[i+1];//给x阵赋值
}
testwin(Fs,nfft,noverlap,x,i_o,Pxx,f_o);//matcom生成的函数
for(i=0;i<513;i++){//取出功率谱密度分析结果
dataf[i]=f_o.r(i+1,1);
datap[i]=Pxx_o.r(i+1,1);}
exitM();
return;
}
可见利用Matcom进行M文件转换非常的容易,生成的代码可读性很好,以上的转换同时生成了可供Vc调用的动态连接库,其使用和一般的动态库一样使用。同时需指明Matcom不仅可转换独立的不依赖于其它M文件的M文件,同时可转换调用其它M文件的M文件嵌套。条件是这此M文件在同一个目录下面,如前所述的psd.m可直接用上述方法转换,生成了多个重载形式的psd函数
结论: 利用Mtlab引擎调用工具箱中的函数可节省大量的系统资源,应用程序整体性能较好,但不可脱离Matlab 的环境运行。用Matlab编译器进行工具箱函数的调用,须转换相应的M文件使其成为独立的M文件,且不支持图形函数,转换的代码可读性不太好。用Matcom 进行转换非常方便,生成的代码可读性很好,支持图形函数,且代码执行的速度比不转换平均要快1.5倍以上。以上程序在Vc++ 6.0,Matlab5.2,Matcom4.5中调试通过,以上方法在工程实践中已得到很好的运用。
仅供参考,请自借鉴
希望对您有帮助
生物医学信号处理方法论文
生物医学信号处理是指据生物医学信号特点,应用信息科学的基本理论和方法,研究如何从扰和噪声淹没的观察记录中提取各种生物医学信号中所携带的信息,并对它们进步分析、解释和分类。以下是我精心准备的生物医学信号处理方法论文,大家可以参考以下内容哦!
摘 要: 生物医学信号是人体生命信息的集中体现,深入进行生物医学信号检测与处理的理论与方法的研究对于认识生命运动的规律、探索疾病预防与治疗的新方法都具有重要的意义。
关键词: 生物医学信号 信号检测 信号处理
1 概述
1。1 生物医学信号及其特点
生物医学信号是一种由复杂的生命体发出的不稳定的自然信号,属于强噪声背景下的低频微弱信号,信号本身特征、检测方式和处理技术,都不同于一般的信号。生物医学信号可以为源于一个生物系统的一类信号,这些信号通常含有与生物系统生理和结构状态相关的信息。生物医学信号种类繁多,其主要特点是:信号弱、随机性大、噪声背景比较强、频率范围一般较低,还有信号的统计特性随时间而变,而且还是非先验性的。
1。2 生物医学信号分类
按性质生物信号可分为生物电信号(Bioelectric Signals),如脑电、心电、肌电、胃电、视网膜电等;生物磁信号(Biomagnetic Signals),如心磁场、脑磁场、神经磁场;生物化学信号(Biochemical Signals),如血液的pH值、血气、呼吸气体等;生物力学信号(Biomechanical Signals),如血压、气血和消化道内压和心肌张力等;生物声学信号(Bioacoustic Signal),如心音、脉搏、心冲击等。
按来源生物医学信号可大致分为两类:(1)由生理过程自发产生的主动信号,例如心电(ECG)、脑电(EEG)、肌电(EMG)、眼电(EOG)、胃电(EGG)等电生理信号和体温、血压、脉博、呼吸等非电生信号;(2)外界施加于人体、把人体作为通道、用以进行探查的被动信号,如超声波、同位素、X射线等。
2 生物医学信号的检测及方法
生物医学信号检测是对生物体中包含的生命现象、状态、性质和成分等信息进行检测和量化的技术,涉及到人机接口技术、低噪声和抗干扰技术、信号拾取、分析与处理技术等工程领域,也依赖于生命科学研究的进展。信号检测一般需要通过以下步骤(见图1)。
①生物医学信号通过电极拾取或通过传感器转换成电信号;②放大器及预处理器进行信号放大和预处理;③经A/D转换器进行采样,将模拟信号转变为数字信号;④输入计算机;⑤通过各种数字信号处理算法进行信号分析处理,得到有意义的结果。
生物医学信号检测技术包括:(1)无创检测、微创检测、有创检测;(2)在体检测、离体检测;(3)直接检测、间接检测;(4)非接触检测、体表检测、体内检测;(5)生物电检测、生物非电量检测;(6)形态检测、功能检测;(7)处于拘束状态下的生物体检测、处于自然状态下的生物体检测;(8)透射法检测、反射法检测;(9)一维信号检测、多维信号检测;(10)遥感法检测、多维信号检测;(11)一次量检测、二次量分析检测;(12)分子级检测、细胞级检测、系统级检测。
3 生物医学信号的处理方法
生物医学信号处理是研究从扰和噪声淹没的信号中提取有用的生物医学信息的特征并作模式分类的方法。生物医学信号处理的目的是要区分正常信号与异常信号,在此基础上诊断疾病的存在。近年来随着计算机信息技术的飞速发展,对生物医学信号的处理广泛地采用了数字信号分析处理方法:如对信号时域分析的相干平均算法;对信号频域分析的快速傅立叶变换算法和各种数字滤波算法;对平稳随机信号分析的功率谱估计算法和参数模型方法;对非平稳随机信号分析的短时傅立叶变换、时频分布(维格纳分布)、小波变换、时变参数模型和自适应处理等算法;对信号的非线性处理方法如混沌与分形、人工神经网络算法等。下面介绍几种主要的处理方法。
3。1 频域分析法
信号的频域分析是采用傅立叶变换将时域信号x(t)变换为频域信号X(f),从而将时间变量转变成频率变量,帮助人们了解信号随频率的变化所表现出的特性。信号频谱X(f)描述了信号的频率结构以及在不同频率处分量成分的大小,直观地提供了从时域信号波形不易观察得到频率域信息。频域分析的'一个典型应用即是对信号进行傅立叶变换,研究信号所包含的各种频率成分,从而揭示信号的频谱、带宽,并用以指导最优滤波器的设计。
3。2 相干平均分析法
生物医学信号常被淹没在较强的噪声中,且具有很大的随机性,因此对这类信号的高效稳健提取比较困难。最常用的常规提取方法是相干平均法。相干平均(Coherent Average)主要应用于能多次重复出现的信号的提取。如果待检测的医学信号与噪声重叠在一起,信号如果可以重复出现,而噪声是随机信号,可用叠加法提高信噪比,从而提取有用的信号。这种方法不但用在诱发脑电的提取,也用在近年来发展的心电微电势(希氏束电、心室晚电位等)的提取中。
3。3 小波变换分析法
小波分析是传统傅里叶变换的继承和发展,是20世纪80年代末发展起来的一种新型的信号分析工具。目前,小波的研究受到广泛的关注,特别是在信号处理、图像处理、语音分析、模式识别、量子物理及众多非线性科学等应用领域,被认为是近年来在工具及方法上的重大突破。小波分析有许多特性:多分辨率特性,保证非常好的刻画信号的非平稳特征,如间断、尖峰、阶跃等;消失矩特性,保证了小波系数的稀疏性;紧支撑特性,保证了其良好的时频局部定位特性;对称性,保证了其相位的无损;去相关特性,保证了小波系数的弱相关性和噪声小波系数的白化性;正交性,保证了变换域的能量守恒性;所有上述特性使小波分析成为解决实际问题的一个有效的工具。小波变换在心电、脑电、脉搏波等信号的噪声去除、特征提取和自动分析识别中也已经取得了许多重要的研究成果。
3。4 人工神经网络
人工神经网络是一种模仿生物神经元结构和神经信息传递机理的信号处理方法。目前学者们提出的神经网络模型种类繁多。概括起来,其共性是由大量的简单基本单元(神经元)相互广泛联接构成的自适应非线性动态系统。其特点是:(1)并行计算,因此处理速度快;(2)分布式存贮,因此容错能力较好;(3)自适应学习(有监督的或无监督的自组织学习)。
参考文献
[1] 邢国泉,徐洪波。生物医学信号研究概况。咸宁学院学报(医学版),2006,20:459~460。
[2] 杨福生。论生物医学信号处理研究的学科发展战略。国外医学生物医学工程分册,1992,4(15):203~212。
4G通信技术的发展及应用探析论文
一、4G通信技术发展优势
1.1网络速度更快
4G网络表现出的最大优势在于其具备的无线通信速度,根据研究者预测,未来,4G通信系统中的无线传输速度可以达到10M-20Mbps,如果是起峰值的传输速度则可能达到更高的点,由此为人们应用无线网络提供了较大的便捷。
1.2网络相关频谱更宽
要想实现4G通信技术,达到更快的网线网络速度,就必须对现有的3G通信速度进行改造及升级处理,由此也就使得4G通信技术中的网络频谱宽带要超过3G通信技术,根据研究者表明,对于4G网络通信,每个信道都能够占用仅100Mhz的频谱,而这是3G通信技术无法企及的。
1.3更智能化
随着4G通信技术的推广使用,其所表现出的通信网络及终端智能化也不断升高,这不仅体现在通信终端的设计及操作智能化,同时在体现在网络设备功能的智能化,如根据用户的环境、时间及其他因素不同,可以通过网络设备终端,为用户提供个性化的服务。
1.4通信方式更多样化
4G网络支持的手机已经不再是简单的电话,其能够提供更加可靠的语音数据服务,方便人们的语音通话,而在设计及功能方面则有着更大的突破,也就是能够做成任何可以想象的形状。
二、4G通信技术的应用
2.1软件无线电技术
此种技术又被称为SDR技术,可以对现代化的数字信号技术进行有效利用,结合可编程平台,根据软件定义无线平台的功能。在软件无线电技术中,可以采用的技术包括可编程器件、信号处理技术、数字信号处理等,同时,通过应用软件无线电技术,还能够确保通信系统中各种功能的实现,如软件可编程、硬件设备重复利用等,以减少资源浪费。
2.2OFDM技术
此项技术是4G通信技术中最重要的一项技术,在无线传输中得到了广泛应用,此项技术的应用主要是将通信信道划分成多个子信道,并对子信道的子波进行调制处理,然后进行传输,从而保证信道的频率选择性,而且确保每一个子信道都能够保持平坦。通过子信道实现窄宽的传输,在此过程中能够保证信号带宽比信道带宽小,从而对信号波形之间产生的干扰起到有效的抑制作用。此外,此项技术的应用也在很大程度上客服了数据传输干扰的难题,大大提升了系统传输频率,并简化了硬件结构,有利于网络传输速度的加快。
2.3智能天线技术
此项技术又被称为自适应天线阵列,即AAA,最初,此项技术主要应用在雷达、声钠等军事领域,主要是为了实现空间滤波及定位,在此项技术体系中,通过应用空分多址技术,实现信号传输差别处理,并准确区分系统中的同频率或同码道信号,以对信号覆盖区域产生动态控制,及时将主波束转移至用户的所在方向,确保用户应用网络的可靠性及安全性。通过对信号干扰进行控制,并跟踪用户及其所处环境,能够时刻了解用户所在网络的具体情况,从而为入网用户提供质量较高的链路,以加强对干扰信号的抑制作用,并最大限度的提取可应用信号,确保用户网络的可利用性。
三、4G通信技术的发展趋势
4G通信技术的应用已经表现出了极大的优势,在未来的发展过程中,4G通信技术势必能够完全取代2G、3G通信技术,成为移动通信发展的主导型技术。首先,4G用户市场会不断扩大,实际价值也会不断升高,这主要是由于其所具备的网络优势是传统移动通信技术所不能达到的,因此,未来的4G通信技术发展必然会呈现出多频段、多模式及多业务应用的局面,而且实现完全的智能化,随之而来的是越来越广泛的.用户市场,并带来巨大的经济效益。其次,4G通信技术对于设备需求更高,作为4G通信技术发展的基础性条件,要想达到其网络传输频率,就必须建设更多的基站,以满足4G通信技术的传输需求。最后,各个运营商展开4G通信业务争夺战,由于4G通信技术表现出巨大的优势,其必然能够拥有更加庞大的用户群,而这为各大运营商带来了甜头,因此,对于4G业务的开展势必会有一番较量,而在此过程中也能够进一步完善此项技术,为用户提供更为可靠的服务。
四、结语
4G通信技术的萌芽及广泛应用不仅为人们提供了更快速的网络服务,同时不断拓展应用市场,形成更加庞大的受众群体,其在表现出光明发展前景的同时,也能够创造出更大的市场价值,为人们带来更多的经济效益,因此加强4G通信技术研究具有重要意义,这也是未来我国市场经济发展应当重视的一个版块,以实现移动通信技术的不断进步。