matlab fft变换后无法用ifft恢复原信号

MrHu_LY 2015-12-30 03:58:41
对原信号进行了FFT变换,取得是单边傅里叶变换,且需要对其幅值处理,其中一段代码如下图,在进行处理后需要回到时域,代码直接进行了IFFT变换,参考了网上的一种代码方式,虽然波形靠谱了点,但还是不对,下图波形,图一是原始加窗信号,图二是IFFT波形,本人是matlab新手,想着我是不是需要在IFFT之前对信号进行处理,或者是IFFT变换之后,信号的横坐标写的有问题,自己查阅了很多资料,没有找到合适的解决办法,所以想请教下各位可不可以指点一二。
代码如下:
close all;
clear all;
clc;

Ts = 50e-6;
Fs = 1 / Ts;
f0 = 50;
duraT = 1;

dt = 1 / Fs;
tAxis = dt:dt:(duraT - dt);

y = 2*sin(2*pi*10*tAxis);
y = y';

L = length(y);
nfft = 2^nextpow2(L);
y_HannWind = y.*hann(L);
Ydft_HannWnd = fft(y_HannWind,nfft)/L;

mYdft = abs(Ydft_HannWnd);
mYdft = mYdft(1:nfft/2+1);
mYdft(2:end-1) = 2*mYdft(2:end -1);
mYdft = 2*mYdft;

f = Fs/2*linspace(0,1,nfft/2+1);

temp = ifft(mYdft,'symmetric');


figure(1)
subplot(211)
plot(tAxis,y_HannWind)
title('Time Domain y(t)');
xlabel('Time,s');
ylabel('y');
subplot(212)
plot(f,mYdft);
axis([0 500 0 5]);
title('Amplitude Spectrum with Hann Wnd');
xlabel('Frequency(Hz) with hanning window');
ylabel('|Y(f)|')

figure(2)
t = Fs * linspace(0,1,nfft/2+1);
plot(t,abs(temp))

...全文
608 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧