搜档网
当前位置:搜档网 › 在Matlab中地震波怎么输入

在Matlab中地震波怎么输入

在Matlab中地震波怎么输入
在Matlab中地震波怎么输入

在Matlab输入地震波可以采用matlab的文件读取功能,先把地震波保存在记事本中,然后利用matlab的文件读取,比如fid=fopen('2.txt','r');

dzhbo=fscanf(fid,'%f',401);

以下是一个小程序可参考:

clear

xs=2*0.287;

fid=fopen('2.txt','r');

dzhbo=fscanf(fid,'%f',401);

ag=dzhbo*0.01*xs;

dt=0.02;

ndzh=400;

cn=3;

m0=[2.762 2.760 2.300]*1e+3;

k0=[2.485 1.921 1.522]*1e+5;

l=diag(ones(cn));

m=diag(m0);

[ik]=matrixju(k0,cn);

[x,d]=eig(ik,m);

d=diag(sqrt(d));

for i=1:cn;

[d1(i),j]=min(d);

xgd(:,i)=x(:,j);

d(j)=max(d)+1;

end

w=d1;

x=xgd;

a1=2*w(1)*w(2)*(0.05*w(2)-0.07*w(1))/(w(2)^2-w(1)^2);

a2=2*(0.07*w(2)-0.05*w(1))/(w(2)^2-w(1)^2);

for j=1:cn

x(:,j)=x(:,j)/x(cn,j);

znb0(j)=(a1+a2*w(j)^2)/2/w(j);

zhcan(j)=(x(:,j))'*m*l/((x(:,j))'*m*x(:,j));

[dlt(j,,dltacceler(j,]=zxzj(znb0(j),w(j),ag);

end

for i=1:cn;

disp1=0;

accel1=0;

for j=1:cn

disp0=zhcan(j)*dltacceler(j,*x(i,j);

accel0=zhcan(j)*dltacceler(j,*x(i,j);

disp1=disp1+disp0;

accel1=accel1+accel0;

end

disp(i,=disp1;

accel(i,:)=accel1;

end

t=0:dt:ndzh*dt;

subplot(2,2,1)

plot(t,disp(3,:)*1e+3,'b') subplot(2,2,2)

plot(t,accel(3,:),'g')

subplot(2,2,3)

plot(t,dzhbo,'r')

MATLAB自适应滤波去噪

《MATLAB自适应滤波去噪》 课程设计报告 1.课程设计目的 此次课程设计目的是为了让我们学会使用MATLAB进行计算机仿真,使用自适应滤波法设计一个语音去噪声电路。培养我们的电路设计思路及其算法,明白理论与实践相结合的重要性,培养了我们的实际操作能力以及锻炼我们对实际问题的分析与解决的能力。 2.课程设计内容 2.1 LMS自适应算法原理 自适应过程一般采用典型LMS自适应算法,但当滤波器的输入信号为有色随机过程时,特别是当输入信号为高度相关时,这种算法收敛速度要下降许多,这主要是因为输入信号的自相关矩阵特征值的分散程度加剧将导致算法收敛性能的恶化和稳态误差的增大。此时若采用变换域算法可以增加算法收敛速度。变换域算法的基本思想是:先对输入信号进行一次正交变换以去除或衰减其相关性,然后将变换后的信号加到自适应滤波器以实现滤波处理,从而改善相关矩阵的条件数。因为离散傅立叶变换DFT 本身具有近似正交性,加之有FFT快速算法,故频域分块LMS FBLMS 算法被广泛应用。 FBLMS算法本质上是以频域来实现时域分块LMS算法的,即将时域数据分组构成N个点的数据块,且在每块上滤波权系数保持不变。其原理框图如图2所示。FBLMS 算法在频域内可以用数字信号处理中的重叠保留法来实现,其计算量比时域法大为减少,也可以用重叠相加法来计算,但这种算法比重叠保留法需要较大的计算量。块数据的任何重叠比例都是可行的,但以50%的重叠计算效率为最高。对FBLMS算法和典

型LMS算法的运算量做了比较,并从理论上讨论了两个算法中乘法部分的运算量。本文从实际工程出发,详细分析了两个算法中乘法和加法的总运算量,其结果为: 复杂度之比=FBLMS实数乘加次数/LMS实数乘加次数=(25Nlog2N+2N-4)/[2N(2N-1)] 采用ADSP的C语言来实现FBLMS算法的程序如下: for(i=0;i<=30;i++) {for(j=0;j<=n-1;j++) {in[j]=input[i×N+j;] rfft(in,tin,nf,wfft,wst,n); rfft(w,tw,wf,wfft,wst,n); cvecvmlt(inf,wf,inw,n); ifft(inw,t,O,wfft,wst,n); for(j=0,j<=N-1;j++) {y[i×N+j]=O[N+j].re; e[i×N+j]=re fere[i×N+j]-y[i×N+j]; temp[N+j]=e[i×N+j;}

jacobi G-S,超松弛迭代法MATLAB程序

function iteration A=[10,1,2,3,4; 1,9,-1,2,-3; 2,-1,7,3,-5; 3,2,3,12,-1; 4,-3,-5,-1,15]; b=[12,-27,14,-17,12]'; x0=[0,0,0,0,0]'; tol=1e-12; disp('jacobi迭代法的结果和次数如下:') [x,k]=Fjacobi(A,b,x0,tol) disp('G-S迭代法的结果和次数如下:':') [x,k]=Fgseid(A,b,x0,tol) disp('超松弛的结果和次数如下:':') [x,k]=Fsor(A,b,x0,1.2,tol) disp('共轭梯度法的结果和次数如下:':') [x,k]=Fcg(A,b,x0,tol) %jacobi迭代法 function [x,k]=Fjacobi(A,b,x0,tol) max=300; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); B=D\(L+U); f=D\b; x=B*x0+f; k=1; while norm(x-x0)>=tol x0=x; x=B*x0+f; k=k+1; if(k>=max) disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2'); return; end end %G-S迭代法 function [x,k]=Fgseid(A,b,x0,tol) max=300; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; x=G*x0+f; k=1; while norm(x-x0)>=tol x0=x; x=G*x0+f; k=k+1; if(k>=max) disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2'); return; end

自适应滤波LMS与RLS地matlab实现

MATLAB 仿真实现LMS 和RLS 算法的二阶AR 模型 及仿真结果分析 一、题目概述:二阶AR 模型如图1a 所示,可以如下差分方程表示: )()()2()1()()(21n d n v n x a n x a n v n x +=----= (1) 图1a 其中,v(n)是均值为0、方差为0.965的高斯白噪声序列。 , 为描述性参数, .95,0,195.021=-=a a 设x(-1)=x(-2)=0,权值 , =0.04①推导最优 滤波权值(理论分析一下)。②按此参数设置,由计算机仿真模拟权值收敛曲线并画出,改变步长在此模拟权值变化规律。③对仿真结果进行说明。④应用RLS 算法再次模拟最优滤波权值。 解答思路: (1)高斯白噪声用normrnd 函数产生均值为0、方差为0.965的正态分布随机1*N 矩阵来实现。随后的产生的信号用题目中的二阶AR 模型根据公式(1)产生,激励源是之前产生的高斯白噪声。 (2)信号长度N 取为2000点,用以观察滤波器权值变化从而估计滤波器系数,得到其收敛值。 (3)仿真时分别仿真了单次LMS 算法和RLS 算法下的收敛性能以及100次取平均后的LMS 和RLS 算法的收敛性能,以便更好的比较观察二者的特性。 (4)在用不同的分别取3个不同的 值仿真LMS 算法时, 值分别取为

0.001,0.003,0.006;用3个不同的λ值仿真RLS 算法时λ值分别取为1,0.98,0.94,从而分析不同步长因子、不同遗忘因子对相应算法收敛效果的影响。 二、 算法简介 1.自适应算法的基本原理 自适应算法的基本信号关系如下图所示: 图 1b 自适应滤波器框图 输入信号x(n)通过参数可调的数字滤波器后产生输出信号y(n),将其与参考信号d(n)进行比较,形成误差信号e(n)。e(n)通过某种自适应算法对滤波器参数进行调整,最终是e(n)的均方值最小。当误差信号e(n)的均方误差达到最小的时候,可以证明信号y(n)是信号d(n)的最佳估计。 2. LMS 算法简介 LMS 算法采用平方误差最小的原则代替最小均方误差最小的原则,信号基本关系如下: 1 ()()() ()()()(1)()2()()(0,1,2,....1) N i i i y n w n x n i e n d n y n w n w n e n x n i i N μ-=-=-+=+-=-∑ (2) 写成矩阵型式为: ()()()()()() (1)()2()() T y n W n X n e n d n y n W n W n e n X n μ==-+=+ (3) 式(3)中,W(n) 为n 时刻自适应滤波器的权值, 011()[(),(),....()]T N W n w n w n w n -=,N 为自适应滤波器的阶数,本设计中取为2000;X( n) 为n 时刻自适应滤波器的参考输入矢量,由最近N 个信号采样值构成,()[(),(1),....(1)]T X n x n x n x n N =--+;d ( n) 是期望的输出值;e ( n) 为自适应滤波器的输出误差调节信号(简称失调信号) ;μ是控制自适应速度与稳定性的增益常数,又叫收敛因子或步长因子。

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

自适应波束形成与Matlab程序代码注解

1.均匀线阵方向图 (1)matlab 程序 clc; clear all; close all; imag=sqrt(-1); element_num=32;%阵元数为8 d_lamda=1/2;%阵元间距d与波长lamda的关系 theta=linspace(-pi/2,pi/2,200); theta0=0;%来波方向 w=exp(imag*2*pi*d_lamda*sin(theta0)*[0:element_num-1]'); for j=1:length(theta) a=exp(imag*2*pi*d_lamda*sin(theta(j))*[0:element_num-1]'); p(j)=w'*a; end patternmag=abs(p); patternmagnorm=patternmag/max(max(patternmag)); patterndB=20*log10(patternmag); patterndBnorm=20*log10(patternmagnorm); figure(1) plot(theta*180/pi,patternmag); grid on; xlabel('theta/radian') ylabel('amplitude/dB') title([num2str(element_num) '阵元均匀线阵方向图','来波方向为' num2str(theta0*180/pi) '度']); hold on; figure(2) plot(theta,patterndBnorm,'r'); grid on; xlabel('theta/radian') ylabel('amplitude/dB') title([num2str(element_num) '阵元均匀线阵方向图','来波方向为' num2str(theta0*180/pi) '度']); axis([-1.5 1.5 -50 0]);

MATLAB样例之雅克比迭代法

要求: 下面分别使用雅克比迭代法和高斯-赛德尔迭代法求一个方程组的近似解用的线性方程组是按实验要求给的: 7*x1+x2+2*x3=10 x1+8*x2+2*x3=8 2*x1+2*x2+9*x3=6 雅克比迭代法的matlab代码:(老师写的) A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(any(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); while 1 x1=B*x0+f K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end 高斯-赛德尔迭代法matlab代码:(自己改的)

A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(all(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); x00=x0; while 1 x11=B*x0+f; x00(1,1)=x11(1,1); x12=B*x00+f; x00(2,1)=x12(2,1); x13=B*x00+f; x00(3,1)=x13(3,1); x1=x00 K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end

利用MATLAB实现循环卷积.doc

一、实验目的 1.利用MATLAB 实现循环卷积。 2.比较循环卷积与线性卷积的区别。 二、实验条件 PC 机,MATLAB7.0 三、实验内容 1)循环卷积的定义:两个序列的N 点循环卷积定义为: )0()()()]()([1 0N n m n x m h n x n h N k N N <≤-=?∑-= 利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成: (1)初始化:确定循环点数N ,测量输入2个序列的长度。 (2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。 (3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。程序如下: 程序一: clear;close all ; N=10; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1); stem(xxn1,x1); subplot(3,1,2); stem(xxn2,x2); x11=fft(x1,N);

x12=fft(x2,N); y11=x11.*x12; y1=ifft(y11,N); subplot(3,1,3); n=0:length(y1)-1; stem(n,y1,'.'); title('循环卷积的结果'); xlabel('n');ylabel('y1(n)'); 运行后所得图形如下: 观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。程序二: clear;close all; N=40; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; x2=[x2,x2,x2,x2]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1);

自适应载波同步及其Matlab仿真

成都理工大学工程技术学院本科毕业论文 自适应载波同步及其Matlab仿真 作者姓名: 专业名称: 指导老师: 年月日

摘要 自适应滤波算法的研究是现在社会自适应信号处理中最为活跃的研究课题之一。找寻收敛速度快,计算简单,数值稳定性好的自适应滤波算法是研究人员不断努力追求的目标。本设计在论述自适应滤波基本原理的基础上,说明了几种当前几种典型的自适应滤波算法和应用。并对这几种典型自适应滤波算法的性能特点进行简单的比较,给出了算法性能的综合评价。 载波同步是无线通信接收机的主要功能之一,其对通信系统质量的提高至关重要。随着新算法涌现和芯片处理速度的提高,不同的解决方案不断的提出。自适应载波同步是一种依据自适应算法的同步方法,内容新颖。本课题在介绍自适应算法和载波同步问题的基础上,详细讨论了平方差分环路法和锁相环路法,具体包括代价函数、代价函数的导数、迭代公式和原理图等,并在论文的第三部分给出了这两种方法的Matlab仿真。仿真结果验证了这两种方法在跟踪载波相位方面是满足要求的,且收敛速度较快。 关键词:自适应滤波载波同步平方差分环路锁相环路法

Abstact The research of adaptive filtering algorithm is one of the most activity tasks, the goal that researchers want to pursue is to find an adaptive filtering algorithm that converge fast and compute simplely. Based on the basis adaptive filtering principle, this paper introduces several typical adaptive algorithms and applications, then compares those algorithm's characters and gives the orithm performance evaluation. Carrier synchronization is one of the main functions of Wireless communications receiver,it is essential for the improvement in the quality of the communication system. With the emergence of new algorithms and the speed improvement of chip processing, different solutions is proposed continuously. Adaptive carrier synchronization is a synchronization method based on adaptive algorithms, and its content is innovative. Based on the introducing of adaptive algorithm and carrier synchronization, this issue has a detailed discussion of the square difference method and the PLL loop method, including its cost function, cost function derivative, iterative formula and schematic, etc. And the third part of the paper gives two methods of Matlab simulation.Simulation results show the two methods with tracking the carrier phase is to meet the requirements, and convergence speedly. Keywords:adaptive filter, carrier synchronization, differential circle square , phase-locked loop method

matlab循环语句

matlab 基本语句 1.循环语句for for i=s1:s3:s2 循环语句组 end 解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。 例:求1到100的和,可以编程如下: sum=0 for i=1:1:100 sum=sum+i end 这个程序也可以用while语句编程。 注:for循环可以通过break语句结束整个for循环. 2.循环语句while 例:sum=0;i=1; while(i<=100) sum=sum+i;i=i+1; end 3.if语句 if(条件) 语句 end if(条件) 语句 else 语句 end if(条件) 语句 elseif 语句 end 4.关系表达式:

=,>,<,>=,<=,==(精确等于) 5.逻辑表达式:|(或),&(且) 6.[n,m]=size(A)(A为矩阵) 这样可以得到矩阵A的行和列数 n=length(A),可以得到向量A的分量个数;如果是矩阵,则得到矩阵A的行与列数这两个数字中的最大值。 7.!后面接Dos命令可以调用运行一个dos程序。 8.常见函数: poly():为求矩阵的特征多项式的函数,得到的为特征多项式的各个系数。如 a=[1,0,0;0,2,0;0,0,3],则poly(a)=1 -6 11 -6。相当于poly(a)=1入^3+(-6)入^2+11入+(-6)。 compan():可以求矩阵的伴随矩阵. sin()等三角函数。 MATLAB在数学建模中的应用(3) 一、程序设计概述 MATLAB所提供的程序设计语言是一种被称为第四代编程语言的高级程序设计语言,其程序简洁,可读性很强,容易调试。同时,MATLAB的编程效率比C/C++语言要高得多。 MATLAB编程环境有很多。常用的有: 1.命令窗口 2.word窗口 3.M-文件编辑器,这是最好的编程环境。 M-文件的扩展名为“.m”。M-文件的格式分为两种: ①λ M-脚本文件,也可称为“命令文件”。 ② M-函数文件。这是matlab程序设计的主流。λ 保存后的文件可以随时调用。 二、MATLAB程序结构 按照现代程序设计的观点,任何算法功能都可以通过三种基本程序结构来实现,这三种结构是:顺序结构、选择结构和循环结构。其中顺序结构是最基本的结构,它依照语句的自然顺序逐条地执行程序的各条语句。如果要根据输入数据的实际情况进行逻辑判断,对不同的结果进行不同的处理,可以使用选择结构。如果需要反复执行某些程序段落,可以使用循环结构。 1 顺序结构 顺序结构是由两个程序模块串接构成。一个程序模块是完成一项独立功能的逻辑单元,它可以是一段程序、一个函数,或者是一条语句。 看图可知,在顺序结构中,这两个程序模块是顺序执行的,即先执行<程序

用matlab实现自适应图像阈值分割最大类方差法代码

%用matlab实现自适应图像阈值分割最大类方差法代码clear; warning off; SE = strel('diamond',4); BW1 = imread('cameraman.tif'); BW2 = imerode(BW1,SE); BW3 = imdilate(BW2,SE); BW4 = BW1-BW3; %rgb转灰度 if isrgb(BW4)==1 I_gray=rgb2gray(BW4); else I_gray=BW4; end figure,imshow(I_gray); I_double=double(I_gray);%转化为双精度 [wid,len]=size(I_gray); colorlevel=256; %灰度级 hist=zeros(colorlevel,1);%直方图 %threshold=128; %初始阈值 %计算直方图 for i=1:wid for j=1:len m=I_gray(i,j)+1; hist(m)=hist(m)+1; end end hist=hist/(wid*len);%直方图归一化 miuT=0; for m=1:colorlevel miuT=miuT+(m-1)*hist(m); end xigmaB2=0; for mindex=1:colorlevel threshold=mindex-1; omega1=0; omega2=0; for m=1:threshold-1 omega1=omega1+hist(m); end omega2=1-omega1; miu1=0; miu2=0; for m=1:colorlevel if m

基于MATLAB_Simulink机器人鲁棒自适应控制系统仿真研究

第18卷第7期 系统仿真学报?V ol. 18 No. 7 2006年7月Journal of System Simulation July, 2006 基于MATLAB/Simulink机器人鲁棒自适应控制系统仿真研究 高道祥,薛定宇 (东北大学教育部暨辽宁省流程工业综合自动化重点实验室,沈阳 110004) 摘要:介绍了一种在MATLAB/Simulink环境下进行机器人鲁棒自适应控制系统仿真的方法,利 用Matlab软件强大的数值运算功能,将系统模型用Matlab语言编写成M-Function(或S-Function) 文件,通过User-Defined-Function模块嵌入到Simulink仿真环境中,可以充分发挥Simulink模块 实时的动态仿真功能,简化仿真模型的设计,修改和调整。基于M-Function建立机器人系统模型 的方法可以推广到其他复杂控制系统的建模,SimMechanics在建立多自由度连杆机器人受控对象 仿真模型时,简单可靠。 关键词:机器人;Matlab/Simulink;SimMechanics;仿真;鲁棒自适应控制 中图分类号:TP391.9 文献标识码:A 文章编号:1004-731X(2006) 07-2022-04 Simulation Research of Robust Adaptive Control System for Robotic Manipulators Based on MATLAB/Simulink GAO Dao-xiang, XUE Ding-yü (Key Laboratory of Process Industry Automation, Ministry of Education, Northeast University, Shenyang 110004, China) Abstract: A simulation method of robust adaptive control was proposed for the robotic manipulator system. The method took the advantage of the powerful computing function of Matlab to programme M-function (or S-Function) for the system model by Matlab language and embedded it to the Simulink by User-Defined-Function module. The real time dynamic simulating function of Simulink would be exerted adequately and the design, modification and adjust of the system model could be greatly simplified. The method of constructing manipulator control system model based on M-Function could be generalized to the other complicated control system and SimMechanics would make the n-links manipulator model conveniently and credibly. Key words: robotic manipulator; Matlab/Simulink; SimMechanics; simulation; robust adaptive control 引言 一个新的控制算法在付诸使用之前,无论从经济原因还是技术角度,都需要经过仿真阶段来测试控制系统的性能和缺陷。尤其对复杂系统控制的研究,虽然仿真并不能说明控制算法是绝对合理与可靠的,但随着仿真技术的发展,仿真的确是系统设计必不可少的中间步骤。 Matlab/Simulink以其强大的数学运算能力,方便实用的绘图功能及语言的高度集成性成为系统仿真和自动控制领域首选的计算机辅助设计工具。Simulink可以将可视化的模块很方便地组成系统模型的仿真框图,对于使用普通Simulink模块不易搭建的复杂控制系统,用Matlab语言编写M-Function或S-Function文件,通过User-Defined-Function 模块嵌入到Simulink仿真环境中,大大扩充了Simulink的功能。对于机器人这类的复杂控制系统,通过Simulink可以很方便的建立其仿真模型。 机器人控制系统仿真模型中不易采用普通Simulink模块搭建的部分是控制器模型和受控对象—机器人模型,可以采用Matlab语言编写M-Function实现控制器和机器人模型。 收稿日期:2005-05-09 修回日期:2005-08-02 作者简介:高道祥(1972-),男,山东蓬莱人,博士生,研究方向为机器人鲁棒自适应控制。薛定宇(1963-),男,辽宁沈阳人,教授,博导,研究方向为控制系统CAD,机器人控制。另外,由于SimMechanics提供了机构的仿真模块集,对于n自由度的连杆机器人,也可以采用SimMechanics模块进行组建。 1 n连杆机器人的仿真模型 如果不考虑摩擦力等外界干扰的作用,机器人的动力学方程可由下式描述, τ= + +) ( ) , ( ) (q G q q q C q q M (1) 式中,q q q , ,是1 × n向量,表示各个关节的位置,速度,加速度。) (q M是n n×阶对称正定的惯量矩阵。q q q C ) , (是1 × n向量,表示离心力和哥氏力项。) (q G是1 × n向量,表示重力项。τ表示外界输入的控制力矩。由式(1)可以看出,机器人的动力学模型是一个高度复杂,强耦合的非线性时变方程,尤其模型的复杂程度随着自由度的增加呈指数上升趋势。因此,在用Matlab/Simulink进行机器人控制系统的仿真研究时,需要寻求一种简单可靠却行之有效的方法建立机器人控制系统仿真模型。 采用M-Function定制的Simulink模块与普通模块一样具有输入和输出向量,控制器与机器人受控对象的仿真模型函数可用如下关系式描述, ) , , , , (0q q q q q f d d d = τ(2) ) , , (1τ q q f q =(3)

MATLAB实现迭代法最佳松弛因子的选取

迭代法最佳松弛因子的选取 一、问题提出: 针对矩阵430341014A ?? ??=-?? ??-?? ,b=[24;30;-24],用SOR 迭代求解。并选出最佳松弛 因子。理论分析 1.24ω==≈。做出()L ωρ关于ω函数 的图像。 二、理论基础 选取分裂矩阵M 为带参数的下三角矩阵)(1 wL D w M -=, 其中w>0为可选择的松弛因子. 于是,由 ?????+=+f Bx x x k k ) ()1()0() (初始向量 (k=0,1,…,)可构造一个迭代法,其迭代矩阵为A wL D w I L w 1)(---≡ =).)1(()(1wU D w wL D +--- 从而得到解Ax=b 的主次逐次超松弛迭代法. 解Ax=b 的SOR 方法为 ?????+=+f Bx x x k k ) ()1()0() (初始向量 (k=0,1,…,) (1) 其中 w L =).)1(()(1wU D w wL D +---(2) b wL D w f 1)(--= 下面给出解Ax=b 的SOR 迭代法的分量计算公式.记 ,),...,,...,() () () (1)(T k n k i k k x x x x = 由(1)式可得 ,))1(()()()1(wb x wU D w x wL D k k ++-==-+ ).()()()1()()1(k k k k k Dx Ux Lx b w Dx Dx -+++=++ (3) 由此,得到解Ax=b 的SOR 方法的计算公式

?????????==--+==∑∑-==++.),1,0;,...,2,1(/)(,),...,(11) (1)()1()0()0(1)0(为松弛因子 w k n i a x a x a b w x x x x x ii i j n i j k j ij k j ij i k i k i T n (4) 或 ?? ?? ? ??????==--=??+==∑∑-==++.,...),1,0;,...,2,1()/(,,),...,(.11)()1() () 1()0()0(1)0(为松弛因子w k n i a x a x a b w x x x x x x x i j n i j ii k j ij k j ij i i i k i k i T n (5) ※ 若要求选取出最佳松弛因子,则有两种方法: ⑴、 给出w 的最佳范围,当取不同的w 值时,会求出不同的谱半径R 的值, 然后判断出值最小的谱半径。那么这个最小的谱半径所对应的w ,即为所求最佳松弛因子。 ⑵、 给出w 的最佳范围,当取不同的w 值时,由(2)式进行迭代,看它们在 相同精度范围内的迭代次数,找出迭代次数最低的那一个,其所应用的w 即为最佳松弛因子。 三、实验内容: 从表格中可以看出,迭代次数随着松弛因子的增长而呈现先减后增的趋势,当谱半径最小时,其迭代次数最小。则表示出谱半径最小时,其松弛因子为最佳松弛因子。

自适应滤波器MATLAB仿真

自适应滤波器 MATLAB仿真 摘要 : 本文介绍了自适应滤波器的工作原理,以及推导了著名的LMS( Least mean squares )算法。以一个例子演示了自适应滤波器的滤波效果。实验结果表明,该滤波器滤波效果较好。 关键词:自适应滤波器 MATLAB7.0 LMS 算法 Simulate of adaptive filter based on MATLAB7.0 Abstract: This article described the working principle of adaptive filter and deduced the well-known LMS algorithm. Take an example to demonstrate the adaptive filters filtering effects. The results show that the filter has an effective way to filter single. Key words: LMS algorithm Adaptive Filter Matlab7.0 1引言 由 Widrow B 等提出的自适应滤波理论,是在维纳滤波、卡尔曼滤波等线性滤波基础上发展起来的一种最佳滤波方法。由于它具有更强的适应性和更优的滤波性能,从而广泛应用于通信、系统辨识、回波消除、自适应谱线增强、自适应信道均衡、语音线性预测和自适应天线阵等诸多领域[1]。自适应滤波器最大的优点在于不需要知道信号和噪声的统计特性的先验知识就可以实现信号的最佳滤波处理。本文通过一个具体例子和结果论证了自适应滤波器的滤波效果。 2自适应滤波原理及 LMS算法 2.1 自适应滤波原理 图 1 自适应滤波原理图 在自适应滤波器中,参数可调的数字滤波器一般为 FIR 数字滤波器, IIR 数字滤波器或格型数字滤波器。自适应滤波分 2 个过程。第一,输入信号想 x(n) 通过参数可调的数字滤波器后得输出信号 y(n) ,y(n) 与参考信号 d(n) 进行比较得误差信号 e(n) ;第二,通过一种自适应算法和 x(n) 和 e(n) 的值来调节参数可调的数字滤波器的参数,即加权系

matlab中循环语句用法

循环结构:for语句 格式: for 循环变量=表达式1:表达式2:表达式3 循环体 end 【注】:表达式1:循环变量初值, 表达式2:步长,为1时,可省略; 表达式3:循环变量终值。 或: for循环变量=矩阵表达式 循环体 end 【注】:执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 2 while语句: 格式: while(条件) 循环体 end 【注】:条件成立时,执行循环体 3

break语句&& continue语句: break:破坏,破坏循环,终止循环的进行,跳出循环,程序将执行循环语句的下一语句。 continue:继续,循环继续,程序将跳过循环体中剩下的语句,继续下一次循环。 4 循环的嵌套—多重循环结构 5 选择结构:if-else语句 格式: if 表达式 程序模块 end 或 if 表达式 程序模块1 else 程序模块2 end 6 switch语句: 格式:

switch 表达式 case 数值1 程序模块1 case 数值2 程序模块2 case 数值3 程序模块3 ...... otherwise 程序模块n end 执行过程:首先计算表达式的值, 然后将其结果与每一个case后面的数值依次进行比较, 如果相等,则执行该case的程序模块; 如果都不相等,则执行otherwise模块中的语句。 switch语句可以替代多分支的if语句,而且switch语句简洁明了,可读性更好。 7 matlab中一些基本知识: END 注意事项 for循环可以通过break语句结束整个for循环

matlab自适应遗传算法

function [xv,fv]=AdapGA(fitness,a,b,NP,NG,Pc1,Pc2,Pm1,Pm2,eps) %×?êêó|ò?′???·¨ L = ceil(log2((b-a)/eps+1)); x = zeros(NP,L); for i=1:NP x(i,:) = Initial(L); fx(i) = fitness(Dec(a,b,x(i,:),L)); end for k=1:NG sumfx = sum(fx); Px = fx/sumfx; PPx = 0; PPx(1) = Px(1); for i=2:NP PPx(i) = PPx(i-1) + Px(i); end for i=1:NP sita = rand(); for n=1:NP if sita <= PPx(n) SelFather = n; break; end

end Selmother = round(rand()*(NP-1))+1; posCut = round(rand()*(L-2)) + 1; favg = sumfx/NP; fmax = max(fx); Fitness_f = fx(SelFather); Fitness_m = fx(Selmother); Fm = max(Fitness_f,Fitness_m); if Fm>=favg Pc = Pc1*(fmax - Fm)/(fmax - favg); else Pc = Pc2; end r1 = rand(); if r1<=Pc nx(i,1:posCut) = x(SelFather,1:posCut); nx(i,(posCut+1):L) = x(Selmother,(posCut+1):L); fmu = fitness(Dec(a,b,nx(i,:),L)); if fmu>=favg Pm = Pm1*(fmax - fmu)/(fmax - favg); else Pm = Pm2;

MATLAB编程如何不用for循环

MATLAB编程如何不用for循环--以DFT变换矩阵为例 缘起:大家都知道MATLAB中用for循环编写的代码执行起来效率不高,如何用矩阵和向量的运算提升效率对每一个用matlab的人来说都是很有必要的,但是此项功夫高手一般不愿意给初学者讲,此功夫是高手和低手的分水岭,高手们更是拿此功夫在初学者面前炫耀。本人当初怀着很恭敬的心向高手请教,高手笑笑说这要我自己编。出于让后来人受益,帮助和我一样无助的求知者。本人今天话了一天时间将此问题研究下,并且将代码毫无保留的公布出来。希望大家能够受益,阿弥陀佛! 上述W矩阵的第一列代表直流成分,第二列到最后一列是信号的交流成分,可以看出倍频关系!我以前不知道DFT 可以通过矩阵表示。注意matlab中dftmtx实现上述W矩阵的时候没有用1/sqrt(N) 进行归一化!可以通过dftmtx(2)验证,没有1/sqrt(2)。 例1 DFT matrix 是Hermitian的 Nfft = 8; xn=rand(1,Nfft); y=dftmtx(Nfft)*xn.' %结果是个列向量y=dftmtx(Nfft)*x.' 和y=fft(x,Nfft)是等价的 y = xn*dftmtx(Nfft) %结果是个行向量 y=fft(xn,Nfft) %结果是个行向量 %dft变换公式,n代表时域采样点,k代表频域采样点 Y(k)=sum(x.*exp(-j*2*pi*n*k)) 相应的,dftmtx(Nfft)产生的矩阵中,第k行,n列元素=exp(-j*2*pi*k*n/Nfft),与x.'相乘正好对应fft变换后的每个频点值。

例1:双重循环求DFT N = 8; x=rand(1,N); for k=0:N-1 sum=0; % 注意每个X(k)的值不应该受上次计算的影响 for m=0:N-1 w=exp(-j*2*pi/N.*m.*k); %DFT matrix 的每一行的元素是不同的 sum=sum+x(m+1).*w; % 这个循环实际上是计算DFT matrix的每一行与信号x的内积 end X(k+1)=sum; %Matlab下标从1开始 end % 注意X 是个行向量,是个数组,我以前不知道X(k)的循环赋值的结果是个行向量 y=fft(x,N) %验证 例2:单循环求DFT %% x 是行向量的Version,结果X也是行向量 N = 8; x=rand(1,N); m=0:N-1; sum=0; for k=0:N-1 %核心思想是内积运算:x躺着,后面的必须站着 X(k+1)= x*exp(-j*2*pi/N.*m'.*k) ; % 以前这样的表达物理含义是不明确的--> X(k+1)= x*exp(-j*2*pi/N.*m.*k).' ; end y=fft(x,N) %验证 %% x 是列向量的Version,结果X是行向量,fft(x)的结果是列向量 N = 8; x=rand(1,N)'; m=0:N-1; sum=0; for k=0:N-1 % 核心思想是内积运算:x躺着,后面的必须站着 X(k+1)= exp(-j*2*pi/N.*m.*k)*x ; % 以前这样的表达物理含义是不明确的--> X(k+1)= x*exp(-j*2*pi/N.*m.*k).' ; end y=fft(x,N) %验证结果y是个列向量,X是y的转置。因为X按下标赋值的结果是个行向量! 例3:不用循环求DFT %% x 是行向量的Version,结果X也是行向量 N = 8; xn=rand(1,N); %一次去掉2个循环,不要试图一次去掉一个 n=[0:1:N-1]; k=[0:1:N-1]; WN=exp(-j*2*pi/N); nk=n'*k; %看看如何不用for循环来实现,向量的外积N-by-1 multiply 1-by-N WNnk=WN.^nk; %WNnk就是dftmtx(8),dftmtx原来是这样构造的 Xk=xn*WNnk; % 究竟nk这个向量外径是n'*k还是k'*n要看内积在哪一维执行

相关主题