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);