声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3345|回复: 3

转帖] 一些有用的东东,希望大家喜欢

[复制链接]
发表于 2005-12-24 16:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
Q:如何将训练好的神经网络用于我的应用中?.... <BR>A: sim 或者 gensim........ <BR><BR>answer:在m文件中使用sim,使用help network/sim察看使用方法。 <BR><BR>如果供simulink模型中仿真用,请使用gensim生成网络模型,然后放入任何系统仿真模型中使用,并且还能够生成代码用于实时仿真。见下面的例子,使用gensim将神经网络变成Simulink模型。 <BR>net = newff([0 1],[5 1]); <BR>gensim(net); <BR>然后可以使用RTW生成S-function目标。 <BR><BR>q:能不能在Simulink的环境下,从PC 机的串口收发数据 <BR>我编写了一段C51单片机程序用于对电机进行控制,而一些控制参数我希望能够从 Simulink 通过 RS232 口发给 C51单片机,并通过 RS232 口得到 C51 的反馈信息。但XPC 的 RS232 模块好像不能用,是不是我对 XPC 的工作方式理解有误?请各位老师指导,谢谢! <BR><BR>步骤是这样的: <BR>1.编写一个串口读写的m程序(可以参看帮助中的External Interfaces/API的部分,相当简单) <BR>2.用S-fuctiion进行封装 <BR>3.加入到自己的simulink模型中去。 <BR><BR>note:这样用m函数写的模块不能转化成C代码,要能转换 <BR>成C要用C-Sfunction写。 <BR><BR>Q:再次请教崔老师,对于fopen语句如何读取多个文件,非常感谢,十万火急 <BR><BR>k=menu('choose a file','E:\tu石混填1\1\bbb2-10-1.RTN','E:\tu石混填1\1\bbb2-10-1.RTN') <BR>switch k <BR>case 1,kname='E:\tu石混填1\1\bbb2-10-1.RTN' <BR>case 2,kname='E:\tu石混填1\1\bbb2-10-2.RTN,' <BR>otherwise disp('Error!') <BR>end <BR>kname <BR>fid=fopen('kname','rt'); <BR>但发现fid值为-1,读取失败,但如果 <BR>fid=fopen(''E:\tu石混填1\1\bbb2-10-1则成功,薛老师如何用fopen语句实现读取多个文件,谢谢 <BR><BR>A:假设打开3个文件分别是1、.txt 2、.txt 3、.txt <BR>for i=1:20 <BR>fid=feval('fopen',[num2str(i),'.txt'],'rt') <BR>end <BR>close(fid) <BR><BR>Q:请教崔老师和其他各位老师对于fopen语句如何读取多个文件,非常感谢,十万火急 <BR>我编了一个菜单读入多个文件 <BR>k=menu('choose a file','E:\tu石混填1\1\bbb2-10-1.RTN','E:\tu石混填1\1\bbb2-10-1.RTN') <BR>switch k <BR>case 1,kname='E:\tu石混填1\1\bbb2-10-1.RTN' <BR>case 2,kname='E:\tu石混填1\1\bbb2-10-2.RTN,' <BR>otherwise disp('Error!') <BR>end <BR>kname <BR>fid=fopen('kname','rt'); <BR>但发现fid值为-1,读取失败,但如果 <BR>fid=fopen(''E:\tu石混填1\1\bbb2-10-,薛老师如何用fopen语句实现读取多个文件,谢谢 <BR><BR>A:fid=fopen('kname','rt')是否应为fid=fopen(kname,'rt') <BR><BR>因为kname已经是字符串变量了,就不需要加引号了。 <BR><BR>Q:关于常微分方程组的求解 <BR>如何用数值解法求解如下方程组: <BR>Dx1=-0.8*x1+0.3*x1*x2,Dx2=1.2*x1-0.6*x1*x2 <BR>初始解:x1(0)=2,x2(0)=1. <BR>各位大虾,帮帮忙吧!!! <BR>先谢谢了! <BR><BR>A;首先生成一个包含下列代码的文件myfun.m: <BR>function dx = myfun(t,x) <BR>dx=[-0.8*x(1)+0.3*x(1)*x(2); <BR>1.2*x(1)-0.6*x(1)*x(2)]; <BR><BR>然后在MATLAB命令窗口输入命令(假定计算从0秒到50秒,[2 1]为初值): <BR>[t,x]=ode45(@myfun,[0 50],[2 1]); <BR>就可以了。 <BR><BR>Q:小波工具箱中waverec函数的问题 <BR>我有个问题想要请教各位,我对其中的多尺度一维小波重构函数waverec一直不太理解,用这个函数重构的小波系数,不管是哪个尺度上的低频或高频系数,得到的都是和采样信号相同的个数,比如采样信号是2000个,进行3尺度分解,则重构的第3尺度上的低频系数也是2000个,我试过了,不论哪个尺度的系数重构,都和原始采样信号一样的长度。而我用appcoef提取的第3尺度上的低频系数却是250个(因为进行了2抽取),为什么重构的系数却体现不出二抽取?而mallat算法重构系数是逐级2插补,我想知道重构的系数与分解的系数区别到底在什么地方?重构后的系数与分解的系数不相等,那还是小波变换系数吗? <BR>A:小波重构时可以通过两种途径:一种就是书上常见的采用小波系数插值后滤波实现。然后在一级一级的插值,滤波最后实现重构。而另外一种这是在不同的尺度上直接恢复成和原始信号一样的长度,然后直接相加就行了(这个步骤你可以看看matlab pdf文档中的Wavelets: A New Tool for Signal Analysis部分) <BR><BR>Q:对一个64*64的矩阵中值滤波 <BR>对一个64*64的矩阵进行3*3的中值滤波 <BR>A:图象处理工具箱中有直接可以使用的函数:medfilt2 <BR><BR>Q:如何将n*m矩阵转换成数组 <BR>如何将一个n*m的矩阵按照行数转换为数组,如 <BR>A=[1 2;3 4]转换成B=[1 2 3 4]? <BR>A:A=A' <BR>B=[A(]' <BR><BR>Q:请问nargin,nargout,varargout这些函数的作用?? <BR>A:这些内容是属于函数输入输出的参数类型,可以算是宏,其含义为输入输出参数的个数和可变输入参数数组,用于灵活的定制输入输出参数个数;nargin,nargout是对m文件的输入输出的变量个数进行检查,而varnargout是m文件的输出行参。 <BR><BR>Q:请教如何将mdl文件转化为C mex 的S-fuction文件 <BR>A:使用RTW <BR><BR>Q:请问编程时,什么时候用eval函数?调用的字符串什么情况下加单(双)引号? <BR>什么时候用eval函数?什么时候直接执行字符串命令?调用的字符串什么情况下加单(双)引号? <BR>A:当把函数名或变量名作为字符串方式处理时有用。由于单引号已经作为字符串的分界符,当在字符串使用单引号时,需要再加一个单引号以示区分。双引号与一般字符一样对待。 <BR><BR>Q:神经网络训练完毕之后,如何讲权值、域值保存? <BR>A:应用命令gensim(net)就可以生成,保存下来以备下次使用。权重和域值都在里面,可以点击开并修改。 <BR><BR>Q:请教能否将.m文件转变为.exe可执行文件? <BR>A:使用mcc就可以,例如mcc -P *.m <BR>具体的使用参阅Matlab的帮助文档 <BR><BR>Q:函数load的问题 <BR>我用uigetfile得到了一个路径和文件名,文件是一个.mat文件, <BR>然后我想用load 文件名的形式,把它装入工作空间,但是matlab显然不支持这种操作。load 好象一定得是具体的文件名,而不是变量。 <BR>请问,我怎么样编写程序可以避免或者解决这个问题? <BR>我想可能跟符号变量有关系,但是试了以后,发现我还是解决不了。 <BR>A:load data.mat; <BR>与 <BR>load('data.mat'); <BR>效果是一样的。 <BR>或者使用eval也可以,比如 <BR>eval('load data.mat'); <BR><BR>所以,如果你的文件名已经存储在字符串filename中, <BR>那么可以使用 <BR>load(filename) <BR>或者 <BR>eval(['load ' filename]); <BR>打开文件。 <BR><BR>Q:两个关于界面设计的问题 <BR>我还有两个问题.我花了一天都没能解决. <BR><BR>1.我在主窗口A中用[data,a]=fscnaf(fid,'%s',[m n ])打开了一个文件,但是我想用另一个定义好的窗口B(用matlab6.0l里的guide定义)里的listbox或者edit显示出来.但是我发现我怎么也没有办法把data传递到listbox或者edit,请问我应该怎么样才能实现上述功能? <BR><BR>2.我用纯粹的语句行产生窗口B,用这个办法打开文本文件后,它显示的东西的格式跟实际的格式不一致,没有空格和回车,这是怎么回事? <BR><BR>A:1.你是否使用了global来定义全局变量,以用于传递,在matlab中,设置uicontrol(控件)的属性,都是用到set命令,不止你是否用到,在这里应该是设置edit的String属性吧! <BR>2.在A中打开B,只要在A对应的事件下,写B 就可以了!(好像没看懂你的第二个问题) <BR>% get handle of listbox or edit of figure B , <BR>% and : <BR>set(ListboxHandle, 'String', Data ) ; <BR><BR>Q:simulink中的模块参数seed是什么意思???许多模块中都要求输入seed值,有何含义?应如何确定该值? <BR>A:可以输入任意整数。由于实际上的随机数生成大多为伪随机序列,如果输入同样的seed将产生相同的随机序列,需要输入不同的seed以产生不同的随机序列。 <BR>Q:谢谢指点! <BR>我用指令的方式写如下语句: <BR>rand('seed',12345); <BR>a=rand(1,10); <BR>b=rand(1,10); <BR>发现a,b仍然不同,可重复的噪声的含义是什么?上述产生噪声的方法是否正确?如否,该如何利用seed通过指令来产生可重复的噪声。 <BR>A:MATLAB中,随机数是递进生成的。 <BR>也就是说: <BR>rand('seed',12345); <BR>a=rand(1,10); <BR>b=rand(1,10); <BR>与 <BR>rand('seed',12345); <BR>tmp=rand(1,20); <BR>a=tmp(1:10); <BR>b=tmp(11:20); <BR>效果是一样的。 <BR><BR>如果想要生成重复的随机序列,那么就重新设定种子,比如 <BR>rand('seed',12345); <BR>a=rand(1,10); <BR>rand('seed',12345); <BR>b=rand(1,10); <BR><BR>Q:能否实时采集外界信号 <BR>simulink能够实时采集wave device的信号,但是不知道能不能实时采集其他设备(比如A/D采样板)的信号,还是需要写上一段程序将采样板的信号读入。如果能,该怎么处理,实时性如何?希望各位大侠指点。 <BR>A:Simulink提供的S-function功能应当能够满足你与外界硬件接口的需要。关键是写出与硬件相关的驱动,由于S-function 是通过C编写的,可以调用操作系统以及硬件的相关编程资源,技术上应当不成问题。 <BR>关于实时性无法保证,因为Simulink环境以及相应的PC都不是一个实时环境。确保实时性,必须采用具备实时内核的实时操作系统,或实时仿真系统。MathWorks提供了两个应用于实时的产品,一个是xpc,另外一个是Real-Time Window Target. 这两个产品都带有相当部分的硬件驱动部分,支持一些主要的硬件借口卡。如果你使用的板卡不在支持之列的话,你依旧需要自己去编写相应的驱动部分。 <BR><BR>Q:我用simulink的power system blockset仿真一个小系统,需要产生一个频率和相角都是变量的正弦信号。不知那位高手能指点在下一下,我所需要的频率和相角都是由另外的模块输入。频率是由Power System Blockset的Machines Measurement Delux 输出的。相角也是测量到的,由Fourier模块输出。我想利用这两个输出量做成一个正弦电压源,不知道能不能做? <BR>谢谢您的帮助。 <BR>A:如果你需要做一个交流电压源的话,有一个办法。你把Simulink/PowerSystem中的AC Voltage Source用Look Under Mask方式打开,就会发现驱动源是一个正弦信号发生器。用一个可调频率相位的C-Mex S-function替换掉这一部分就可以了 <BR><BR>Q: Vc中如何调用Matlab的绘图函数? <BR>A:通常MATLAB不赞成直接在外部环境中调用MATLAB API函数,特别是绘图函数。如果你确实想这么做,不妨读一下libsgl.h 这个头文件,图形API都在这里面。函数调用之前,要初始化一下图形引擎。 <BR><BR>Q:请问如何产生动态时间间隔的脉冲?在simulink中,pulse generator的参数periods一旦确定,那么 <BR>脉冲的时间间隔就固定下来了。怎么样才能动态的修改periods参数呢? <BR>或者有没有其他的模块能实现动态时间间隔的脉冲?请高手指点! <BR>A:先是采用三角函数块生成变频率的正弦信号,然后再用逻辑运算符(信号大于零时输出1,小于零时输出0)生成变间隔的脉冲。 <BR>这只是作为一个提示。 <BR><BR>Q:曲面拟和的问题 <BR>matlab里可用一个二维矩阵表示一个曲面上的点,如z=peaks 得到的z矩阵 <BR>那么,如果我只知道z中的少数点的值,用什么函数来得到类似z=peaks的矩阵 <BR>谢谢了 <BR>A:参考MATLAB Graphics手册中3-D Visualization中的Surface Plots of Nonuniformly Sampled Data中所做的: <BR>Z = griddata(x,y,z,X,Y,'cubic'); <BR>查查griddata的用法。 <BR><BR>Q:我要用SIMULINK做一个模块,需输入16进制数怎末办,我输入的参数和输出的参数都是16进制数怎末办? <BR>A:在Simulink/Signals&amp;Systems下面有一个“Data Type Conversion”模块可以用来转换成INT16 <BR><BR>Q:是不是可以用S-函数将m文件与SIMULINK连接?是不是可以用S-函数将m文件与SIMULINK连接?SIMULINK可以转换成m文件吗? <BR>A:利用m文件的S-function就可以把m函数与Simulink相连,Simulink原则上不能转化成m形式。但视你的应用可能有一些变通的方式。 <BR><BR>Q:什么是RTW和MATLAB COMPILE编译模型您能解释一下:RTW和COMPILE编译模型吗? <BR>也就是他们的概念?我怎样操作?需要什么MATLAB的附件? <BR>尽量详细一点? <BR>A:RTW和Compiler都是MATLAB的模块,也就是说如果要使用这两个功能,就必须安装这两个模块。 <BR>RTW的功能是把Simulink模型翻译成针对不同目标机的C语言,从而可以进行某些实时应用; <BR>Compiler是把m函数翻译成C语言或者可执行文件,主要是做一些非实时的应用。比如充分利用MATLAB算法开发的优势和强大的绘图功能解决在一个大Project中实现核心算法 <BR><BR>Q:matlab 如何读mdb数据库 <BR>A:作用Database Toobox工具箱,MATLAB可以通过ODBC/JDBC与Access,Informix,SQL等关系数据库进行实时双向通信,Database Tbx更提供GUI工具方便用户不用自行编写SQL语言来使用,不过Database Tbx的性能有待下一版本R13中改进,如支持中文的性能等。 除了MathWorks的商业软件Database Tbx外,还有一些功能简明的FREE版本,如国内的DBTOOL,(http://www.obase.163.net/matlab/dbtool.htm) 国外的QUVERYTOOL等。 <BR>A:需要有Database toolbox.在 Using the Database Toolbox中有详细说明。使用时有两种方式,一个是交互式的使用,通过Visual Query Builder,文档中对如何操作有详细说明。另外一个是通过调用函数的方式,不直观,但适合用于编程。 <BR><BR>Q;如何从仿真模块生成S函数 <BR>A:生成S-function Target是十分简单的,特别是在MATLAB 6中,S-function Target 还支持变步长算法。 如果系统中安装并配置了C(比如MSVC)编译器,然后打开System Target File浏览器,选择rtwsfcn.tlc,就可以了。 我试了一下vdp这个例子,不需任何改动,只需要更换System Target File就可以编译成功。然后自动弹出一个新的模型窗口,里面放着一个S-function 块。这个块是能够工作的。 <BR><BR>Q:两个figure之间如何进行数据传输,现有一个figure中有一平面图形与菜单指向另一个figure,想把第一个figure中的平面图形x与y的值传到另一个figure中的list中,如何实现? <BR>A:要做到这一点,首先不要使用高级的绘图命令如plot画线,应当使用低级命令画线,以便得到线的句柄。如果能够得到线的句柄,则你的问题就解决了。 例如,画一个5Hz的正弦曲线: cla; %删除此语句则重复在当前坐标系上添加新曲线 %这里,每次画线时都清除原来的曲线 t=0:0.01:10; y=sin(2*pi*5*t); h=line(t,y); 如果你能够将句柄存到一个全局变量,或者通过参数传递给另外一个程序,那么,就可以通过 t=get(h,'XData'); y=get(h,'YData'); 得到曲线的值了。 或者,你觉得使用全局变量或函数参数传递麻烦,你可以为曲线生成一个标签,如 line(t,y,'Tag','MyPlOtDaTaXy'); 标签尽量取的别致一些,省得与打开的其他图形中的标签重名。这样,在另外一个程序中,就可以通过 h = findobj('Tag','MyPlOtDaTaXy'); t=get(h,'XData'); y=get(h,'YData'); 得到曲线的值了。 <BR>
回复
分享到:

使用道具 举报

发表于 2006-6-2 19:15 | 显示全部楼层
<P>有用!</P>
发表于 2006-6-3 00:45 | 显示全部楼层
恩,问题加解答的是不错的!<BR>希望对大家都有帮助。
发表于 2006-6-4 18:24 | 显示全部楼层
顶,其实很多小问题都要注意的,要让更多的人看到这个帖子。<BR>顶
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 22:48 , Processed in 0.064613 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表