我试图通过对单边频谱进行逆傅里叶变换来恢复信号,但我得到了错误的结果。我确实成功地将单侧光谱转换回双面光谱,但从那里我迷失了。我在这里做错了什么?事实上,执行完abs()后如何恢复完整信息,那里不是丢失了信息吗?
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1500; % Length of signal
t = (0:L-1)*T; % Time vector
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
X = S + 2*randn(size(t));
figure(1)
plot(1000*t(1:50),X(1:50))
title("Signal Corrupted with Zero-Mean Random Noise")
xlabel("t (milliseconds)")
ylabel("X(t)")
Y = fft(X);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
figure(2)
plot(f,P1)
title("Single-Sided Amplitude Spectrum of X(t)")
xlabel("f (Hz)")
ylabel("|P1(f)|")
X2=ifft(Y);
figure(3)
plot(X2(1:50))
Y2 = 2*[P1(1) P1(2:end)/2 fliplr(conj(P1(2:end)))/2];
X3 = ifft(L*Y2);
figure(4)
plot(Y2)
figure(5)
plot(X3(1:50))
我需要从单边频谱恢复信号的原因是我需要求导(乘以 1i*kx 傅里叶变换,kx 为波数)
除了
P2 = abs(Y/L)
中已经评论过的问题之外,其他一些建议是 - 将 plot(X3(1:50))
更改为 plot(abs(X3(1:50)))
,因为 ifft 会给出复向量。由于您的输入具有复共轭对称性,X3 的虚部系数为 0(在本例中为 e-19、e-20 范围)。另外,我认为 2*[P1(1) P1(2:end)/2 fliplr(conj(P1(2:end)))/2]
不需要乘以 2。
通过这些更改,我可以看到原始时间信号和重建时间信号的精确匹配。