当前位置:文档之家› MATLAB数据输入和输出 C语言转换

MATLAB数据输入和输出 C语言转换

数据输入和输出一、概述MATLAB可读和写的文件格式:文件格式文件内容扩展名读、写文件的函数MATLAB 保存的MA TLAB工作区.mat load,save文本Text 任意textscan,textread 限定文本任意dlmread,dlmwrite 逗号分隔的数值.csv csvread,csvwriteXML XML-格式文本t .xml xmlread,xmlwriteAudio NeXT/SUN sound .au auread,auwrite Microsoft WA VE sound .mav mavread,mavwriteMovie Audio/video .avi avireadScientific data Data in Common Data Format .cdf cdfread,cdfwrite Flexible Image Transport system data .fits fitsreadData in Hierarchical Data Format .hdf hdfreadSpreadsheet Excel worksheet .xls xlsread,xlswrite Lotus 123 worksheet .wk1 wk1read,wk1writeGraphics TIFF/PNG/HDF/BMP/JPEG imageGIF/PCX/XWD/Cursor/Icon image.tiff .png .hdf .bmp .jpeg.gif .pcx .xwd .cur .icoimread,imwrite二、使用输入向导(Import Wizard)从菜单File->Import Data打开Import Wizard;或者命令窗口输入函数uiimport。

从剪贴板开始Import Wizard:Edit->Paste to workspace。

三、保存和加载MAT文件MAT文件是双精度、二进制、MATLAB格式的文件。

输出到MA T文件:save filename [var1 var2 …] [str*];可以通过[var1 var2 …]选择性保存变量;也可以使用通配符“*”。

查看MAT文件中的变量:whos –file 文件名。

存放结构数组的某个字段:加上“-struct”选项。

在已经存在的MAT文件上添加数据:-append选项。

禁止压缩和Unicode字符编码文件,在save语句中加入“-v6”或者File->Preferences-> General->MA T-Files->MAT-File save options->Ensure backward compatibility(-v6)。

save语句默认为数据压缩。

选择输出格式:“-ascii”、“-tabs”、“-double”“-v4”。

从MA T文件输入数据:load函数。

四、输入文本数据各种输入函数的数据定界符:csvread 仅逗号dlmread 任何字符(可指定)fscanf 任何字符load 仅空格textread 任何字符textscan 任何字符详见:doc 函数名。

textscan和textread性能比较:前者有更好的性能,特别是读大文件时;使用前者首先要打开文件,最后要关闭文件,可从文件任意位置读;前者只输出一个单元数组,不必给每个被读字段指定一个输出参数;前者有更多的数据转换选项和更多的用户设置选项。

五、输出文本数据ASCII数据输出函数的特点:csvwrite 仅逗号dlmwrite 任何字符(可指定)fprintf 任何字符diary 仅空格save Tab或空格六、输入/输出标准图像文件imfinfo 得到有关图像的信息imread 输入图像数据imwrite 输出图像数据imshow、imview 显示图像七、输入/输出音频和视频数据aufinfo 返回描述声音文件信息aviinfo 返回包含A VI文件信息的结构wavfinfo 返回描述声音(W A V)文件信息mmfileinfo 通用的多媒体信息函数auread 从AU文件读入音频和视频数据aviread 从A VI文件读数据wavread 从Microsoft WA VE声音文件读movie 播放录制的多帧影片audiorecorder 建立录音器对象auwrite 按AU格式输出数据wavwrite 按W A V格式输出声音数据avifile 建立avifile对象addframe 获取图像序列getframe 获取图片八、输入/输出电子表数据xlsfinfo 确定文件是否包含可读的Excel xlswrite 将一个矩阵输出到Excel电子表格xlsread 从一个Excel读入矩阵数据wk1finfo 确定一个文件是否包含Lotus WK1 wk1write 矩阵输出到Lotus表格wk1read 从Lotus 123读数据到MA TLAB九、低级文件输入/输出函数fopen 打开文件fread 读二进制数据fwrite 写二进制数据fseek 重新设置文件指针的位置ftell 得到文件指针的位置ferror 查询文件输入/输出时的错误fgetl 从文件读一行文本,丢弃换行符fgets 从文件读一行,保留换行符fscanf 从ASCII文件读数据fclose 关闭文件fprintf 转换数据并将它们输出到文件或屏幕Matlab 转换为C语言6.1版本的Matlab软件包中提供了C/C++的数学和图形库,通过其编译器支持可以将Matlab中编写的m文件转换成以C/C++代码的文件,而且可以将m文件生成dll库,甚至我们可以直接调用其中的库函数,生成并发布不必依赖Matlab的可执行文件。

通过mcc编译器生成C/C++代码,进而可以在VC或者其它编译器生成可独立执行的应用程序。

下面具体讨论如何利用Matlab编译器从m文件生成C/C++代码,并嵌入用户代码,生成运行时不需Matlab支持的应用程序。

设matsum.m文件,内容如下:function sum = matbs( a, b )% sumsum = a + b用mcc命令转换为C/C++代码,命令行参数如下生成C文件mcc -t -L C matsum.m生成C++文件mcc -t -L Cpp matsum.m生成动态链接库函数mcc -t -W lib:sum -T link:lib matsum.m注意①lib:后跟生成的库文件名不能和原m文件名相同(此处为sum),②此处只能生成C 语言方式的动态链接库。

该编译命令共生成9个文件,其中sum.lib和sum.dll是可以在C/C++应用程序中调用的动态链接库文件。

模极大值程序(似乎有错误)function [x,I] = localmax(x,rInit);%LOCALMAX Compute local maxima.% M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 05-Oct-96.% Last Revision: 25-May-2003.% Copyright 1995-2004 The MathWorks, Inc.% $Revision: 1.5.4.2 $ $Date: 2004/03/15 22:41:01 $[r,c] = size(x);if nargin==1 , rInit = r; end% Regularization of x (!?)%--------------------------regule = 1;if regule==1wav = 'sym4';lev = 5;[cfs,len] = wavedec(x(rInit,,lev,wav);x(rInit,= wrcoef('a',cfs,len,wav);endx = [zeros(r,1) diff(abs(x),1,2)];x(abs(x)<sqrt(eps)) = 0;x(x<0) = -1;x(x>0) = 1;x = [zeros(r,1) diff(x,1,2)];I = find(x==-2);x(x>-2) = 0;x(I) = 1;% Chain maxima - Eliminate "false" maxima.%-----------------------------------------ideb = rInit ; step = -1; ifin = 1;max_down = find(x(ideb,);x(ideb,max_down) = max_down;if rInit<2 , return; endfor jj = ideb닗:step:ifinmax_curr = find(x(jj,);val_max = zeros(size(max_curr));for k = 1:length(max_down)[nul,ind] = min(abs(max_curr-max_down(k)));val_max(ind) = max_down(k);endx(jj,max_curr) = val_max;max_down = max_curr(find(val_max));endEXAMPLE2wavelab802中有一个求模极大值的函数,他还牵涉到wavelab802802中的其他函数,大家可以去查。

function ro = localmaxima(P,interval)% Find all the real roots of poly. P within the real interval [a,b]a = interval(1); b= interval(2);EPS = 10^(-10);ro = roots(P);realpos = find(abs(imag(ro)) < EPS);ro = real(ro(realpos));pos = find(ro>a & ro<b);ro = ro(pos);ro = sort(ro);%% Part of WaveLab Version 802% Built Sunday, October 3, 1999 8:52:27 AM% This is Copyrighted Material% For Copying permissions see COPYING.m% Comments? e-mail wavelab@%localmax()只是用来求局部极大值,Example3function [mould]=extre_mould(s,maxvalue); %%%%%%%%%%%%%%%%%求莫极大值%%maxvalue阀值%%%、s小波变换矩阵wt=s;m=maxvalue;mycat=(abs(wt)>m);[x y]=size(wt);cc=abs((wt).*mycat);mycat=mycat.*0;for kk=1:xfor jj=1:y-1if (jj==1)if ( cc(kk,jj)> cc(kk,jj+1) )mycat(kk,jj)=1;endelseif (((cc(kk,jj)>=cc(kk,jj-1))&(cc(kk,jj)>=cc(kk,jj+1))) &((cc(kk,jj)>cc(kk,jj-1))|(cc(kk,jj)>cc(kk,jj+1))) )mycat(kk,jj)=1;endendendendmould= mycat;returnExample5function cat =cwtr(graypic,level);%水平方向变换图像,返回小波变换系数矩阵%level 小波变换尺度%%l = imread('20040521134604015.jpg');%%l = pic;%l=rgb2gray(l);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%l=graypic;level=level;if (level==0)level=2;endmycat=l;mycat=0;cat=mycat;l=double(l)+1;cof=[-1.3333333731,-1.3333333731,-1.3333333731;-0.3333333433,-0.9583333135,-1.2239583731;0 ,-0.3333333433,-0.9583333135;0 ,-0.0416666679,-0.6302083135;0 ,0 ,-0.3333333433;0 ,0 ,-0.1406250000;0 ,0 ,-0.0416666679;0 ,0 ,-0.0052083335;0 ,0 ,0 ];[x,y]=size(l);wt=zeros(x,y);kk=1 ;temp1=0;if (level==1)appe=[0,0];elseif (level==2)appe=[0,0,0,0];endappe=[0,0,0,0,0,0,0,0];endlen=2^level;for kk=1:x%s=[l(kk,appe];s=l(kk,;for i=1:ymytemp=0;%*********************************************************** if ((i-len)<2)start=1;elsestart=i-len;endif (((i+len)>y)&(y>0))stop=y-1;elsestop=i+len -1 ;endfor j=start:stopmytemp=mytemp+(s(j+1)-s(j))*cof(abs(i-j)+1,level) ; endwt(kk,i)=mytemp;endendcat=wt;%cat(x,=0;%cat(:,y)=0;return。

相关主题