matlab中connect函数用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中connect函数用法相关的知识,希望对你有一定的参考价值。
怎么用connect函数进行线性系统仿真
connect()用于建立与指定socket的连接。头文件: #include <winsock.h>
函数原型: int PASCAL FAR connect( SOCKET s, const struct sockaddr FAR* name, int namelen);
参数:
s:标识一个未连接socket
name:指向要连接套接字的sockaddr结构体的指针
namelen:sockaddr结构体的字节长度
注释:
本函数用于创建与指定外部端口的连接。s参数指定一个未连接的数据报或流类套接口。如套接口未被捆绑,则系统赋给本地关联一个唯一的值,且设置套接口为已捆绑。请注意若名字结构中的地址域为全零的话,则connect()将返回WSAEADDRNOTAVAIL错误。
对于流类套接口(SOCK_STREAM类型),利用名字来与一个远程主机建立连接,一旦套接口调用成功返回,它就能收发数据了。对于数据报类套接口(SOCK_DGRAM类型),则设置成一个缺省的目的地址,并用它来进行后续的send()与recv()调用。
返回值:
若无错误发生,则connect()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。对非阻塞套接口而言,若返回值为SOCKET_ERROR则应用程序调用WSAGetLsatError()。如果它指出错误代码为WSAEWOULDBLOCK,则您的应用程序可以:
1.用select(),通过检查套接口是否可写,来确定连接请求是否完成。
2.如果您的应用程序使用基于消息的WSAAsynSelect()来表示对连接事件的兴趣,则当连接操作完成后,您会收到一个FD_CONNECT消息。
错误代码:
WSAENOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
WSAEADDRINUSE:所指的地址已在使用中。
WSAEINTR:通过一个WSACancelBlockingCall()来取消一个(阻塞的)调用。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAEADDRNOTAVAIL:在本地机器上找不到所指的地址。
WSAENOTSUPPORT:所指族中地址无法与本套接口一起使用。
WSAECONNREFUSED:连接尝试被强制拒绝。
WSAEDESTADDREQ:需要目的地址。
WSAEFAULT:namelen参数不正确。
WSAEINVAL:套接口没有准备好与一地址捆绑。
WSAEISCONN:套接口早已连接。
WSAEMFILE:无多余文件描述字。
WSAENETUNREACH:当前无法从本主机访问网络。
WSAENOBUFS:无可用缓冲区。套接口未被连接。
WSAENOTSOCK:描述字不是一个套接口。
WSAETIMEOUT:超时时间到。
WSAEWOULDBLOCK:套接口设置为非阻塞方式且连接不能立即建立。可用select()调用对套接口写,因为select()时会进行连接。 参考技术A connect Block-diagram interconnections of dynamic systems.
connect computes an aggregate model for a block diagram interconnection
of dynamic systems. You can specify the block diagram connectivity in
two ways:
Name-based interconnection
In this approach, you name the input and output signals of all blocks
SYS1, SYS2,... in the block diagram, including the summation blocks.
The aggregate model SYS is then built by
SYS = connect(SYS1,SYS2,...,INPUTS,OUTPUTS)
where INPUTS and OUTPUTS are the names of the block diagram external
I/Os (specified as strings or string vectors).
Example 1: Given SISO models C and G, you can construct the closed-loop
transfer T from r to y using
e u
r --->O-->[ C ]---[ G ]-+---> y
- | |
+<----------------+
C.InputName = 'e'; C.OutputName = 'u';
G.InputName = 'u'; G.OutputName = 'y';
Sum = sumblk('e = r-y');
T = connect(G,C,Sum,'r','y')
Example 2: If C and G above are two-input, two-output models instead,
you can form the MIMO transfer T from r to y using
C.u = 'e'; C.y = 'u';
G.u = 'u'; G.y = 'y';
Sum = sumblk('e = r-y',2);
T = connect(G,C,Sum,'r','y')
Note that C.u,C.y is shorthand for C.InputName,C.OutputName and that
'r','y' select all entries of the two-entry vector signals r and y.
Example 3: If you already have specified I/O names for C and G, you
can build the closed-loop model T using:
Sum = sumblk('%e = r - %y',C.u,G.y);
T = connect(G,C,Sum,'r',G.y)
See SUMBLK for more details on using aliases like %e and %y.
Index-based interconnection
In this approach, first combine all system blocks into an aggregate,
unconnected model BLKSYS using APPEND. Then construct a matrix Q
where each row specifies one of the connections or summing junctions
in terms of the input vector U and output vector Y of BLKSYS. For
example, the row [3 2 0 0] indicates that Y(2) feeds into U(3), while
the row [7 2 -15 6] indicates that Y(2) - Y(15) + Y(6) feeds into U(7).
The aggregate model SYS is then obtained by
SYS = connect(BLKSYS,Q,INPUTS,OUTPUTS)
where INPUTS and OUTPUTS are index vectors into U and Y selecting the
block diagram external I/Os.
Example: You can construct the closed-loop model T for the block
diagram above as follows:
BLKSYS = append(C,G);
% U = inputs to C,G. Y = outputs of C,G
% Here Y(1) feeds into U(2) and -Y(2) feeds into U(1)
Q = [2 1; 1 -2];
% External I/Os: r drives U(1) and y is Y(2)
T = connect(BLKSYS,Q,1,2)
Note:
* connect always returns a state-space or FRD model SYS
* States that do not contribute to the I/O transfer from INPUTS to
OUTPUTS are automatically discarded. To prevent this, set the
"Simplify" option to FALSE:
OPT = connectOptions('Simplify',false);
SYS = connect(...,OPT) 参考技术B 等点顶顶顶顶顶顶顶顶顶顶
matlab movie函数的用法
[filename,pathname] = uigetfile( ...
'*.avi','Vedio Files(*.avi)';...
'*.*','All Files(*.*)',...
'Pick an Vedio');
axes(handles.axes_src);
fpath=[pathname filename]
xyloObj=VideoReader(fpath)
nFrames = xyloObj.NumberOfFrames; % 查看video对象的属性
Height = xyloObj.Height;
Width = xyloObj.Width;
mov = zeros(Height, Width, 3, nFrames,'uint8');
mov = read(xyloObj,[1 nFrames]);
%imshow(mov(:,:,:,1)); 显示这个没有问题
movie(axes,mov,1,frate,'colormap',[]); 我想播放视频。。。出错了
movie 函数动态绘图
电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。
MATLAB中,创建电影动画的过程分为以下四步:
step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。
step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。
getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。
该函数格式有:
(1)F=gefframe,从当前图形框中得到动画帧
(2)F=gefframe(h),从图形句柄h中得到动画帧
(3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧
step3:调用movie函数按照指定的速度和次数运行该电影动画。
当创建了一系列的动画帧后,可以利用movie函数播放这些动画帧。
该函数的主要格式有:
(1)movie(M),将矩阵M中的动画帧播放一次
(2)movie(M,n),将矩阵M中的动画帧播放n次
(3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次
step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。
具体参见:
该方法的经典格式是:
%-----------------------------------------------
%录制电影动画
for j=1:n
%
%这里输入我们的绘图命令
%
M(j) =
getframe;
end
movie(M)
%单帧显示方法
f =
getframe(gcf);
colormap(f.colormap);
image(f.cdata);
%------------------------------------------------
此外,利用immovie函数,我们可以从多帧图像阵列中创建MATALB
电影动画。 参考技术A clear all hidden
clc
[filename,pathname] = uigetfile( ...
'*.avi','Vedio Files(*.avi)';...
'*.*','All Files(*.*)',...
'Pick an Vedio');
filePath=fullfile(pathname,filename);
readerobj=VideoReader(filePath);
StartFrame=1;
EndFrame=20;
vidFrames = read(readerobj,[StartFrame EndFrame]);
for k = 1:(EndFrame-StartFrame)
mov(k).cdata = vidFrames(:,:,:,k);
mov(k).colormap = [];
end
hf = figure;
% Resize figure based on the video's width and height
set(hf, 'position', [150 150 readerobj.Width readerobj.Height])
% Playback movie once at the video's frame rate
movie(hf, mov, 1, readerobj.FrameRate);
读入的帧数不要太多,avi格式的文件数据量太大,Matlab的内存没有太多,可能放不下。
文件的路径中不要包含中文,以免出错,读不了文件
本回答被提问者采纳以上是关于matlab中connect函数用法的主要内容,如果未能解决你的问题,请参考以下文章