matlab加速度转化为位移,请问加速度转化成位移 这个程序错在哪里

clear,clc;close all hidden

%%%%%%%%%%%%%

fni=input('data.txt','s');

fid=fopen(fni,'r');

sf=3000;%采样频率

fmin=0.1;%最小截止频率

fmax=6000;%最大截止频率

c=1;%单位变换系数

it=2;%积分次数

sx='赫兹(HZ)';%横向坐标轴标注

sy1='加速度(m/s^2)';%纵向坐标轴输入单位标注

sy2='位移(m)';%纵向坐标轴输出单位的标

fno='out.txt';

x=fscanf(fid,'%f',[1,inf]);%输出数据存成行向量

status=fclose(fid);

n=length(x);

t=0:1/sf:(n-1)/sf;%建立时间向量

nfft=2^nextpow2(n);%大于并最接近n的2   FFT长度

y=fft(x,nft);%fft变换

df=sf/nfft;%计算频率间隔

ni=round(fmin/df+1);

na=round(fmax/df+1);%计算指定频带对应频率数组的下标

dw=2*pi*df;%计算圆频率间隔(rad/s)

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

a1=imag(a);a2=rael(a);y=a1-a2*1i;%进行一次积分的相位变化

end

a=zero(1,nfft);%消除指定证频带外的频率成分

a(ni:na)=y(ni:na);%消除指定证频带外的频率成分

a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);%消除指定负频带外的频率成分

yifft(a,nfft);%ifft变换

y=real(y(1:n))*c;

subplot(2,1,1);

plot(t,x);

xlabel(sx);

ylabel(sy1)

grid on;

subplot(2,1,2);

plot(e,y);

xlabel(sx);

ylabel(sy2);

grid on;

fid=fopen(fno,'w');

for k=1:n

fprintf(fid,'%f%f\n',t(k),y(k));

end

status=fclose(fid);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值