最近在用matlab处理振动数据,加速度频域积分为位移,但是我不明白为什么最后是用逆变换的实部作为结果?
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/24 04:11:09
最近在用matlab处理振动数据,加速度频域积分为位移,但是我不明白为什么最后是用逆变换的实部作为结果?
%频域积分
%%%%%%%%%%%%%%%%%%%%%%%%%%
clear; clc; close all hidden
%%%%%%%%%%%%%%%%%%
fni=input('频域积分-输入数据文件名:','s');
fid=fopen(fni,'r');
sf=fscanf(fid,'%f',1);%采样频率
fmin=fscanf(fid,'%f',1);%最小截止频率
fmax=fscanf(fid,'%f',1);%最大截止频率
c=fscanf(fid,'%f',1);%单位变换系数
it=fscanf(fid,'%f',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);
n=length(x);
%建立时间向量
t=0:1/sf:(n-1)/sf;
%大于并最接近n的2的幂次方为FFT长度
nfft=2^nextpow2(n);
%FFT变换
y=fft(x,nfft);
%计算频率间隔(Hz/s)
df=sf/nfft;
%计算指定频带对应频率数组的下标
ni=round(fmin/df+1);
na=round(fmax/df+1);
%计算圆频率间隔(rad/s)
dw=2*pi*df;
%建立正的离散圆频率向量
w1=0:dw:2*pi*(0.5*sf);
%建立负的离散圆频率向量
w2=-2*pi*(0.5*sf-df):dw:-dw;
%将正负圆频率向量组合成一个向量
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=real(a); y=a1-a2*i; %进行一次积分的相位变换
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);
y=ifft(a,nfft); %IFFT变换
%取逆变换的实部n个元素并乘以单位变换系数为积分结果
y=real(y(1:n))*c;
subplot(2,1,1); plot(t,x); xlabel(sx); ylabel(sy1); grid on; %绘制几分钱的时程曲线图形
subplot(2,1,2); plot(t,y); xlabel(sx); ylabel(sy2); grid on; %绘制积分后的时程曲线图形
%打开文件输出积分后的数据
fid=fopen(fno,'w');
for k=1:n,fprintf(fid,'%f \n',y(k)); end
status=fclose(fid);
%频域积分
%%%%%%%%%%%%%%%%%%%%%%%%%%
clear; clc; close all hidden
%%%%%%%%%%%%%%%%%%
fni=input('频域积分-输入数据文件名:','s');
fid=fopen(fni,'r');
sf=fscanf(fid,'%f',1);%采样频率
fmin=fscanf(fid,'%f',1);%最小截止频率
fmax=fscanf(fid,'%f',1);%最大截止频率
c=fscanf(fid,'%f',1);%单位变换系数
it=fscanf(fid,'%f',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);
n=length(x);
%建立时间向量
t=0:1/sf:(n-1)/sf;
%大于并最接近n的2的幂次方为FFT长度
nfft=2^nextpow2(n);
%FFT变换
y=fft(x,nfft);
%计算频率间隔(Hz/s)
df=sf/nfft;
%计算指定频带对应频率数组的下标
ni=round(fmin/df+1);
na=round(fmax/df+1);
%计算圆频率间隔(rad/s)
dw=2*pi*df;
%建立正的离散圆频率向量
w1=0:dw:2*pi*(0.5*sf);
%建立负的离散圆频率向量
w2=-2*pi*(0.5*sf-df):dw:-dw;
%将正负圆频率向量组合成一个向量
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=real(a); y=a1-a2*i; %进行一次积分的相位变换
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);
y=ifft(a,nfft); %IFFT变换
%取逆变换的实部n个元素并乘以单位变换系数为积分结果
y=real(y(1:n))*c;
subplot(2,1,1); plot(t,x); xlabel(sx); ylabel(sy1); grid on; %绘制几分钱的时程曲线图形
subplot(2,1,2); plot(t,y); xlabel(sx); ylabel(sy2); grid on; %绘制积分后的时程曲线图形
%打开文件输出积分后的数据
fid=fopen(fno,'w');
for k=1:n,fprintf(fid,'%f \n',y(k)); end
status=fclose(fid);
以上程序是对加速度二次积分为位移,将时域积分装换为频域积分, 实现方法为将时域信号进行FFT到频域,然后对频谱做简单运算实现了频域上的积分 最后将频域经过IFFT到时域 实现了频域上的积分.
时域积分对应在频域上的频谱函数为:∫f(x)dx →F(jw)/jw
所以时域上的一次积分对应在频域上的处理为:逆完FFT之后取虚部,因为加速度与速度之间的关系为jw
二次积分时因为是-w^2,所以有 y=-a 即为取实部
时域积分对应在频域上的频谱函数为:∫f(x)dx →F(jw)/jw
所以时域上的一次积分对应在频域上的处理为:逆完FFT之后取虚部,因为加速度与速度之间的关系为jw
二次积分时因为是-w^2,所以有 y=-a 即为取实部
振动单位的含义?最近接触到振动的单位:m/s*s ,与加速度的单位一样,但是一直搞不明白是什么含义,哪位能给解释一下.谢
高数,二重积分.我用累次积分和极坐标变换的方法求解,但是两种方法不知道为啥结果不一样.请大师看看.
MATLAB处理的数据问题
处理油品计量结果的数据,采用的修约方法为“四舍五入”法对吗?为什么?
matlab 怎样处理使结果前两个数据不为0.0000 -0.0000
Matlab 我计算积分的时候,得出结果为:1610027357/6563700-6072064/348075*2^(1
有一组随机振动的结果,时间和加速度值.想利用matlab做快速傅里叶变换做成功率谱密度以及频率.求详细解答,最好教会我.
知道加速度,求位移的积分公式
为什么旋转矢量可以叠加.大学物理在证明振动的合成时候用了旋转矢量的叠加,我怎么也想不明白,旋转矢
我不明白第一问的加速度为什么那样求
振动中,振动频率、位移、加速度关系
求matlab程序,用matlab解微分方程,并且画出两个小车的位移,加速度的图像,