声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 10863|回复: 52

[小波] 请各位对照我师兄的论文看看我的程序

[复制链接]
发表于 2007-7-2 10:50 | 显示全部楼层 |阅读模式

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

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

x
我首先模拟的是一个结构的加速度图形,但和师兄的不一样,然后通过小波分析采用bior6.8 分析它的损伤信号,但关键是损伤5%不知道该怎么加进去,这是我的硕士论文还请各位高手帮忙,小弟感激不尽,以下是我的程序,做如下说明:

说明:
在下面的程序中,其中的k就是以后将要出现5%损伤的一个系数,不知道怎么是他成为损伤5%的信号,在m文件中主要对应的解得方程是mx''+cx'+kx=f
danziyoudukuangjia.m

  function xdot=danziyoudukuangjia(t,x)
F=20*sin(25*t);
  M=31.2;
  C=0.01;
  K=67.51;
xdot=[x(2);(1/M)*(F-C*x(2)-K*x(1))];

执行文件:
执行文件说明:
在这个程序里面我加入了冲击信号x2,这是为了符合师兄论文中,30s出现损伤的条件,但请注意我并没有改变刚度来实现,这是现在最大的问题,再就是,我师兄的加速度信号中也还有5%的k的损伤,我也没有加进去,请各位高手帮忙啊
clc;clear all;
close all;
t0=0;
   tf=60;
   x0=[0,0]';
   [t,x]=ode45('danziyoudukuangjia',[0:0.005:60],x0);
   d=x(:,1);
   v=x(:,2);
   
t=0:0.005:60;
F=20*sin(25*t);                                
M=31.2;
C=0.01;
K=67.51;
s1=(1/M)*(F-C*v.'-K*d.');

T=12001;
t=0:0.005:60;
x2=zeros(1,T);
x2(6001)=1;
s=s1+0.01*randn(1,12001)+x2;

%subplot(311);plot(t,s);
%AXIS([0 60 -10 10]);%单层框架加速度信号输出

%下面进行离散的单尺度小波变换并生成,各尺度上的信号

[c,l]=wavedec(s,5,'bior6.8');%对第一信号进行3尺度一维离散小波分解,采用墨西哥小帽函数
%提取结构的低频和高频信号
ca3=appcoef(c,l,'bior6.8',5);%提取第三尺度系数的低频
[cd1,cd2,cd3,cd4,cd5]=detcoef(c,l,[1,2,3,4,5]);%提取第一、二、三尺度系数的高频
%重构信号的低频和高频部分
a3=wrcoef('a',c,l,'bior6.8',3);
d1=wrcoef('d',c,l,'bior6.8',1);
d2=wrcoef('d',c,l,'bior6.8',2);
d3=wrcoef('d',c,l,'bior6.8',3);
d4=wrcoef('d',c,l,'bior6.8',4);
d5=wrcoef('d',c,l,'bior6.8',5);
%显示多尺度一维信号的分解结果

subplot(611);plot(t,a3);title('信号的低频细节部分');%AXIS([0 60 -5 5]);
subplot(612);plot(t,d1);title('Detailsd1');%AXIS([0 60 -5 5]);
subplot(613);plot(t,d2);title('Detailsd2');%AXIS([0 60 -5 5]);
subplot(614);plot(t,d3);title('Detailsd3');%AXIS([0 60 -5 5]);
subplot(615);plot(t,d4);title('Detailsd4');%AXIS([0 60 -5 5]);
subplot(616);plot(t,d5);title('Detailsd5');%AXIS([0 60 -5 5]);

Doc1.doc

192 KB, 下载次数: 160

师兄的论文主体

回复
分享到:

使用道具 举报

发表于 2007-7-2 11:01 | 显示全部楼层
在function xdot=danziyoudukuangjia(t,x) 中
添加下面这句:
K=(t<=30)*K+(t>30)*K*0.95

能否实现你的以K的减少来表现损伤出现这个目的。
发表于 2007-7-2 11:42 | 显示全部楼层
将 "K=67.51;"这句话改成如下就可以了
if(t<30)
        K=67.51;
else
        K=67.51*0.95;
end
发表于 2007-7-2 11:46 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-9 13:18 编辑
原帖由 zhlong 于 2007-7-2 11:01 发表
在function xdot=danziyoudukuangjia(t,x) 中
添加下面这句:

能否实现你的以K的减少来表现损伤出现这个目的。

我不是很喜欢这种写程序的风格,虽然程序比较短,但是意义不明显. 等过几天之后,你自己再看的时候,自己也要想一想是什么意思.

评分

1

查看全部评分

 楼主| 发表于 2007-7-2 15:15 | 显示全部楼层

回复 #3 VibrationMaster 的帖子

请继续请教,我现在的问题是,加速度图形现在和师兄的图形现在差别还是很大,还有执行文件中k=61.75还是加入那个循环语句啊,一旦在执行文件和m文件中都加入了循环语句,损伤就看不出来了,这是我修改后的程序:
clc;clear all;
close all;
t0=0;
   tf=60;
   x0=[0,0]';

   [t,x]=ode45('danziyoudukuangjia',[0:0.005:60],x0);
   d=x(:,1);
   v=x(:,2);
   
t=0:0.005:60;

F=20*sin(25*t);                                
M=31.2;
C=0.01;
K=67.51;
s1=(1/M)*(F-C*v.'-K*d.');

T=12001;
t=0:0.005:60;
x2=zeros(1,T);
x2(6001)=1;

s=s1+0.01*randn(1,12001)+x2;



%subplot(311);plot(t,s);
%AXIS([0 60 -10 10]);%单层框架加速度信号输出


%下面进行离散的单尺度小波变换并生成,各尺度上的信号


[c,l]=wavedec(s,5,'bior6.8');%对第一信号进行3尺度一维离散小波分解,采用墨西哥小帽函数

%提取结构的低频和高频信号
ca3=appcoef(c,l,'bior6.8',5);%提取第三尺度系数的低频
[cd1,cd2,cd3,cd4,cd5]=detcoef(c,l,[1,2,3,4,5]);%提取第一、二、三尺度系数的高频

%重构信号的低频和高频部分
a3=wrcoef('a',c,l,'bior6.8',3);
d1=wrcoef('d',c,l,'bior6.8',1);
d2=wrcoef('d',c,l,'bior6.8',2);
d3=wrcoef('d',c,l,'bior6.8',3);
d4=wrcoef('d',c,l,'bior6.8',4);
d5=wrcoef('d',c,l,'bior6.8',5);

%显示多尺度一维信号的分解结果


subplot(611);plot(t,a3);title('信号的低频细节部分');%AXIS([0 60 -5 5]);

subplot(612);plot(t,d1);title('Detailsd1');%AXIS([0 60 -5 5]);

subplot(613);plot(t,d2);title('Detailsd2');%AXIS([0 60 -5 5]);

subplot(614);plot(t,d3);title('Detailsd3');%AXIS([0 60 -5 5]);

subplot(615);plot(t,d4);title('Detailsd4');%AXIS([0 60 -5 5]);

subplot(616);plot(t,d5);title('Detailsd5');%AXIS([0 60 -5 5]);
您改后运行了吗,我运行后检测不到损伤了,请指教

[ 本帖最后由 zhangnan3509 于 2007-7-10 17:17 编辑 ]
 楼主| 发表于 2007-7-2 15:22 | 显示全部楼层

贴错了

m文件修改:
function xdot=danziyoudukuangjia(t,x)
F=20*sin(25*t);
  M=31.2;
  C=0.01;
if(t<30)
        K=67.51;
else
        K=67.51*0.95;
end

xdot=[x(2);(1/M)*(F-C*x(2)-K*x(1))];



执行文件:
clc;clear all;
close all;
t0=0;
   tf=60;
   x0=[0,0]';
   [t,x]=ode45('danziyoudukuangjia',[0:0.005:60],x0);
   d=x(:,1);
   v=x(:,2);
   
t=0:0.005:60;
F=20*sin(25*t);                                
M=31.2;
C=0.01;
if(t<30)
        K=67.51;
    else
        K=67.51*0.95;
          end

s1=(1/M)*(F-C*v.'-K*d.');
%T=12001;
%t=0:0.005:60;
%x2=zeros(1,T);
%x2(6001)=1;
s=s1+0.01*randn(1,12001);%+x2;

%subplot(311);plot(t,s);
%AXIS([0 60 -10 10]);%单层框架加速度信号输出

%下面进行离散的单尺度小波变换并生成,各尺度上的信号

[c,l]=wavedec(s,5,'bior6.8');%对第一信号进行3尺度一维离散小波分解,采用墨西哥小帽函数
%提取结构的低频和高频信号
ca3=appcoef(c,l,'bior6.8',5);%提取第三尺度系数的低频
[cd1,cd2,cd3,cd4,cd5]=detcoef(c,l,[1,2,3,4,5]);%提取第一、二、三尺度系数的高频
%重构信号的低频和高频部分
a3=wrcoef('a',c,l,'bior6.8',3);
d1=wrcoef('d',c,l,'bior6.8',1);
d2=wrcoef('d',c,l,'bior6.8',2);
d3=wrcoef('d',c,l,'bior6.8',3);
d4=wrcoef('d',c,l,'bior6.8',4);
d5=wrcoef('d',c,l,'bior6.8',5);
%显示多尺度一维信号的分解结果

subplot(611);plot(t,a3);title('信号的低频细节部分');%AXIS([0 60 -5 5]);
subplot(612);plot(t,d1);title('Detailsd1');%AXIS([0 60 -5 5]);
subplot(613);plot(t,d2);title('Detailsd2');%AXIS([0 60 -5 5]);
subplot(614);plot(t,d3);title('Detailsd3');%AXIS([0 60 -5 5]);
subplot(615);plot(t,d4);title('Detailsd4');%AXIS([0 60 -5 5]);
subplot(616);plot(t,d5);title('Detailsd5');%AXIS([0 60 -5 5]);
报错内容:
??? Error: File: C:\MATLAB6p5\work\danziyoudukuangjia.m Line: 1 Column: 5
Missing operator, comma, or semicolon.
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\private\odearguments.m
On line 76  ==>     if (nargin(ode) == 2)           
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\ode45.m
On line 155  ==> [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, args, ...
 楼主| 发表于 2007-7-2 15:24 | 显示全部楼层

继续请教阿

现在报错出了这些错误,我每天上网的时间有限制,我在外省,也没有些知道材料,劳烦各位费心,小弟感激不尽
 楼主| 发表于 2007-7-2 17:16 | 显示全部楼层

问题解决,信号中的无法检测出损伤信号!!!

现在信号中的刚度损伤信号无法检测了,我现在迷糊了,到底k的循环语句是加在m文件里面还是加在执行文件里面,还是都加,请指教,时间比较紧阿,麻烦各位了,我上传我做出来图形现在传不上来,顺便请各位告诉我怎么把自己的图形,贴到回复里面啊

[ 本帖最后由 zhlong 于 2007-7-2 17:23 编辑 ]
发表于 2007-7-2 17:23 | 显示全部楼层

回复 #8 猴王 的帖子

发表于 2007-7-2 17:33 | 显示全部楼层

回复 #8 猴王 的帖子

我试了一下没有出现你的报错信息,不过得到的图形还是和上次差不多。
我觉得你是不是应该考虑一下你的动力学方程是不是对的
发表于 2007-7-2 18:57 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-9 13:18 编辑
原帖由 猴王 于 2007-7-2 17:16 发表
现在信号中的刚度损伤信号无法检测了,我现在迷糊了,到底k的循环语句是加在m文件里面还是加在执行文件里面,还是都加,请指教,时间比较紧阿,麻烦各位了,我上传我做出来图形现在传不上来,顺便请各位告诉我怎 ...

1。只加在ode所调用的文件
2。把刚度减小的狠一些,比如减少到5%
3。可暂时将阻尼设成0,然后再逐渐加大
4。执行文件中计算s1(加速度)的方式是不恰当的,应该根据v由差分来计算。

[ 本帖最后由 zhlong 于 2007-7-2 19:33 编辑 ]
 楼主| 发表于 2007-7-2 19:39 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-9 13:18 编辑
原帖由 VibrationMaster 于 2007-7-2 18:57 发表

1。只加在ode所调用的文件
2。把刚度减小的狠一些,比如减少到5%
3。可暂时将阻尼设成0,然后再逐渐加大
4。执行文件中计算s1(加速度)的方式是不恰当的,应该根据v由差分来计算。

十分感谢您的耐心指教,针对您的第一个改正,也就是我在计算s1的时候根本不用再把k,m.c,f进行另外的附值,那我的执行文件应该怎么来完成,第二,刚度如果减小到5%那这个结构就失去了它的使用价值,也就是我的检测就毫无意义,第三,阻尼可以设成0,阻尼的大小主要影响到其图形的能量,我觉得这个对奇异点的影响应该不大,第四,可不可以请您对差分作个示范,我这里的教材,就个matlab和有限元的联系,劳烦您了,算了,我去镇上看看,有没有卖的吧,再次十分感谢您的回复指导
发表于 2007-7-2 19:45 | 显示全部楼层
s1=diff(v);
不过这个和你原来计算的似乎差别不大。
 楼主| 发表于 2007-7-2 19:46 | 显示全部楼层

回复 #11 VibrationMaster 的帖子

是不是在执行文件中还是这样的格式呢F=20*sin(25*t);                                
M=31.2;
C=0.01;
K=67.51
而function里面,k就是那个循环语句
 楼主| 发表于 2007-7-2 19:51 | 显示全部楼层

回复 #11 VibrationMaster 的帖子

请您,能不能给我做个把k损伤5%加入信号的示范,我这里实在材料相当少
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 15:10 , Processed in 0.069812 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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