顾一城1874 顾一城1874
关注数: 8 粉丝数: 6 发帖数: 471 关注贴吧数: 10
# 频域计算与时域计算求助 对于一个时域方程,我时域傅里叶变换后转换为频域方程,求解得到频域结果后,再将其用逆变换变回时域信号,这个结果跟我直接求解时域方程得到的结果误差很大,有大佬知道是什么原因吗。附上我的matlab代码。T = 1;n = 101;dt = 1/(101-1);t = 0:dt:1;picost = zeros(n,1);for i = 1:n picost(i) = 10*pi*cos(10*pi*dt*(i-1));endu = zeros(n,1);for i = 2:n u(i) = u(i-1)+dt*picost(i);endu_an = zeros(n,1);for i = 1:n u_an(i) = sin(10*pi*dt*(i-1));end%已验证,时域求解可行figure(1)plot(t,u,t,u_an);legend("u","u_an",'Location','Northeast');xlabel('time (t)');ylabel('solution(u)');% 尝试频域求解signal_fft = fftshift(fft(u_an));n = length(t);frequencies = (-(n-1)/2:(n-1)/2)*(1/(n*dt));figure(2)% 绘制原始信号subplot(2, 1, 1);plot(t, u_an);title('原始信号');xlabel('时间 (s)');ylabel('幅值');% 绘制傅里叶变换结果subplot(2, 1, 2);plot(frequencies, abs(signal_fft));title('傅里叶变换后的信号');xlabel('频率 (Hz)');ylabel('幅值');R_u = zeros(n,1);I_u = zeros(n,1);cost_fft = fftshift(fft(picost));R_a = real(cost_fft);I_a = imag(cost_fft);for i = 1:n w = 2*pi*frequencies(i); if w ~= 0 R_u(i) = I_a(i)/w; I_u(i) = -R_a(i)/w; endendz = i;u_fft = R_u + z * I_u;u_t = ifft(ifftshift(u_fft));figure(3)plot(t,u_t);legend('/delta_/phi(fe)','Location','Northeast');xlabel("频率");ylabel("幅值");figure(4)% 绘制原始信号subplot(2, 1, 1);plot(t, u_t);title('原始信号');xlabel('时间 (s)');ylabel('幅值');% 绘制傅里叶变换结果subplot(2, 1, 2);plot(frequencies, abs(u_fft));title('傅里叶变换后的信号');xlabel('频率 (Hz)');ylabel('幅值');
1 下一页