首页 冲击响应谱计算的matlab程序

冲击响应谱计算的matlab程序

举报
开通vip

冲击响应谱计算的matlab程序disp(' ') disp(' srs.m ver 2.0 July 3, 2006') disp(' by Tom Irvine Email: tomirvine@aol.com') disp(' ') disp(' This program calculates the shock response spectrum') disp(' of an acceleration time history, which is pre-loaded into Matlab.') disp(' T...

冲击响应谱计算的matlab程序
disp(' ') disp(' srs.m ver 2.0 July 3, 2006') disp(' by Tom Irvine Email: tomirvine@aol.com') 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 a2 clear 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'; else THM = 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) '); else Q=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; % else E=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; end forward=[ 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. break end fn(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_max srs_max = max( abs(x_neg )); end srs_min = min(x_pos); if min( abs(x_neg) ) < srs_min srs_min = min( abs(x_neg )); end % figure(1); plot(fn,x_pos,fn,abs(x_neg),'-.'); % if iunit==1 ylabel('Peak Accel (G)'); else ylabel('Peak Accel (m/sec^2)'); end xlabel('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.1 fmin=0.1; end if fn(1) >= 1 fmin=1; end if fn(1) >= 10 fmin=10; end if fn(1) >= 100 fmin=100; end axis([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:jnum if iunit==1 x_pos(j)=386.*x_pos(j)/(2.*pi*fn(j)); x_neg(j)=386.*x_neg(j)/(2.*pi*fn(j)); else x_pos(j)=x_pos(j)/(2.*pi*fn(j)); x_neg(j)=x_neg(j)/(2.*pi*fn(j)); end end % srs_max = max(x_pos); if max( abs(x_neg) ) > srs_max srs_max = max( abs(x_neg )); end srs_min = min(x_pos); if min( abs(x_neg) ) < srs_min srs_min = min( abs(x_neg )); end % plot(fn,x_pos,fn,abs(x_neg),'-.'); % if iunit==1 ylabel('Velocity (in/sec)'); else ylabel('Velocity (m/sec)'); end xlabel('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
本文档为【冲击响应谱计算的matlab程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_548639
暂无简介~
格式:doc
大小:49KB
软件:Word
页数:7
分类:
上传时间:2012-12-20
浏览量:140