冲击响应谱计算的matlab程序
Z2.11 Matlab求解冲激响应和阶跃响应

2
Xidian University, ICIE. All Rights Reserved
2.2 冲激响应与阶跃响应
第二章 连续系统的时域分析
例 求以下系统的冲激响应和阶跃响应。
7y”(t) + 4y’(t) + 6y(t) = f’(t)+ f(t)
第二章 连续系统的时域分析
Z2.11 Matlab求解冲激响应和阶跃响应
MATLAB提供了专门用于求LTI系统的冲激响应和阶跃响应
的函数。设LTI系统的微分方程为:
n
m
ai y (i) (t) bi f (i) (t)
i 1
j 1
求LTI系统的冲激响应的函数为:
impulse(b, a)
求LTI系统的阶跃响应的函数为:
2.2 冲激响应与阶跃响应
知识点Z2.11
第二章 连续系统的时域分析源自Matlab求解冲激响应和阶跃响应
主要内容:
Matlab求解冲激响应和阶跃响应的函数
基本要求:
了解冲激响应和阶跃响应的Matlab求解方法
1
Xidian University, ICIE. All Rights Reserved
2.2 冲激响应与阶跃响应
解:
a=[7 4 6];
Impulse Response
%构0.2 造系数向量
Amplitude
b=[1 1]; subplot(2,1,1) impulse(b,a);
0
-0.2
0
2
4
6
8
10 12 14 16 18 20
Time (sec)
液体火箭发动机冲击响应谱分析计算方法

为 x ( t) . 一般情况下 , 冲击加速度的测量比较容易 实现 , 因此当基础受到加速度作用时 , 质量块 m 的 运动方程可表示为
mx + cx + kx = ku ( t) + cu ( t)
.. . ..
( 1)
. 因此了解发动机工作状态下的
冲击特性 ,制定相应的抗冲击策略 , 直接关系到全 箭的结构可靠性 . 冲击响应谱在结构分析方面的用 途主要用来衡量冲击作用的效果 ,估计冲击对结构 的损伤势 [ 3 ] . 根据冲击响应谱 , 可以计算在特定冲 击作用下发动机结构零件的强度和发动机自身的 安全性 . 某新型大推力液体火箭发动机在地面试验 过程中 ,测得了全程段的时域数据 , 因测试软件功 能所限 ,不能进行冲击响应谱分析 . 基于此 ,文中从 冲击响应谱概念着手 , 基于 Matlab 软件包开发了 冲击响应谱分析软件 , 力图快速 、 方便的对液体火 箭发动机地面试验数据进行冲击响应谱分析 ,为地 面试验数据的深入分析提供辅助手段 .
3 发动机地面试验冲击响应谱计算
在对某型液体火箭发动机多次地面试验时域 数据进行分析时 ,发现燃气发生器点火时所测的冲 击响应均较大 . 考虑到发动机自身的安全性 , 以及 该启动冲击对全箭结构的影响 ,有必要对发生器启 动冲击进行冲击响应谱分析 . 因发动机地面试验数据采集软件功能所限 ,不 能进行冲击响应谱分析 ,因此地面试验结束后对所 采集的时域数据利用文中开发的 Vibsr s 冲击响应 谱分析软件进行计算 ,所得计算结果导出为 t xt 文 文中件供深入分析地面试验数据时参考 . 考虑到篇 幅所限 ,只给出燃气发生器上一个三向加速度传感 器所测的发生器启动时的冲击响应谱分析结果 . 图 3~5 分别为轴向 、 径向 、 切向加速度传感器所测的 冲击响应及利用 Vibsr s 计算得到的最大冲击响应 谱 . 计算过程中时间范围根据冲击响应的时域图形 给定 ,频率范围选择为 0. 1 ~ 10 k Hz , 其他选项采
matlab冲激响应

Matlab冲激响应引言冲激响应是信号处理中的一个重要概念,用于描述线性时不变系统的响应特性。
在Matlab中,我们可以使用不同的方法来计算和分析系统的冲激响应。
本文将介绍冲激响应的概念、Matlab中计算冲激响应的方法,并通过实例演示如何使用Matlab来计算系统的冲激响应。
冲激响应的概念冲激响应是描述系统对单位冲激信号的响应的函数。
单位冲激信号通常表示为δ(t),它在t=0时刻取值为1,其他时刻取值为0。
冲激响应由系统对单位冲激信号的响应构成,可以用数学公式表示为h(t)。
Matlab中计算冲激响应的方法在Matlab中,我们可以使用多种方法来计算系统的冲激响应,其中包括时域方法、频域方法和离散方法。
以下是常用的几种方法:时域方法时域方法是通过求解系统的微分方程来计算冲激响应。
Matlab提供了lsim函数来计算连续系统和离散系统的冲激响应。
通过传入系统的差分方程和单位冲激信号作为输入,lsim函数可以返回系统的冲激响应。
频域方法频域方法是通过系统的传递函数来计算冲激响应。
Matlab提供了freqresp函数和impulse函数来计算连续系统和离散系统的冲激响应。
通过传入系统的传递函数和频率向量作为输入,freqresp函数可以返回系统的冲激响应。
离散方法离散方法是通过系统的差分方程来计算冲激响应。
Matlab提供了impulse函数来计算离散系统的冲激响应。
通过传入系统的差分方程和单位冲激信号作为输入,impulse函数可以返回系统的冲激响应。
Matlab中计算冲激响应的实例为了更好地理解如何使用Matlab来计算冲激响应,我们将通过一个实例演示。
假设存在一个连续系统的传递函数为H(s),我们想要计算该系统的冲激响应。
步骤1:定义系统的传递函数首先,我们需要使用Matlab的tf函数来定义系统的传递函数。
假设系统的传递函数为H(s)=1/(s+1),代码如下所示:num = 1;den = [1 1];H = tf(num, den);步骤2:计算冲激响应接下来,我们可以使用lsim函数来计算系统的冲激响应。
利用matlab由开环传递函数求闭环传递函数并求其单位冲击和阶跃响应.docx

利用matlab 由开环传递函数求闭环传递函数并求其单位冲击和阶跃响应并绘制输出阶跃响应曲线和脉冲响应曲线 解:编程(见:\work\CT_tch\resp_2_20110522)clear all;close all;%%%%%%%%%%%%%%a0 = [00000.8];bl = [10];b2 = [0.3 1 ];b3 = [0.5 0.7 1];bO = conv(bl,conv(b2,b3)); % bO:开环传递函数分母多项式系数 %%%%闭环传递函数aa = a0;% aa :闭环传递函数分了多项式系数 bb = bO + aO; % bb :闭环传递函数分了多项式系数 disp ('System Closed Loop Transfer Function is :*)aabb%%%%计算:阶跃响应t = 0:0.1 :20y = step (aa, bb, t);% 阶跃响应%%%%绘制:阶跃响应figure(l)plot(t ,y);title 。
阶跃响应); xlabelC时间 /s');ylabel(1S 值);grid ; %%%%计算:figure(2)yy = impulse (aa, bb, t);% 标题:脉冲响应plot(t, yy); titlcC 脉冲响应); xlabelC 时间/s); ylabel(1S 值);grid; %网格%%%%绘制:脉冲响应wt = logspace (-1,1); % 对数空间「0.1, 10)例:设有一个系统的开环传递函数如下函数, 01 %aO:开环传递函数分子多项式系数 % s % % (0.5 s2 + 0.7s+ 1) %标题:阶跃响应 %横坐标 %纵坐标 % io,!! 脉冲响应[mag,phase] = bode (a0 ,b0 ,wt); % 计算:Bode111的幅值和相位[Gm,Pm,Wcg,Wcm] = margin(aO,bO); % 计算:稳定裕度disp ('System Gain Margin and its associated frequency areGm %模值稳定裕度Wcg %幅值穿越频率,剪切频率,1/sdisp ('System Phase Margin and its associated frequency are : Pm %相位稳定裕度Wcm % ■兀相位穿越频率,1/s%%%%绘制:Bode图figure(3)Subplot (211); %对数幅值■频率图amp = 20*logl0(mag); % 20*log(mag), dBsemilogx(wt,amp);title C对数幅值■频率图);xlabel C频率 / rad*); ylabel f 幅值 / dB);grid;subplot (212); %相位-频率图semilogx(wt,phase);title C相位-频率图);xlabel ('频率/ rad*); ylabel('相位/ degree*);grid;运行该程序可得系统的单位阶跃和脉冲响应曲线如下,W 15图1系统的单位阶跃响应曲线系统的Bode图如F,图2 系统的脉冲响应曲线系统怕篦图幅频系统伯律图相麹:-300•■»、1—10图3 系统的Bode图。
matlab由差分方程求冲击响应

matlab由差分方程求冲击响应冲击响应是指系统在接受一个瞬时力或冲击时的反应。
在MATLAB中,可以使用差分方程来求解系统的冲击响应。
本文将介绍如何使用MATLAB进行差分方程求解,以及如何求取系统的冲击响应。
首先,我们需要了解差分方程的基本概念和表示。
差分方程是一种离散时间系统的描述方法,其以当前时刻的输入和之前时刻的输出为基础,通过递推关系来求解下一个时刻的输出。
差分方程可以表示为:y(n) = a1 * y(n-1) + a2 * y(n-2) + ... + aN * y(n-N) + b0 * x(n) + b1 * x(n-1) + ... + bM * x(n-M)其中,y(n)为当前时刻的输出,y(n-1)到y(n-N)为之前时刻的输出,x(n)到x(n-M)为当前时刻的输入,aN和bM为系数。
在MATLAB中,我们可以使用filter函数来求解差分方程。
filter函数的语法如下:y = filter(b,a,x)其中,b和a分别为差分方程中的b系数和a系数,x为输入信号。
函数的输出y为差分方程的响应结果。
假设我们有一个差分方程为:y(n) = 2 * y(n-1) - 3 * y(n-2) + x(n)其中,初始条件为y(0)=1,y(1)=2。
我们想要求解该差分方程的冲击响应。
首先,我们需要定义差分方程的系数和输入信号。
在MATLAB中,可以使用向量或矩阵来表示。
假设输入信号为冲击函数,即只在n=0时为1,其他时刻为0。
我们可以定义输入信号x如下:x = [1 zeros(1,99)];接下来,我们需要定义差分方程的系数。
根据差分方程的形式,我们可以得到a=[1 -2]和b=[1]。
我们可以将它们定义为向量:a = [1 -2];b = [1];然后,我们可以使用filter函数来求解差分方程的响应。
即:y = filter(b,a,x);最后,我们可以绘制差分方程的冲击响应图像。
matlab求冲激响应和阶跃响应数值解

matlab求冲激响应和阶跃响应数值解标题:深度探讨matlab求冲激响应和阶跃响应数值解的方法一、前言在信号与系统课程中,我们经常会遇到需要求解系统的冲激响应和阶跃响应的问题。
而在实际工程实践中,我们往往需要利用计算机进行数值求解。
在本文中,我们将重点探讨如何利用matlab对系统的冲激响应和阶跃响应进行数值求解,并结合个人观点,深入探讨其中的数学原理和工程应用。
二、matlab求解冲激响应的数值解1. 离散系统的冲激响应在信号与系统中,我们经常会遇到离散系统的冲激响应求解问题。
离散系统的冲激响应可以通过卷积求解,而在matlab中,我们可以利用conv函数来进行计算。
具体来说,在matlab中,我们可以定义系统的传递函数H(z),然后利用impulse函数生成单位脉冲输入序列,再利用conv函数与传递函数H(z)进行卷积运算,即可得到离散系统的冲激响应序列。
2. 个人观点与实践应用对于离散系统的冲激响应,我个人认为在实际工程中,常常需要对数字滤波器进行设计和分析。
而利用matlab求解冲激响应可以帮助工程师们更好地理解数字滤波器的特性,从而进行参数调整和性能优化。
三、matlab求解阶跃响应的数值解1. 连续系统的阶跃响应在连续系统中,阶跃响应是指系统在接受单位阶跃输入后的响应。
在matlab中,我们可以利用step函数来求解连续系统的阶跃响应。
具体来说,我们可以利用tf函数定义连续系统的传递函数G(s),然后利用step函数对系统进行仿真,即可得到连续系统的阶跃响应曲线。
2. 个人观点与实践应用对于连续系统的阶跃响应,我认为在控制系统工程中具有重要的应用价值。
控制系统工程师们往往需要对系统的阶跃响应进行分析和优化,而利用matlab进行阶跃响应的数值求解,可以帮助工程师们更好地理解系统的动态特性,从而提高系统的稳定性和性能。
四、总结与回顾通过对matlab求解冲激响应和阶跃响应的数值解的深入探讨,我们不仅对系统的动态特性有了更深入的理解,同时也学会了如何利用matlab来进行系统动态特性的数值分析。
用Matlab求冲激响应的几种方法

则 系统 函数 为
G ㈤ = =
然 后输 人 Ma t l a b程 序 :
y l= d s o l v e f ‘D2 y+2 Dy + 5 0 Y : He a v i —
6 ,一 0 . 0 8 ,0 . 1 2 ] ) ;屏幕 上 就会 显示 与 图 1 一 样
的结果 。
图 2 先 求 阶跃 响应 然 后 求 导
采用直接调用 i mp u l s e函数 的方 法 求 解 。
Ma t l a b程 序 为 :
s i d e ’ , ’D y( 0) =0,Y ( 0 ) =0’ ) ;
a= [ 1 ,2,5 0] ;
y 2=d i f( y 1 ) ;
运行可得 : y 2=1 / 7 e x p (一t ) ¥s i n( 7 t ) 再 输 入 He a v i s i d e
b= [ 1 ] ;
i mp u l s e( b ,a ) ;
● 第 一作 者 : 贺 富 堂 ( 1 9 5 7一) , 男 ,工 学 硕 士 , 高 级 工 程 师 ,多 年 来 主 要 从 事 电 路 、 电 磁 场 及 信 号 与 系 统 的 实 验 教 学
工作。 ● 收稿 日期 :2 0 1 5一 O 1 —0 6
称 冲激 响 应 。笔 者 常 常 遇 到 对 同 一 上 机 题 目,学 生
用 不 同 的方 法 解 出 的 结 果 似 乎 不 同 的情 况 ,具 体 题
目是 : 已知 微 分 方 程
Y ( t ) +2 Y ( t ) + 5 0 y( t ) =x ( t ) 果 。本 题 有 3种 解 法 。 ( 0 )
matlab 冲击响应谱

matlab 冲击响应谱冲击响应谱(shock response spectrum, SRS)是一种对于结构体系进行受冲击载荷响应分析的工具,用于评估结构在受到冲击载荷作用下的响应情况。
Matlab可以用于计算和绘制冲击响应谱。
要计算冲击响应谱,首先需要定义冲击载荷的时间历程和结构物的动力特性。
假设冲击载荷的时间历程为A(t),结构物的动力特性为d(t),则冲击响应谱可以通过以下步骤来计算:1. 计算结构物的频率响应函数(Frequency Response Function, FRF),用于描述结构物对频率激励的响应情况。
可以使用Matlab内置的函数`freqresp`来计算FRF,例如:```matlabsys = tf(A, B, C, D); % 定义结构物的传递函数w = logspace(-2, 2, 1000); % 定义频率范围G = freqresp(sys, w); % 计算频率响应函数```2. 根据冲击载荷的时间历程和结构物的动力特性,计算结构物的动力响应。
可以使用Matlab内置的函数`lsim`来模拟结构物的动力响应,例如:```matlabt = linspace(0, 10, 1000); % 定义时间范围x = A.*exp(-0.5*(t-5).^2/2); % 定义冲击载荷的时间历程y = lsim(sys, x, t); % 计算结构物的动力响应```3. 根据结构物的动力响应,计算冲击响应谱。
可以使用Matlab内置的函数`abs`来计算动力响应的绝对值,在频域上进行峰值计算,例如:```matlabSRS = abs(G).*max(abs(y)); % 计算冲击响应谱```4. 将冲击响应谱绘制成图形。
可以使用Matlab内置的函数`semilogx`来绘制半对数坐标系下的图形,例如:```matlabsemilogx(w, SRS); % 绘制冲击响应谱xlabel('Frequency (Hz)'); % 设置x轴标签ylabel('Shock Response (g)'); % 设置y轴标签title('Shock response spectrum'); % 设置图形标题```利用上述步骤,可以使用Matlab计算和绘制冲击响应谱,从而评估结构在受到冲击载荷作用下的响应情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
disp(' ')disp(' srs.m ver 2.0 July 3, 2006')disp('byTomIrvineEmail:*****************')disp(' ')disp(' This program calculates the shock response spectrum')disp(' of an acceleration time history, which is pre-loaded into Matlab.') disp(' The time history must have two columns: time(sec) & acceleration') disp(' ')%clear t;clear y;clear yy;clear n;clear fn;clear a1;clear a2clear b1;clear b2;clear jnum;clear THM;clear resp;clear x_pos;clear x_neg;%iunit=input(' Enter acceleration unit: 1= G 2= m/sec^2 ');%disp(' ')disp(' Select file input method ');disp(' 1=external ASCII file ');disp(' 2=file preloaded into Matlab ');file_choice = input('');%if(file_choice==1)[filename, pathname] = uigetfile('*.*');filename = fullfile(pathname, filename);%fid = fopen(filename,'r');THM = fscanf(fid,'%g %g',[2 inf]);THM=THM';elseTHM = input(' Enter the matrix name: ');end%t=double(THM(:,1));y=double(THM(:,2));%tmx=max(t);tmi=min(t);n = length(y);%out1 = sprintf('\n %d samples \n',n);disp(out1)%dt=(tmx-tmi)/(n-1);sr=1./dt;%out1 = sprintf(' SR = %g samples/sec dt = %g sec \n',sr,dt); disp(out1)%fn(1)=input(' Enter the starting frequency (Hz) ');if fn(1)>sr/30.fn(1)=sr/30.;end%idamp=input(' Enter damping format: 1= damping ratio 2= Q '); %disp(' ')if(idamp==1)damp=input(' Enter damping ratio (typically 0.05) ');elseQ=input(' Enter the amplification factor (typically Q=10) '); damp=1./(2.*Q);end%disp(' ')disp(' Select algorithm: ')disp(' 1=Kelly-Richman 2=Smallwood ');ialgorithm=input(' ');%tmax=(tmx-tmi) + 1./fn(1);limit = round( tmax/dt );n=limit;yy=zeros(1,limit);for i=1:length(y)yy(i)=y(i);end%disp(' ')disp(' Calculating response..... ')%% SRS engine%for j=1:1000%omega=2.*pi*fn(j);omegad=omega*sqrt(1.-(damp^2));cosd=cos(omegad*dt);sind=sin(omegad*dt);domegadt=damp*omega*dt;%if(ialgorithm==1)a1(j)=2.*exp(-domegadt)*cosd;a2(j)=-exp(-2.*domegadt);b1(j)=2.*domegadt;b2(j)=omega*dt*exp(-domegadt);b2(j)=b2(j)*( (omega/omegad)*(1.-2.*(damp^2))*sind -2.*damp*cosd );b3(j)=0;%elseE=exp(-damp*omega*dt);K=omegad*dt;C=E*cos(K);S=E*sin(K);Sp=S/K;%a1(j)=2*C;a2(j)=-E^2;b1(j)=1.-Sp;b2(j)=2.*(Sp-C);b3(j)=E^2-Sp;endforward=[ b1(j), b2(j), b3(j) ];back =[ 1, -a1(j), -a2(j) ];%resp=filter(forward,back,yy);%x_pos(j)= max(resp);x_neg(j)= min(resp);%jnum=j;if fn(j) > sr/8.breakendfn(j+1)=fn(1)*(2. ^ (j*(1./12.)));end%% Output options%disp(' ')disp(' Select output option ');choice=input(' 1=plot only 2=plot & output text file ' );disp(' ')%if choice == 2%%[writefname, writepname] = uiputfile('*','Save SRS data as');writepfname = fullfile(writepname, writefname);writedata = [fn' x_pos' (abs(x_neg))' ];fid = fopen(writepfname,'w');fprintf(fid,' %g %g %g\n',writedata');fclose(fid);%%% disp(' Enter output filename ');% SRS_filename = input(' ','s');%% fid = fopen(SRS_filename,'w');% for j=1:jnum% fprintf(fid,'%7.2f %10.3f %10.3f\n',fn(j),x_pos(j),abs(x_neg(j)));% end% fclose(fid);end%% Plot SRS%disp(' ')disp(' Plotting output..... ')%% Find limits for plot%srs_max = max(x_pos);if max( abs(x_neg) ) > srs_maxsrs_max = max( abs(x_neg ));endsrs_min = min(x_pos);if min( abs(x_neg) ) < srs_minsrs_min = min( abs(x_neg ));end%figure(1);plot(fn,x_pos,fn,abs(x_neg),'-.');%if iunit==1ylabel('Peak Accel (G)');elseylabel('Peak Accel (m/sec^2)');endxlabel('Natural Frequency (Hz)');Q=1./(2.*damp);out5 = sprintf(' Acceleration Shock Response Spectrum Q=%g ',Q);title(out5);grid;set(gca,'MinorGridLineStyle','none','GridLineStyle',':','XScale','log ','YScale','log');legend ('positive','negative',2);%ymax= 10^(round(log10(srs_max)+0.8));ymin= 10^(round(log10(srs_min)-0.6));%fmax=max(fn);fmin=fmax/10.;%fmax= 10^(round(log10(fmax)+0.5));%if fn(1) >= 0.1fmin=0.1;endif fn(1) >= 1fmin=1;endif fn(1) >= 10fmin=10;endif fn(1) >= 100fmin=100;endaxis([fmin,fmax,ymin,ymax]);%disp(' ')disp(' Plot pseudo velocity? ');vchoice=input(' 1=yes 2=no ' );if(vchoice==1)figure(2);%% Convert to pseudo velocity%for j=1:jnumif iunit==1x_pos(j)=386.*x_pos(j)/(2.*pi*fn(j));x_neg(j)=386.*x_neg(j)/(2.*pi*fn(j));elsex_pos(j)=x_pos(j)/(2.*pi*fn(j));x_neg(j)=x_neg(j)/(2.*pi*fn(j));endend%srs_max = max(x_pos);if max( abs(x_neg) ) > srs_maxsrs_max = max( abs(x_neg ));endsrs_min = min(x_pos);if min( abs(x_neg) ) < srs_minsrs_min = min( abs(x_neg ));end%plot(fn,x_pos,fn,abs(x_neg),'-.');%if iunit==1ylabel('Velocity (in/sec)');elseylabel('Velocity (m/sec)');endxlabel('Natural Frequency (Hz)');Q=1./(2.*damp);out5 = sprintf(' Pseudo Velocity Shock Response Spectrum Q=%g ',Q); title(out5);grid;set(gca,'MinorGridLineStyle','none','GridLineStyle',':','XScale','log ','YScale','log');legend ('positive','negative',2);%ymax= 10^(round(log10(srs_max)+0.8));ymin= 10^(round(log10(srs_min)-0.6));%axis([fmin,fmax,ymin,ymax]); end。