如何保存MATLAB示波器中的波形[小编推荐]

时间:2019-05-11 23:58:00下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《如何保存MATLAB示波器中的波形[小编推荐]》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《如何保存MATLAB示波器中的波形[小编推荐]》。

第一篇:如何保存MATLAB示波器中的波形[小编推荐]

方法一:选edit下copy figure,粘贴入word中。方法二:截图。

选择方法几要清晰一点呢?待解 A:使用示波器保存

1.首先添加一个clock时间控件,输出时间t到一个示波器里。修改该示波器参数,进入到data history,删除limit data,勾选save data to workspace,变量名t,格式array。2.仿照上面示波器参数设置,修改你所要显示的示波器。设变量名为x 3.在MATLAB主界面(或新建一个m文件)输入:plot(t,x)(ps:有时候t可能不止一列,需要选择一下,如:plot(t(:,1),x))4.整理图像,选edit下copy figure,粘贴入word中。

B:使用to workspace保存

参照上面的方法,添加to workspace控件,修改变量名,修改格式为array,最后打印输出

n16501600******.20.40.60.811.21.41.61.82 200Te150100500-50-100-15000.20.40.60.811.21.41.61.82

200Te150100500-50-100-15000.20.40.60.811.21.41.61.82 200Te150100500-50-100-15000.20.40.60.811.21.41.61.82

200Te150100500-50-100-15000.20.40.60.811.21.41.61.82

200Te150100500-50-100-15000.20.40.60.811.21.41.61.82

Scope波形图窗口的大小不同,copy到word中的图片大小就不同

第二篇:MATLAB中用plot命令画出示波器的图形总结1

MATLAB中用plot命令画出示波器的图形总结

这两天碰到一个问题是关于用MATLAB命令把示波器图形画出,经过努力总算得到解决。

看到网上有的同行问怎么改示波器的背景,把示波器波形复制到Word中,我有两种方法,第一种是我一个同学告诉我的,通过命令对示波器进行操作。

具体如下

shh = get(0,'ShowHiddenHandles');set(0,'ShowHiddenHandles','On')set(gcf,'menubar','figure')set(gcf,'CloseRequestFcn','closereq')set(gcf,'DefaultLineClipping','Off')set(0,'ShowHiddenHandles',shh)输入以上命令可以直接对示波器进行修改,包括背景和曲线颜色

第二种方法我以前总结过,现在详细说明一下

用MATLAB命令将simulink示波器的图形画出

第一步,将你的示波器的输出曲线以矩阵形式映射到MATLAB的工作空间内。

如图1所示,双击示波器后选择parameters目录下的Data history,将Save data to workspace勾上,Format选择Array,Variable name即你输入至工作空间的矩阵名称,这里我取名aa。在这之后运行一次仿真,那么你就可以在MATLAB的工作空间里看到你示波器输出曲线的矩阵aa。如图2所示。

第二步,用plot函数画出曲线

双击曲线矩阵aa,将可以看到详细情况,我这里的aa矩阵是一个1034行,3列的矩阵,观察这个矩阵即可以发现,这个矩阵的第一列是仿真时间,而由于我仿真时示波器内输出的是两条曲线,所以第二列和第三列即分别代表了这2条曲线。同时大家要注意,在simulink中我们有时往往在示波器中混合输出曲线,那么就要在示波器前加一个MUX混合模块,因此示波器内曲线映射到的工作空间的矩阵是和你的MUX的输入端数有关,如果你设置了3个MUX输入端,而实际上你只使用了2个,那么曲线矩阵仍然会有4列,并且其中一列是零,而不是3列。

理解曲线矩阵的原理之后,我们就可以用plot函数画出示波器中显示的图形了。

curve=plot(aa(:,1),aa(:,2),aa(:,1),aa(:,3),'--r')%aa(:,1)表示取aa的第一列,仿真时间 %aa(:,2)表示取aa的第二列,示波器的输入一 %aa(:,3)表示取aa的第三列,示波器的输入二 %--r表示曲线2显示的形式和颜色,这里是(red)set(curve(1),'linewidth',3)%设置曲线1的粗细 set(curve(2),'linewidth',3)%设置曲线2的粗细 legend('Fuzzy','PID')%曲线名称标注 xlabel('仿真时间(s)')%X坐标轴名称标注 ylabel('幅值')%Y轴坐标轴标注 title('Fuzzy Control VS PID')%所画图的名称 grid on %添加网格

运行上述命令后即可以看到用MATLAB命令画出的图形了,你可以在图形出来之后继续进行编辑。

将不同示波器中的曲线画在一张图上

如何将不同示波器中的曲线画在一张图上,很简单,如下命令解释 curve=plot(f1(:,1),f1(:,2),FP(:,1),FP(:,2),'r',FP(:,1),FP(:,3),'k')%f1为即示波器1输出的曲线矩阵f1,FP为示波器2输出的曲线矩阵FP 同一示波器内的仿真时间和曲线要相一致,所以f1(:,1),f1(:,2)放一起,FP(:,1),FP(:,2)放一起,不能出现f1(:,1),FP(:,2)的情况

一般示波器不能编辑图片,在命令中窗口输入以下命令即可随意操作了: shh = get(0,'ShowHiddenHandles');set(0,'ShowHiddenHandles','On')set(gcf,'menubar','figure')set(gcf,'CloseRequestFcn','closereq')set(gcf,'DefaultLineClipping','Off')set(0,'ShowHiddenHandles',shh)

出现工具菜单,轻松执行数据图片的修改、保存等。

用MATLAB命令将simulink示波器的图形画出

毕业论文答辩已经结束很长时间了,现在总结一下我在做毕业论文时的用MATLAB命令画出simulink示波器图形的一点方法,我也是MATLAB初学者,所用方法不算高明方法,并且这些方法在论坛应该都能找到,请大家见谅。第一步,将你的示波器的输出曲线以矩阵形式映射到MATLAB的工作空间内。如图1所示,双击示波器后选择parameters目录下的Data history,将Save data to workspace勾上,Format选择Array,Variable name即你输入至工作空间的矩阵名称,这里我取名aa。在这之后运行一次仿真,那么你就可以在MATLAB的工作空间里看到你示波器输出曲线的矩阵aa。如图2所示。

第二步,用plot函数画出曲线

双击曲线矩阵aa,将可以看到详细情况,我这里的aa矩阵是一个1034行,3列的矩阵,观察这个矩阵即可以发现,这个矩阵的第一列是仿真时间,而由于我仿真时示波器内输出的是两条曲线,所以第二列和第三列即分别代表了这2条曲线。同时大家要注意,在simulink中我们有时往往在示波器中混合输出曲线,那么就要在示波器前加一个MUX混合模块,因此示波器内曲线映射到的工作空间的矩阵是和你的MUX的输入端数有关,如果你设置了3个MUX输入端,而实际上你只使用了2个,那么曲线矩阵仍然会有4列,并且其中一列是零,而不是3列。

理解曲线矩阵的原理之后,我们就可以用plot函数画出示波器中显示的图形了。

curve=plot(aa(:,1),aa(:,2),aa(:,1),aa(:,3),'--r')%aa(:,1)表示取aa的第一列,仿真时间

%aa(:,2)表示取aa的第二列,示波器的输入一 %aa(:,3)表示取aa的第三列,示波器的输入二 %--r表示曲线2显示的形式和颜色,这里是(red)set(curve(1),'linewidth',3)%设置曲线1的粗细

set(curve(2),'linewidth',3)%设置曲线2的粗细 legend('Fuzzy','PID')%曲线名称标注

xlabel('仿真时间(s)')%X坐标轴名称标注 ylabel('幅值')%Y轴坐标轴标注 title('Fuzzy Control VS PID')%所画图的名称 grid on %添加网格

运行上述命令后即可以看到用MATLAB命令画出的图形了,你可以在图形出来之后继续进行编辑。

将不同示波器中的曲线画在一张图上

如何将不同示波器中的曲线画在一张图上,很简单,如下命令解释

curve=plot(f1(:,1),f1(:,2),FP(:,1),FP(:,2),'r',FP(:,1),FP(:,3),'k')%f1为即示波器1输出的曲线矩阵f1,FP为示波器2输出的曲线矩阵FP 同一示波器内的仿真时间和曲线要相一致,所以f1(:,1),f1(:,2)放一起,FP(:,1),FP(:,2)放一起,不能出现f1(:,1),FP(:,2)的情况

菜单里edit->figure properties,然后就可以选中线条设置属性了。

set(0,'ShowHiddenHandles','On')set(gca,'color','w')这样示波器背景就变为白色。

fhandle = findall(0,'type','figure','Name','Scope')set(fhandle,'Menubar','figure')

然后可以像编辑 figure 一样编辑了

方法一:打开示波器属性设置,Date history栏中,variable设置个名字,比如“u”,format设置为Array,关闭。运行模块,在命令窗口中输入命令plot(u),可得曲线,在曲线框中,edit ,copy figure,完成。

方法二:利用万用表,添加测量模块,选中plot select measurement,运行即可得到曲线,然后同上,在曲线框中,edit ,copy figure,完成。

给你一个绝杀版:p 先在示波器的属性里面,Data history页里,把save data to workspace前面的方格勾上,然后开始运行你的系统或者模型~ 然后在command windows里面输入“ plot(ScopeData.signals.time,ScopeData.signals(n).values)” 其中ScopeData.signals(n).values的意思是示波器的第几个波形,比如第二个波形,就是ScopeData.signals(n).values。当然如果你的示波器只显示一个波形,那就只要ScopeData.signals.values就OK啦~ 上面命令输入完毕后就回车,然后会跳出一个波形,你点编辑波形,就可以改它的横轴纵轴,还能加横轴纵轴标签等等,相当的好用呀~ 最后当你的波形编辑好了之后,在目录EDIT里面选择Copy Figure,然后就可以直接粘贴到任何你想粘的地方啦~(≧▽≦)/~

最后有个小补充,如果想要几个波形复合在一起,可以在“ plot(ScopeData.signals.time,ScopeData.signals(n).values)”命令结束后加个“hold on”,然后继续plot你下面要的波形,两个波形就何以画在一个坐标系里了~

最近也在弄波形,如果还有什么不清楚我们可以再一起讨论下~ 希望对你有帮助~

等scope显示出来图像以后,在MATLAB上运行 set(0,'ShowHiddenHandles','On')set(gcf,'menubar','figure')这时候你会发现scope的工具栏的上面多了一行,点击insert-axes,鼠标会变成十字形状,然后再图像的任意一处双击左键出现一个对话框PropertyEditor,选中style在窗口的右便会出现color,这时你就可以任意修改背景颜色了。

建议你最好保存数据在workspace里面,用plot的方法打印图形。不要直接复制示波器的波形。

.首先添加一个clock时间控件,输出时间t到一个示波器里。修改该示波器参数,进入到data history,删除limit data,勾选save data to workspace,变量名t,格式array。

2.仿照上面示波器参数设置,修改你所要显示的示波器。设变量名为x 3.在MATLAB主界面(或新建一个m文件)输入:plot(t,x)(ps:有时候t可能不止一列,需要选择一下,如:plot(t(:,1),x))4.整理图像,选edit下copy figure,粘贴入word中。

第三篇:MATLAB中用plot命令画出示波器的图形总结

MATLAB中用plot命令画出示波器的图形总结

这两天碰到一个问题是关于用MATLAB命令把示波器图形画出,经过努力总算得到解决。

看到网上有的同行问怎么改示波器的背景,把示波器波形复制到Word中,我有两种方法,第一种是我一个同学告诉我的,通过命令对示波器进行操作。

具体如下

shh = get(0,'ShowHiddenHandles');set(0,'ShowHiddenHandles','On')set(gcf,'menubar','figure')set(gcf,'CloseRequestFcn','closereq')set(gcf,'DefaultLineClipping','Off')set(0,'ShowHiddenHandles',shh)输入以上命令可以直接对示波器进行修改,包括背景和曲线颜色

第二种方法我以前总结过,现在详细说明一下

>> set(0,'ShowHiddenHandles','On')>> set(gcf,'menubar','figure')

用MATLAB命令将simulink示波器的图形画出

第一步,将你的示波器的输出曲线以矩阵形式映射到MATLAB的工作空间内。如图1所示,双击示波器后选择parameters目录下的Data history,将Save data to workspace勾上,Format选择Array,Variable name即你输入至工作空间的矩阵名称,这里我取名aa。在这之后运行一次仿真,那么你就可以在MATLAB的工作空间里看到你示波器输出曲线的矩阵aa。如图2所示。

第二步,用plot函数画出曲线

双击曲线矩阵aa,将可以看到详细情况,我这里的aa矩阵是一个1034行,3列的矩阵,观察这个矩阵即可以发现,这个矩阵的第一列是仿真时间,而由于我仿真时示波器内输出的是两条曲线,所以第二列和第三列即分别代表了这2条曲线。同时大家要注意,在simulink中我们有时往往在示波器中混合输出曲线,那么就要在示波器前加一个MUX混合模块,因此示波器内曲线映射到的工作空间的矩阵是和你的MUX的输入端数有关,如果你设置了3个MUX输入端,而实际上你只使用了2个,那么曲线矩阵仍然会有4列,并且其中一列是零,而不是3列。

理解曲线矩阵的原理之后,我们就可以用plot函数画出示波器中显示的图形了。

curve=plot(aa(:,1),aa(:,2),aa(:,1),aa(:,3),'--r')%aa(:,1)表示取aa的第一列,仿真时间 %aa(:,2)表示取aa的第二列,示波器的输入一 %aa(:,3)表示取aa的第三列,示波器的输入二 %--r表示曲线2显示的形式和颜色,这里是(red)set(curve(1),'linewidth',3)%设置曲线1的粗细 set(curve(2),'linewidth',3)%设置曲线2的粗细 legend('Fuzzy','PID')%曲线名称标注 xlabel('仿真时间(s)')%X坐标轴名称标注 ylabel('幅值')%Y轴坐标轴标注 title('Fuzzy Control VS PID')%所画图的名称 grid on %添加网格

运行上述命令后即可以看到用MATLAB命令画出的图形了,你可以在图形出来之后继续进行编辑。

Axis([Xmin,Xmax,Ymin,Ymax])命令可以对图形进行截取。

将不同示波器中的曲线画在一张图上

如何将不同示波器中的曲线画在一张图上,很简单,如下命令解释 curve=plot(f1(:,1),f1(:,2),FP(:,1),FP(:,2),'r',FP(:,1),FP(:,3),'k')%f1为即示波器1输出的曲线矩阵f1,FP为示波器2输出的曲线矩阵FP 同一示波器内的仿真时间和曲线要相一致,所以f1(:,1),f1(:,2)放一起,FP(:,1),FP(:,2)放一起,不能出现f1(:,1),FP(:,2)的情况

利用MATLAB命令窗口绘制Simulink仿真示波器波形的方法 最近写了一篇有关步进电机控制仿真分析的文章,需要将一部分仿真波形图贴到WORD里面去。但贴图时发现,如果直接将simulink中示波器的输出波形截图后贴到word文档中,会有很多不好解决的问题。首先是颜色问题,示波器黑色的底色让图像在打印后几乎看不出来。当然这个还好解决,只要将图片放到系统自带的画图工具中,取个反色就可以了;第二就是输出波形的线的颜色问题。示波器有默认的颜色输出顺序。当要输出多条波形时,有的颜色在取反色后,将变的非常潜,难以看清。这点相对来说不是很好解决,但好在一般前两种颜色在反色后还可以看清;第三就是输出波形的坐标非常小,而且没有对坐标所代表的参数进行标注。为此只好另找显示示波器波形的办法了。

在MATLAB里有个画图函数plot(x1,y1,'parameter1...parameterN',x2,y2,'parameter1...parameterN',.....)。这个函数在命令窗口绘图中经常使用。x是横坐标量,y代表纵坐标量,parameter可以表示曲线颜色、线性等等。问题是如何将simulink里的示波器和这个函数联系起来。双击所要输出波形的示波器,打开示波器参数选择窗口,点击“Data history”标签,将第二个参数“Save data to workspace”打勾(如下图)。可填写变量名和选择格式。变量名随便,好记就行,格式选择Structure with time。

这里顺便说一句。在仿真时经常会出现仿真结束后,示波器显示的波形只有一部分的现象,这是第一个参数“Limit data points to last”被选中的缘故。这个参数被选中,输出点数被限制,当然波形就只能显示一部分了,只不过这样可以节省内存罢了。要全部显示,只要不勾就行了。

一切选择好后,点OK退出,运行仿真。在仿真结束后,在workspace里面会出现一个和前面设定的变量名相同名字的结构体变量。该变量中主要有一个名字为signals的结构体和一个名为time的向量。在signals里面还有一个values的向量。这就是绘制新图形的数据基础。在命令窗口中输入

plot(ScopeData.time,ScopeData.signals.values,'k')这样就可以输出一个坐标清楚的图形了。但是此时的坐标没有标注坐标所代表的量的名称。此时输入xlabel('time(s)'),在X坐标下就会显示time(s)字样,输入ylabel('speed(m/s)'),在Y轴同样输出speed(m/s)字样。改变' '内的字符串,就可以改变坐标下的名字。在命令窗口输入axis([xmin xmax ymin ymax]),就可以限定输出波形的上下界。输入set(gca,'xtick',[a b c d....])可以重新标定坐标刻度,其中“a b c d...”就是重新标定后的刻度值。grid on,grid off 命令可以打开和关闭网格。

经过这些命令一处理,就可以得到非常满意的输出图形了。

第四篇:Matlab中数据结构总结

参考链接:心心水滴论坛

古木小永

主要数据结构包括数组,字符串,胞,结构体的用法,下面依次介绍 数组

1.1 数组的创建

创建数组的方法有很多,首先先讲一下如何手动去输入一个数组。比如我现在有两组数据,分别对应的是5个被试的身高以及体重,我想身高数据放在第一列,数据位178,167,170,156,182,第二列数据为体重数据,其对应为65,50,63,70,67。我们想把这两组数据存在一个变量Data上,这个时候我们只要在matlab命令框中输入 >>Data = [178,65;167,50;170,63;156,70;182,67]

 Data= 178 65 167 50 170 63 156 70 182 67

这里可以发现对于一堆数据的输入,可以先用一个中括号把所有数据括起来,一行的每个数据用逗号隔开或者可以通过空格,比如下面例子,行与行之间用分号隔开。Data2 = [1 2 3;4 5 6]  Data2= 1 2 4 5

如果每个数据都需要这样输入,那么会很麻烦,这里就提供了一些简单的方法来输入比较规整的数据。1.>>A = 1:5  A = 2 3 4 5 2.>>B = 1:2:10

 B = 3 5 7 9 可以看到如果我们想输入一列数据,并且这些数据是以等差数列的方式排布,我们就可以用a:b:c这样的形式来写,意思就是从a开始,每隔b有一个数据,然后写直到不大于c这样一组数。当然其中b可以省略,省略默认b的值为1。

1.2 数组的合并(这里要用到上面的A,B变量)

>> C = [A;B]

 C = 2 3 4 5

3 5 7 9 >>D = [A,B]  D = 2 3 4 5 1 3 5 7 9

%其中A和B都是一个数组,如果其能保证对齐,那么这些数组是可以合并的,就好像上面的两条命令。可以发现如果用分号,那么合并的情况是以列的方式合并,如果用逗号,那么是以行的方式合并,这个和手动输入数组是一致的,只不过把前面的数字当成数组来操作就可以了。

1.3 数组内部数据的取得(这里要用到前面的Data变量)

输入的方法我们有了,但我们如何来取出一个数据呢?先看看命令 >>Data(4,1) ans = 156 如何取出一行数据

>>Data(3,:) ans = 170 63

%和上面所说的一样,前面那个数代表行数,后面如果我们想取所有的数据,只需要在逗号后面写1:end就可以了,也就是第三行的对应的第一列到最后一列的数据,可以简写为一个冒号。同理比如取出第一列的数据可以写成 >>Data(1:end,1)或者 Data(:,1)

但我们有的时候不希望取出一整列的数据,而是想选出某列当中的几行数据,这个时候我们就可以发现其实数据取得前面是管行,后面是管列,并且看到1:end这个就可以联想到我们前面所演示的如何输入规整的数组。说白了这个1:end其实就是一个数组,如果是这样,我们就可以以此类推,如果我想输出第二列的第一,三,五行数据,那么命令就是 >>Data([1,3,5],2)%输出的结果我就不演示了,大家可以尝试一下。

1.4 数组内部数据的修改以及增添

同样我们可以用上面的Data变量,比如我现在发现我在Data里面有个数据是错的,比如第4行的第二个数据觉得有问题,通过查看我们原始的数据发现第四个人的体重不是70而是50,那么我们就需要修改原始的数据。如果重新输入一遍那就太蛋疼了,所以修改数据是非常关键的。有了上面的一些经验,我们来看看如何修改这个数据 >> Data(4,2)= 50  Data = 178 65 167 50 170 63 156 50 182 67

%在这里我们发现Data数据变了。如果我们想改一行数据,比如第三行数据应该是180,61,命令是

>> Data(3,:)= [180,61]  Data = 178 65 167 50 180 61 156 50 182 67

%这里要注意我们要改写一行,一列数组,那么后面的数据尺寸一定要和前面那行或者列的尺寸相同。假如我们想改这个Data的第一列的第一,三行的数据,分别改为150,160,这个时候我们输入的方法就是 >>Data([1,3],1)= [150,160]

1.5 数组的运算

>> A = 1:5; >> B = A + 5

B = 6 7 8 9 10字符串

2.1 字符串的创建

字符串的创建和数组的创建还是有一定的区别,使用单引号将所需要的字符括起来就可以(这里对比数组,数组是用中括号将数字括起来)

>>A = „hello world‟ A =

hello world %这里我们就建立了一个字符串变量,变量的内容就是hello world,同时我们可以再workspace当中查看这个变量。注意:

1.这里的单引号必须是英文字符的单引号,如果在中文输入法的情况下输入这个单引号是会出现错误的,这个事初学者经常会犯的错误。不能用双引号,会报错。

2.字符串是用单引号括起来就可以,但我们想输入单引号这这个字符,那么就要在单引号的前面再加一个单引号,比如我想生成一个字符串是 Tom‟s cat,这个时候的命令就是

>>A= „Tom‟‟s cat‟ A = Tom‟s cat

2.2 字符串的合并

数组可以实现合并,如果维数匹配,那么两个数组可以合并成一个数组,那么字符串也可以合并,其合并的方法和数组的合并一样,譬如

>>A = „hello‟;

%这里在命令的后面使用了分号,这个分号的意思就是运行这行命令,但不将结果显示出来,所以这个命令的意思就是创建一个变量名为A的字符串,并且变量A的内容是hello >>B= „world‟;

%创建字符串B >>C= [A,B]

%将A,B这两个字符串以水平方式合并起来,结果见下面 C = helloworld >>D= [A;B]

%将A,B这两个字符串以垂直方式合并起来,结果见下面 D =

hello

world

最常用的还是水平合并

2.3 字符串的使用

现在我们先创建一个字符串,比如是一个数据的文件名

>>filename = „data.txt‟;

这个时候我们只是想看看这个文件是什么类型的文件,也就是我们需要将后面三个字符取出来,而不去管其它的内容,获取的方法和数组的使用方法一致,可以使用括号来实现这个功能,譬如

>>filename(end-2:end)%这个命令的意思是取出这个字符串倒数第三至最后一个字符 ans = txt

如果我们想取出前面文件名那部分,而不想关注后面的数据类型,这时候使用方法如下

>>filename(1:end-4)

%取出字符串的第一个至倒数第五的字符 ans = data 2.4 字符串的修改

这个可以参照数组的用法,这里就不详细的解释了,如果有问题可以参考数组的用法 >>A = „helloworld‟;

%创建字符串

>>A(6:10)= „China‟

%将helloworld中的world改成China A =

helloChina 注意: 这里赋值号后面所跟的字符数量要和前面A中要修改的字符数量相同,如果不匹配的话是会出现错误的。

2.5 字符串的其它用法

数组的其中一个用法就是在数组后面的括号中加入一个逻辑变量数组,这样就可以取出逻辑数组中那个对应是true的那个位置的值,这个用法在字符串中同样适用。譬如

>>A= „helloChina‟;

>>index= A~=‟h‟

%取出helloChina 当中不是h这个字符的位置返回一个逻辑数组,这个数组的意思就是当helloChina当中不等于h的那个位置为true,否则为false index= 0 1 1 1 1 1 0 1 1 1 >>B= A(index)B =

elloCina 这个用法经常会用来去除字符串当中的空格,在这里就先注意一下。胞

好比“数组”是个容器(这里我们将字符串也当成数组看待),它可以装很多相同类型的数据。但后面经常会碰到我们希望找到一个更大的容器能装各式各样的“数组”,这个时候我们就用到了胞(cell)。

在我眼中胞就是一个能装各种各样数据类型的这么一个容器,可以装前面所讲的所有的数据类型,还可以装后面要讲的结构体,甚至胞还可以自己装自己,也就是一个胞中套一个胞。

3.1

胞的创建

数组的创建是用方括号,数组的调用要用到小括号,胞的创建是用花括号,胞的调用既可以用小括号,也可以用花括号,但效果不一样。对于胞的调用会在后面详细的介绍,但前面所说的这些括号的使用是很多初学者经常弄混的,所以这个需要大家注意一下。

胞的创建要用花括号,譬如: >>A = {„helloworld‟ , true, [1,2,3,4]} A = 'helloworld' [1] [1x4 double]

这里我们创建了一个胞,这个胞里面有三个元素,第一个元素是一个字符串,字符串的内容是helloworld,第二个元素是一个逻辑型变量,其值为true,第三个元素是一个数组,数组里面有4个整型变量。创建的方法很简单,用花括号将要放在一起的东西括起来,然后用逗号或者分号隔开,分号和逗号的使用和在创建数组时是一样的。

看起来胞很难用,乱七八糟的一堆东西,但在后面用的过程中,胞里面的所存的东西一般都是同一种类型的,比如要么都是数组,要么都是字符串。这里也只是显示一下胞的里面是可以装各种各样的数据类型。当然胞里面也可以装变量,譬如 >>M = „helloworld‟;>>N = „Tom‟‟s cat‟;>>A = {M , N , [1,2,3,4]}

A = 'helloworld' 'Tom's cat' [1x4 double]

3.2 胞中元素的调用(重点与难点)

比如我们现在有一堆字符串组成了一个胞,这个时候我们如何来调用这个字符串是一个很重要的问题。在前面我有说过胞的调用既可以使用小括号,也可以使用花括号,下面我们来看看其区别在什么地方。

>> A ={'data1.txt','data2.txt','data3.txt'};%创建一个胞,里面有三个字符串 >> M = A(1)%将A(1)这个东西存到M这个变量中 M = 'data1.txt'

>> N = A{1}

%将A{1}这个东西存到N这个变量中 N = data1.txt

这个时候我们可以在workspace中看到,M这个变量的属性是 1*1cell,而N这个变量的属性是字符串。也就是说用小括号调用的时候,没有改变cell的属性,出来的东西还是cell,然而当用花括号调用的时候,出来的东西是原本我们存进去的东西,比如我们存一个字符串的时候,调用出来的就是一个字符串,如果存的是一个数组,那么调用出来的就是一个数组。

假如我们现在只需要A这个胞中的前两个字符串,而第三个字符串我们不需要,这个时候我们可以这样使用

>>B = A(1,1:2)%这个用法和数组的用法一样,并且如果这个cell是一行或者一列,可简写为

>>B = A(1:2)

也就是说大规模的调用胞中的元素的时候会用小括号,而胞中单一的元素调用用的是花括号。同样我们还可以更进一步的调用胞中的元素。比如 >> A ={'data1.txt','data2.txt','data3.txt'};%创建一个胞,里面有三个字符串 >> B = A{1}(end-2:end)%取出胞的第一个元素(data1.txt)的后三个字符(txt)的使用方法 B = txt

同样如果胞里面存的是一个数组,我们希望取出数组中的某个元素或者某行数据,也可以使用类似的方法。比如

>>A = {[1,2;3,4],[5,6;7,8]} %创建一个胞,胞里面的两个元素都一个2*2数组 A = [2x2double] [2x2 double]

>>B = A{2}(:,2)

%取出第二个矩阵的第二列数 B =

也就是说这里我们只要将A{2}当成一个数组就可以了,里面的调用,修改都可以参照数组的用法

3.3 胞中元素的添加

比如现在有个胞,里面只有2个矩阵,我现在想增加第三个矩阵,用法如下 >>A = {[1,2;3,4],[5,6;7,8]} %创建一个胞,胞里面的两个元素都一个2*2数组 >>A{3} = [9,10;11,12]

A = [2x2double] [2x2 double] [2x2 double] 或者

>> A(3)= {[9,10;11,12]}

A = [2x2double] [2x2 double] [2x2 double]

这里我们发现用圆括号和花括号都可以实现胞中元素的添加,使用花括号的时候,只要直接写内容就好,而使用圆括号的时候,需要先生成一个胞,然后将这个胞添加到原来那个胞的后面。

注意:如果使用A{3} = {[9,10;11,12]},在matlab当中是不会出错的,但可以发现结果是 [2x2 double] [2x2double] {1x1 cell} 如果仅仅用A{3}(:,2)是会出错的,所以尽量避免不要弄混了。3.4 胞的一个常用用法

比如现在我有3个txt文档,里面存储着3个被试的行为数据,我们想通过循环的方式来依次读这三个文档,这个时候就会碰到一个问题,如何去调用这三个txt文档的文件名? 由于现在还没有将如何使用循环,在这里就先简单说一下,我们现在写的命令,运行的时候是按照命令从上到下的顺序依次运行一遍。但假如我们有在一堆代码中有其中一段需要重复运行几次,那么最简单的方法就是将这段代码复制粘贴几次,但如果这样做,那么程序就会变得很冗杂,于是就会用到循环这个东西,也就是我会告诉电脑,你运行到这里的时候给我重复运行其中的这几条命令。

但只是重复而没任何改变的话,那么这个循环就太死板了。更多情况下重复的过程中会有些许的变化,但变化不会太大。这个时候就需要一个能变得东西,比如我有一个变量i,我希望第一次循环的时候i等于1,第二次循环的时候i等于2,这样我就可以通过这个i来改变每次循环的内容。对于怎么写这个循环以及循环的用法,后面会有专门的一节来介绍。这里就记得在每次循环的过程中i就会增大1.对于前面的这个问题,我们可以先生成一个胞,这个胞里面存着这些txt文档的文件名。譬如

>>filename = {„data1.txt‟ , ‟data2.txt‟ , ‟data3.txt‟}

当我们调用第一个文件的时候,我们需要告诉一个读txt文档函数需要读的文件名是什么,这个时候我们就可以告诉那个函数要读的文件名是filename{i},也就是说当第一次循环的时候,读的txt文档的文件名就是filename{1},也就是字符串data1.txt,后面也就可以处理这个文件的数据,当循环第二次的时候,调用的文件名就变成filename{2},就可以处理第二个文件,以此类推。

当然我们发现在创建这个filename的时候,每次都要在最后输入.txt很麻烦,我们能不能有一些简单的方法?这个时候我们就可以先建一个cell,譬如 >>filename = {„data1‟ , ‟data2‟ , ‟data3‟}

当我用第一个文件名的时候,应该是data1.txt,我如何将这个固定的.txt加到后面呢?其实最简单的方法是用strcat函数,但对于函数是什么,还没有介绍。但不用函数同样能达成目的,这个时候就要想想前面讲字符串的一些知识,由于字符串可以接起来,所以每次循环用文件名的时候,就可以使用[filename{i} , ‟.txt‟]来实现,这个方括号所得到的东西就是一个字符串,也就是data1.txt。

如果有心细的同学说,那么前面那个data是不是也可以不用写?答案是肯定的,这个时候我们可以输入

>>filename = {„1‟ , ‟2‟ , ‟3‟}

在循环的过程中,可以将‟data‟ , filename{i} 和‟.txt‟连接起来,连接的方法为[„data‟ , filename{i} , „.txt‟],如果有对连接方法不太清楚的同学,可以参见字符串的用法 那节。

当然还有同学提出,那个i不就是1,2,3么?干嘛还要再生成那个胞?这里需要提醒的一点是,i所代表的是一个整型变量,而在字符串中那个1,2,3是一个字符类型的变量,如果直接使用[„data‟, i ,‟.txt‟],matlab会自动将i所对应的那个ascii码转换成相应字符,而1,2,3所代表的ascii码都是空,所以直接使用[„data‟, i ,‟.txt‟]出来的字符串都是data.txt。当然解决办法就是将整型i变成字符1,2,3,这里就要使用到另外一个函数num2str,这个函数就是能将数字变成字符。上面正确的写法应该是[„data‟ , num2str(i), ‟.txt‟]。结构体

首先介绍一下什么是结构体,按照我的理解,结构体就是将很多变量集中在一起的一个数据类型。举个形象的例子来看,结构体就是一个很大的盒子,在盒子中可以装各种小盒子,而这些小盒子就结构体内装的变量,比如一个数,一个数组,一个胞,甚至是另外一个结构体,并且这个大盒子还有个好处就是可以给里面的每个小盒子起一个名字,类似装鞋子的盒子,装领带的盒子或者装首饰的盒子。

其实胞同样也可以这样理解,在上面的例子中,胞也可以看成是一个大盒子,里面能装各种小盒子,但和结构体不同的是在胞中这些小盒子是按照顺序放置的,我们只能通过其顺序获取小盒子内的东西,比如第一个盒子,第二个盒子,而不同通过形象的名字来获取。所以在我理解当中凡是能用结构体完成的,胞同样也能完成,但可能在有些情况下使用胞会方便一些,有些情况使用结构体会更加方便一些。具体使用什么方式来存储变量,可能要根据实际情况来分析。

4.1 结构体创建

假如我们现在想存储一个被试的信息,包括这个被试的编号(整数),性别(字符串),年龄(整数)以及爱好(胞),我们可以使用四个变量来存储,但如何我们会经常用到这些信息,并且想将这些信息传递给其它函数,那么这个时候如果使用4个变量来存储就嫌的比较麻烦;如果是用cell去存储,那么如果我们取内容的时候就要严格按照其顺序获取单个内容(比如在存储的时候爱好排在第4个,那么在后面使用的时候就要从cell的第4个元素中取),这样同样不方便。这个时候结构体就是一个比较好的选择。

subject = struct('ID',1,'gender','male','age',23,'hobby',{{'football','singing'}});或者

subject.ID = 1;subject.gender = 'male';subject.age = 23;subject.hobby = {'football','singing'};

以上的两种创建的方式都是允许的,一般下面的这种方式可能会更加直观并且更加常用一些。注意:在第一种创建的方法中,cell是用两个大括号括起来的,也就是这里需要大家注意一下,如果我只用一个大括号会出现什么问题呢?这个可以留给大家自己试试。一般为了避免出现不必要的错误,我比较推荐第二种创建方式。这里如果只用一个大括号的话,会变成1×2struct 在这个里面我们就可以理解subject就是那个所谓的大盒子,在这个大盒子中我们装了4个小盒子,分别取名叫ID, gender, age, hobby。然后在这4个盒子中装了对应的内容。

当然如果我们有很多个被试如何去存储呢?这个时候就会出来一个东东叫做结构体数组,你可以将这个东西想象成顺序排放的一堆大盒子。创建的方式也很简单,比如:

subjects = [struct('ID',1,'gender','male','age',23,'hobby',{{'football','singing'}}),struct('ID',2,'gender','female','age',21,'hobby',{{'singing','dancing'}})];或者

subjects(1).ID = 1;subjects(1).gender = 'male';subjects(1).age = 23;subjects(1).hobby = {'football','singing'};subjects(2).ID = 2;subjects(2).gender = 'female';subjects(2).age = 21;subjects(2).hobby = {'singing','dancing'};

注意:既然是结构体数组,那么也就是要保证结构体数组内每个成员的形式是一样的,比如上面的例子来说,结构体数组中每个元素都要有相同的“小盒子”,但“小盒子”里面装的内容可以不同。如果在某个成员中不设置这个小盒子,那么这个成员同样会被默认创建一个空的“盒子” 如果我们想获取所有成员的年龄怎么办? [subjects.age] 或者 {subjects.age}

第五篇:用示波器对单片机I2C时序进行图形波形分析的试验小结

用示波器对单片机I2C时序进行图形波形分析的试验小结

分类: 嵌入开发2011-02-15 23:58 5454人阅读 评论(2)收藏 举报

c图形通讯编程工作

I2C的概念原理网上都有就不说了,这里只把我把两个开发板通过I2C通讯的调试经验记录分享一下。

I2C要求要有一个主设备,负责发起请求和控制时钟;其它为从设备,通过设备ID地址来识别并响应主设备请求。主从设备要轮流控制SDA。一开始我没搞明白这一点,直接加了写I2C数据代码,然后用示波器在SDA和SCL脚测量,却只能找到些凌乱的波形,没有预期的效果。后来把从设备接上,两边写好代码,互相有了响应,这才在示波器上看到波形。

这里我找了一个主设备往从设备写数据的例子,代码如下:

char buf[128];int len;strcpy(buf,“..huz_hello_i2c/n”);len=strlen(buf);

//deviceid: 0x3c write_i2c(0x3c, buf , len);

接收端的代码比较简单,就不贴了。

将示波器的X和Y分别接到SDA和SCL,得到波形并分析如图:

从图中可知时序如下:

1.由主机发起,在SCL为高电平时,SDA由高到低切变,形成开始信号;

2.接着是7位地址和一位读写标志,这里7位地址为0111100,即0x3c,正是我们代码中设置的地址ID;最后一位为0表示写操作;

3.接着在下一个时钟,主机以高电平状态释放SDA,这时从机响应,将SDA拉低了; 4.接着是两个8位数据00101110与响应,即0x2E,正是“.”号的ASCII码,符合预期输出;

5.还有其它数据和最后的停止位,图中被截掉了。

从图中可知,纵向一格是200mV,则SDA和SCL的电平大概就是350mV;由于信号笔上设置了信号x10,因此实际电平应该大概是3.5V(理论上应该是3.3V)。横向一格是25us,10个时钟周期大概用了4格,即4x25us=100us,平均每个时钟周期是10us,可算出传输频率为1/10us=100,000/s,即100k bps。另外,对于读从设备内容,基本流程是主设备先往从设备写一个命令,然后再输出读取命令,然后才由从设备发送数据。过程类似,不再具体分析了。

下图示例中,主机先向从机写了一个地址命令,然后重新开始并进入读取周期。

分析波形可检测出I2C通信工作是否正常,是否符合预期,对我们编程调试诊断有辅助作用。

下载如何保存MATLAB示波器中的波形[小编推荐]word格式文档
下载如何保存MATLAB示波器中的波形[小编推荐].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Matlab在控制工程中的应用

    Matlab在控制工程中的应用 摘要: 简要介绍MATLAB软件及其控制系统工具箱的功能,并通过具体实例说明MATLAB软件在《机械控制工程基础》课程教学中的优越性,从多方面探讨在教学过......

    powerpoint中怎么保存插入的音乐文件(精选)

    powerpoint中怎么保存插入的音乐文件? (一)插入背景音乐大家都知道在PowerPoint中可以向幻灯片中插入CD音乐、WAV、MID和MP3文件以及录音旁白。但是用这些方法插入背景音乐时会......

    总结MATLAB中涉及到的小波函数

    收集和总结MATLAB中涉及到的小波函数 (1)plot函数:绘制向量或矩阵的图形 用法: plot(Y) plot(X1,Y1,...) plot(X1,Y1,LineSpec,...) plot(...,'PropertyName',PropertyValue,.........

    matlab中的set函数总结[五篇]

    matlab中的set函数总结 1ATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值成为属性值。例如,LineSyle是曲线对象的一个属性名,它的值决定着线型,取值可以是......

    matlab中s函数编写心得(转)

    matlab中s函数编写心得(转)Part I: 所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab、C、C++、Fortran、Ada等语言来写, 这儿我只介绍怎......

    MATLAB在电磁场教学中的应用

    MATLAB在电磁场课程中的应用 摘要:电磁场课程理论性强,概念抽象,需要较强的多维空间想象能力和逻辑思维能力,不能直观的进行观察和研究,难以很好地掌握。文中简要介绍了MATLAB语......

    收集和总结MATLAB中涉及到的小波函数

    一、 收集和总结MATLAB中涉及到的小波函数 1.cwt函数功能:实现一维连续小波变换的函数。 11.upwlev函数功能:单尺度一维小波分解的重cwt函数语法格式: COEFS=cwt(S, SCALES, 'wna......

    MATLAB在化工中的应用小论文(★)

    MATLAB在化学工程与工艺 实验数据处理中的应用 摘要:随着科技的不断发展与进步,MATLAB软件开始在化学工程与工艺实验数据处理中应用开来。因为传统的数据处理方式十分繁琐,因......