声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 11805|回复: 36

[随机振动] 由加速度时程到位移时程

[复制链接]
发表于 2006-10-13 12:42 | 显示全部楼层 |阅读模式

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

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

x
本人已有编好的考虑地震动空间变异性的地震动加速度时程,但是要将其转为位移时程,这样通用程序使用才方便点,下面是变换思路:
1、对加速度时程进行傅立叶变换,得出其加速度的傅氏谱:
2、对要求的位移时程进行傅立叶变换,得出其位移的傅氏谱;
3、对位移傅氏谱进行二阶微分,得到加速度的傅氏谱值,利用已知的加速度谱和频率分量可以求出位移傅氏谱
4、对位移傅氏谱进行逆傅立叶变换求出位移时程。
具体推导方程和程序见附件,希望大家帮我解决一下这个问题,也希望大家讨论讨论该方法的可行性!谢谢!


   (附件已删除)

[ 本帖最后由 xinyuxf 于 2006-12-26 16:32 编辑 ]

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2006-10-13 16:58 | 显示全部楼层
我只用时域方法做过,频域的方法没有试过,但是据说幅值需要概念清楚才能矫正。

其他的没有仔细考虑,请高手继续。

[ 本帖最后由 toes 于 2006-10-14 14:19 编辑 ]
 楼主| 发表于 2006-10-14 09:54 | 显示全部楼层
toes,你好,时域的我也过了,但是积分出来的位移离零线偏离较远,资料上说是由于地震动加速度记录的误差分量造成的,即所谓的零点漂移现象,但我的波是自编的人工波,需要做滤波处理吗?你是怎么处理的,希望能和你交流,我的QQ:50235129
 楼主| 发表于 2006-10-14 10:06 | 显示全部楼层
附上时程曲线,请高人分析原因,注:加速度为第一个附件中的加速度时程。

加速度-速度-位移时程曲线

加速度-速度-位移时程曲线
发表于 2006-10-14 12:30 | 显示全部楼层
建议楼上的看一下《MATLAB在振动信号处理中的应用》这本书
上面就有这个原例子
我没有电子版的,你可以去图书馆借或者买一本,才32块!
发表于 2006-10-14 18:36 | 显示全部楼层
[时间序列的积分变换]
实验室没有扫描的设备
我只好一个个地敲上去了,累!
要用的自己拿哈

clear;clc;close all;
%%%%%%%%%%%%%%%%%%%%%%%
fni=input('频域积分-输入数据文件名:','s');
fid=fopen(fni,'r');
sf=fscanf(fid,'%f',1);           % 采样频率
fmin=fscanf(fid,'%f',1);         % 最小截止频率
fmax=fscanf(fid,'%d',1);         % 最大截止频率
c=fscanf(fid,'%d',1);            % 单位变换系数
it=fscanf(fid,'%s',1);           % 积分次数
sx=fscanf(fid,'%s',1);           %横坐标的标注
sy1=fscanf(fid,'%s',1);           %纵坐标输入单位的标注
sy2=fscanf(fid,'%s',1);           %纵坐标输出单位的标注
fno=fscanf(fid,'%s',1);           %输出数据的文件名
x=fscanf(fid,'%f',[1,inf]);    % 按行读入原始信号数据
status=fclose(fid);
% 计算输入数据的长度
nt=length(x);
% 建立时间向量
t=0:1/sf:(n-1)/sf;
% 取大于n且与其最接近的2的整数次方为FFT长度
nf=2^nextpow2(nt);
% FFT 变换
y=fft(x,nfft);
% 计算频率间隔
df=sf/nfft;
% 计算指定频带对应频率数组的下标
ni=round(fmin/df+1);
na=round(fmax/df+1);
% 计算原频率间隔
dw=2*pi*df;
% 建立正的离散原频率向量
w1=0:dw:2*pi*(0.5*sf-df);
% 建立负的离散原频率向量
w2=2*pi*(0.5*sf-df):-dw:0;
% 将正负付给一个数组
w=[w1,w2];
%以积分次数为指数,建立元频率向量
w=w.^it;
% 进行积分的频域变换
a=zeros(1,nfft);
a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);
if it==2
    % 进行二次积分的相位变换
    y=-a;
else
    % 进行一次积分的相位变换
    real(y)=imag(a);
    imag(y)=-real(a);
end
a=zeros(1,nfft);
% 消除指定正频带外的频率成分
a(ni:na)=y(ni:na);
% 消除指定正频带外的频率成分
a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);

% ifft变换
y=ifft(a,nfft);
% 积分结果
y=real(y(1:n))*c;
subplot(211)
plot(t,x);
xlabel(sx);ylabel(sy1);
grid on;
% 积分后曲线
subplot(212)
plot(t,y);
xlabel(sx);ylabel(sy2);
grid on;
% 打开文件输出积分后的数据
fid=fopen(fno,'w');
for k=1:n
    fprint(fid,'%f%f\n',t(k),y(k));
end
status=fclose(fid)

评分

1

查看全部评分

发表于 2006-10-14 18:44 | 显示全部楼层
to wangbohust:
本来时域的程序是给别人做的,今天问别人要程序,结果他说我的是错的,只是一直没告诉我,晕死。
发表于 2006-10-14 20:49 | 显示全部楼层
无水1324 :
不对啊,粗看了一下你贴的程序,至少这个地方不对:

    % 进行一次积分的相位变换
    real(y)=imag(a);
    imag(y)=-real(a);

这个赋值语句怎么对呢?
发表于 2006-10-14 21:52 | 显示全部楼层
原帖由 toes 于 2006-10-14 20:49 发表
无水1324 :
不对啊,粗看了一下你贴的程序,至少这个地方不对:

    % 进行一次积分的相位变换
    real(y)=imag(a);
    imag(y)=-real(a);

这个赋值语句怎么对呢?


是对的,
保存的数据注意格式
发表于 2006-10-16 14:15 | 显示全部楼层
我编写的时域方法程序,方法很粗糙,只是尝试一下
信号太简单,可能需要加窗预处理一下;
积分应该用精度高一点的方法,比如辛普森积分;
去除直流的方法可以再考虑;



  1. function Acc2Dis
  2. % 加速度信号转换成位移信号
  3. % 用时域法。

  4. clear
  5. clc

  6. fs=1024;          %采样频率
  7. N=20000;           %采样点数
  8. t=(0:N-1)/fs;     %采样时间序列s
  9. A = 2; % 幅值

  10. w = 4; % 信号频率
  11. a = A*sin(w*t); % 加速度信号

  12. subplot(4,1,1);
  13. plot(t,a);
  14. title('加速度');

  15. subplot(4,1,2);

  16. % 积分。用了矩形面积计算积分,应该用精确一点的积分方法。
  17. a_Mut_dt = a./fs;
  18. for ii = 1:N-1
  19.    s(ii) = sum( a_Mut_dt(1:ii+1) );
  20. end

  21. % 去除直流分量
  22. s_fft = fft(s,N-1);
  23. s_fft( 1:2 ) = 0;
  24. s_fft( end-2: end) = 0;
  25. s_ifft = real( ifft(s_fft,N-1) );

  26. plot(t(2:end),s_ifft);
  27. title('速度');
  28. ylim( [-A/w A/w])

  29. subplot(4,1,3);

  30. % 积分。用了矩形面积计算积分,应该用精确一点的积分方法。
  31. s_Mut_dt = s_ifft./fs;
  32. for ii = 1:N-2
  33.    d(ii) = sum( s_Mut_dt(1:ii+1) );
  34. end

  35. % 去除直流分量
  36. d_fft = fft(d,N-2);
  37. d_fft( 1:2 ) = 0;
  38. d_fft( end-2: end) = 0;
  39. d_ifft = real( ifft(d_fft,N-2) );

  40. plot(t(3:end),d_ifft);
  41. title('位移');
  42. ylim( [-A/w^2 A/w^2])

复制代码

[ 本帖最后由 toes 于 2006-10-16 14:17 编辑 ]

算例

算例
发表于 2006-10-16 22:57 | 显示全部楼层
不错了
书上的的好啰嗦的
简单点,适用点,精度差不多就可以了
 楼主| 发表于 2006-10-17 10:44 | 显示全部楼层
感谢以上两位高人的指点,让我受益非潜啊,那本书在我这个城市居然没有得卖,我只得网上定购了!
另外问toes两个问题:
"信号太简单,可能需要加窗预处理一下;
去除直流的方法可以再考虑;"

请问这两句话何解?我的程序何你差不多,只是没有你的去除直流方法这一点,能否详细解释一下,多谢。
发表于 2006-10-17 11:02 | 显示全部楼层
“信号太简单,可能需要加窗预处理一下;”
我的意思是我的这个例子分析的信号太简单,处理复杂信号时效果可能不好;你看,在位移信号的后面一部分幅值已经偏差比较大了。
采集的信号一般都要预处理一下的。我只是惯性思维,觉得加窗处理一下可能有助于减小截断误差,在这个程序中有没有必要我不知道,需要进一步尝试。

“去除直流的方法可以再考虑”
去除直流的方法比较多,可能用数字滤波器处理会更好;

你的程序没有去除直流那就会有信号的“漂移”,这是积分造成的,做出来当然不对。
发表于 2006-12-22 15:00 | 显示全部楼层
MATLAB在振动信号处理中的应用
发表于 2006-12-24 20:44 | 显示全部楼层
我用无水兄给的那个程序做过,原始信号是实验拿到的,定频激励下非线性减振器的响应,每组数据都有4000个周期以上,做出来的结果并不好,截断频率稍微做一点改动,结果就会有很大的变化,非常敏感。
后来就用时域方法,用了各种数值积分方法,结果都很差。在较少的周期数之内,出来的结果很好,但周期一多就不行了,得到的位移时程飘得一塌糊涂,不只是零偏和趋势项,高阶的大幅振荡也很明显。
为此很是头疼了一阵子,后来看到有信号放大器带硬件积分的,得到的位移时程还可以,目前还没试。
不知各位达人有什么高招?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-3 19:29 , Processed in 0.059457 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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