首页 > 解决方案 > 我的 ifft 的输出仍然有比较大的复数

问题描述

我正在使用 Matlab 进行地面响应分析。我需要做一个地面运动加速度的 FFT,乘以一些常数(放大函数),然后得到它的逆 FFT。但是,它没有返回正确的答案。事实上,IFFT 仍然具有复数(虚数)值。

Y = fft(acc,NFFT);
Y_phase = angle(Y);
h1=2*abs(Y(1:NFFT));

F=1/dt;                    
f2=(F/NFFT)*(1:NFFT);

%AMPLIFICATION FUNCTION
w1=2*(pi)*f2;
vs=450;        % shear wave velocity [m/s]
zeta=0.05;     % damping ratio of soil [-]
H=165;           % height of soil layer [m]

TF1 = (1./sqrt((cos(w1*H/vs)).^2+(zeta*w1*H/vs).^2));

acc_fd1=TF1.*h1;

acc_td = ifft(0.5*acc_fd1.*exp(i*Y_phase));
time_ifft=[0:NFFT-1]*dt; 

plot(time_ifft, acc_td, 'b');

每当我在 ifft 而不是 acc_fd1 中输入 h1 时,我都会得到原始信号,这意味着代码是可以的。谁能帮帮我?谢谢你。

标签: matlabfftmotion

解决方案


推荐阅读