查看: 360|回复: 1|关注: 0

[已解决] 请问加速度转化成位移 这个程序错在哪里

[复制链接]

新手

9 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
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);




58e2a1d4d738fd8242e8f4a969a2f1a.png

论坛优秀回答者

中级

598 麦片

财富积分


5001500


3

主题

947

帖子

120

最佳答案
  • 关注者: 23
发表于 2018-9-12 09:40:36 | 显示全部楼层 |此回复为最佳答案
提示已经说了,是前面的文件句柄有问题,不是有效的,你单步一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

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