利用Matlab工具箱进行数字信号处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文章编号:1673-0534(2007)01(b)-0020பைடு நூலகம்02
Matlab 的信号处理工具箱是信号算法文 件的集合, 它处理的基本对象是信号与系统, 信号处理工具箱位于目录、Toolbox\Signal 下, 利用工具箱中的文件可以实现信号变换、 滤波、滤波器设计等。在其它的环境如 Vc 下 如果能调用 Matlab 工具箱中的文件,会大大地 加快一些算法的实现,同时其可靠性也很高。
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");//取出 引擎中的数据放在所指的区域中供后续处理 …… }
function [Pxx,f]=psd(Fs,nfft,noverlap, x)
window=o,5*(1-cos(2*pi*(1:nfft)’/ (nffft+1)));//hanning 窗
d f l a g = ’n o n e ’; window=window(;) …… 假设上述代码重新存为 testwin.m,在 Matlab command 窗口下设置好环境参数运 行 mcc e testwin,则可在 Matlab\bin下生成 testwin.c,如运行 mcc p testwin 则生成 testwin.cpp. 新建一个 Vc 工程,并将上述生成的.c 文 件的头文件加入到工程中,且将#ifdef_cplus plus e x t e r n “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[]数 组
当 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 + + 编译环境和连接环境。
3利用matcom调用工具箱中的函数matcom编译m文件先将m文件按照与matcom的cpp库的对应关系翻译为cpp源代码然后用对应版本的c编译器将cpp文件编译成相应的exe或dll文件所以第一次运行要指定c编译器的路径否则无法编译指定好的编译信息就写在matcombinmatcomini文件中不过这一步按装matcom时它自动寻找编译器并将其写入matcomini文件中matcom4
绍了通过 Matlab 自带的引擎、M a t l a b 自身的编译器以及利用 M a t h T o o l s 公司的 M a t c o m 进行对工具箱函数的调用。
关键词:Matlab M- 文件 引擎 编译器 Matcom Vc++
中图分类号:T P 3 9 3
文献标识码: A
尔. 李丽, 徐明峰译. 中小企业管理概念与 案例.东北财经大学出版社,2000,11. [5] (美)曼昆著,梁小民译.经济学原理.北 京:生活. 读书. 新知三联书店. 北京大学 出版社,1999.
(上接 20 页)
dataf[j]=mccGetRealVectorElement(&f, (j+1));//相应频率存于数组dataf[]中
首先是企业对软件产品质量的控制,软 件产品的质量问题主要来自软件开发的全过 程,规范的步骤和过程是生产高质量软件的 基础。我们可以借鉴美国软件公司的方法, 实施质量管理分配置。每个项目除配备项目 开发所需角色外,还专门配备配置管理小 组、测试小组和质量保证小组以确保质量管 理的实施,从而确保软件质量的可靠性以及 可运行性。
科技咨询导报 2007 NO.02 Science and Technology Consulting Herald 利用 Matlab 工具箱进行数字信号处理
I T 技 术
李自清 ( 青海民族学院电信系 青海西宁 8 1 0 0 0 7 )
摘 要:本文详述了在 V c 环境下如何利用 M a t l a b 工具箱进行数字信号处理,全文以 M a t l a b 工具箱中功率谱密度分析函数为例,介
在这样的发展趋势下,如果国内软件企 业能加强对软件产品的质量加以重视,那 么,加强企业竞争力,抢占市场,形势会 乐观许多。
5 结语 现 在 ,“质量就是生命”已人人皆知。
但软件行业长期以来忽略软件的质量管理。 这种现状,使软件停留在手工作坊的原始劳 动阶段,阻碍了大规模软件产业的形成和发 展。随着中国加入 W T O ,中国软件行业将 面临更加激烈的竞争。入世后的中国软件企 业要想走出国门,在世界软件业占有一席之 地,就必须积极建立完善、标准的研发过程 规范同国际接轨,使我国软件企业能走上正 规化发展道路。
I T 技 术
参考文献 [1] 周枫,刘晓燕,李秀敏,李丹.软件工
程.重庆大学出版社,2001,7,1. [2] 罗杰·G.施罗德.运作管理——运作职能
中的决策.北京大学出版社,2000. [3] 杨鑫.我国软件产业发展现状和发展探讨.
2001,11. [ 4 ] 詹姆斯·C 二科林斯,威廉·C 二拉齐
1 利用Matlab引擎 M a t l a b 引擎采用客户和服务器计算方
式,在运用中,Vc 的 C 语言或 C++ 语言的程 序作为前端客户机,它向 Matlab 引擎传递命 令和数据信息,并从 Matlab 引擎接收数据信 息,它提供了下列几个函数: e n g O p e n , e n g GetArray, engPutArray, engEvaString, engOutputBuffer ,engClose与客户机进行交 互。
2 利用Matlab的编译器调用工具箱中的函 数
Matlab 编译器可将 Matlab 的 M 文件转换 为 C/C++ 源代码以产生完全脱离 Matlab 运 行环境的独立运用程序,但 Matlab 资料说明 编译器如用来建立独立运用程序,不能调用 Matlab 工具箱函数。经研究发现,工具箱中 的 M 文件可用编译器编译,以提供如 Vc 的调 用函数,但编译器只能编译一个独立的 M 文 件。如果 M 文件中又调用了其他 M 文件,可将 被调用 M 文件拷贝到调用 M 文件的相应位置, 适当改动即可用于编译。
(下转 22 页)
20
科技咨询导报 Science and Technology Consulting Herald
科技咨询导报 2007 NO.02 Science and Technology Consulting Herald
开拓市场活力的中小软件企业,依靠自身在 产品、技术和创新方面的一己之长,打出自 己的品牌,奠定市场地位的良好时机。
下面例程是在 Vc 下建一个基于对话框的 应用程序,在对话框中设置一个 Button 控件 OnMatlabEngine.,在对话框 .cpp 文件中加 入”engine.h ” 和“math.h ” 头文件, 下面给出部分程序清单。
Void CtestmatlabDlg::OnMatlabEngine (){
这样,有了产品的质量保证以及良好且 迅速的完善售后服务,自然扩大产品需求, 拓展产品市场,加强企业竞争能力。
目前国产软件在国内市场的占有率虽然 不高,但总体上市场占有率在不断上升,并 且在一些领域形成了竞争优势。如在教育软 件市场,规模达 l 0 亿元,国产软件一统天 下;在财务软件方面,国内企业占据了全国 财务软件 9 0 % 的市场份额;排版软件方面, 北大方正的电子排版系统占据了 95% 的国内 市场和 70% 的海外华文报纸市场。虽然国内 中小企业居多,约占软件企业总数的 97% 以 上,规模较小,但其发展十分迅速。
其次,软件产品的质量必须进行持续的 改进,即以超前的视野预见过程执行实施中 可能的引起要素,籍先期规范制约的各种手 段作出最大可能效果创出的预期调整,并以 相应的效果计量和评估方法相配合,以确保 实际过程以预期的低成本运作的先导式控 制。这种质量的改进主要表现在功能的完善 和增强。产品质量取决于客户的满意程度, 与满足规定需求和潜在需求的能力直接有 关,通过更快地响应顾客的需要,提供更高 质量的服务就可以达到生存的目标。
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);
下面给出利用编译器将 Matlab 工具箱中
p s d . m 文件生成可供 V c 调用的函数。 将 psd.m 文件拷贝一份至 Matlab\bin 目
录下,改写相应调用的 M 文件如 n a r g c h k . m, hanning.m 等。为使表述简明,将 psd. m 修改为如下形式,限于篇幅给出关键的几 步:
相关文档
最新文档