leovikkie 发表于 2011-3-24 10:21

关于离散加速度数据数值积分为速度和位移数据的问题

各位大侠,在下目前在处理一个风的加速度时程曲线,想得到它的速度时程曲线进而得到位移时程曲线,自编程序如下,但运行产生的结果有问题存在。自感觉可能为程序编的不对但苦于找不到原因,希望各位高手可以指点迷津,在下感激不尽!
%输入实测信号数据
clear all;
fs=200;%采样频率
N=11999;%数据个数
n=0:N-1;
t=n/fs;%数据对应时间序列
a=['15.txt'];
b=textread(a);
save filename b;%选择内存中的b变量保存为filename.mat文件
figure
subplot(1,1,1);plot(t,b);
xlabel('时间/s');ylabel('加速度/m/s2');
title('实测加速度时程曲线');
%对实测加速度谱进行小波消噪
%装载采集的信号b.mat
load filename b;%把filename.mat文件中的b变量装入内存
%=============================
%将实测加速度信号中第1到第11999个采样点赋给mydy
indx=1:11999;
mydy=b(indx);
%用db1小波对原始信号进行3层分解并提取系数
=wavedec(mydy,3,'db1');
mya3=appcoef(c,l,'db1',3);
myd3=detcoef(c,l,3);
myd2=detcoef(c,l,2);
myd1=detcoef(c,l,1);
%=============================
%对信号进行强制性消噪处理并图示结果
dd3=zeros(length(myd3),1);
dd2=zeros(length(myd2),1);
dd1=zeros(length(myd1),1);
myc1=;
mys1=waverec(myc1,l,'db1');
figure
subplot(1,1,1);
plot(t,mys1);
xlabel('t(s)'); ylabel('a(t)');
grid;
title('强制消噪后的实测加速度信号');
%将消噪后的实测加速度信号进行积分处理得到位移信号
%强制性消噪信号处理后
v1=cumtrapz(t,mys1);%v就是加速度的数值积分
figure
subplot(2,1,1);plot(t,v1);
xlabel('时间/s');ylabel('速度/m/s');
title('强制消噪后积分的速度时程曲线');
s1=cumtrapz(t,v1);%s就是速度的数值积分
subplot(2,1,2);plot(t,s1);
xlabel('时间/s');ylabel('位移/m');
title('强制消噪后积分的位移时程曲线');
得到的结果如下图所示:
实测加速度曲线
C:\Documents and Settings\Administrator\桌面\PNG1
消噪后加速度曲线
C:\Documents and Settings\Administrator\桌面\PNG2
变换后速度和位移曲线
C:\Documents and Settings\Administrator\桌面\PNG3
明显可以看出计算的速度与位移时程曲线中熟知的大小与曲线的走势与实际情况不符,主要应该是求积分函数cumtrapz得到速度和位移时出现的错误,希望有知道这个函数用法或有其他可解决相同问题的编程方法的高手们多多指点一下,在下甚为感激!

ChaChing 发表于 2011-3-26 21:33

回复 1 # leovikkie 的帖子

1.小波没玩过
2.资料不齐, 无法跟著学习试试看
3.加速度积分成速度的问题, 记的已讨论过许多, 搜索下老帖, 看有没用
页: [1]
查看完整版本: 关于离散加速度数据数值积分为速度和位移数据的问题