我有一個隨時間變化的信號(帶有一個基頻和一些諧波),我已經計算出fft()
,然後用頻率相關靈敏度M(f)
除。然後我想轉換回用ifft()
得到隨時間變化的信號,但在時域ifft()
似乎並沒有工作,即:MATLAB:使用ifft來提取原始信號
p(t) = ifft(fft(v(t)./M(f))
是ifft()
沒有做,我認爲在這裏?
****跟進***
我寫了下面的代碼,試圖瞭解這一點:
% v(t)
t=0:0.1:10;
a=sin(t);
subplot(1,5,1); plot(t,a);
title('1. time domain');
xlabel('t [s]')
ylabel('p.d. [v]')
hold on;
% fft(v(t))
T = t(2); % Sampling period
Fs=1/T;
L = length(t); % Length of signal
Y = fft(a);
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;
subplot(1,5,2); plot(f,P1);
title('2. frequency domain (fft(vt))')
xlabel('f [Hz]')
ylabel('magnitude')
%frequency responce (sensitivity), M(f)
resp=ones(1,length(f)); %1=1
subplot(1,5,3); plot(f,resp);
title('3. Simulated sensitivity (M(f))')
xlabel('f [Hz]')
ylabel('v/p')
% fft(v(t))./M(f)
fftResp=P1./resp;
subplot(1,5,4); plot(f,fftResp);
title('4. fft(v(t))./M(f)')
xlabel('f [Hz]')
ylabel('fft(v(t))/M(f)')
%Inverse fft, p(t) = ifft(fft(v(t)./M(f)))
pt = real(ifft(fftResp));
subplot(1,5,5); plot(pt);
title('5. time domain (ifft)')
xlabel('t [s]')
ylabel('p.d. [p]')
結果:https://www.dropbox.com/s/18tqeyqey2pc5te/SOfigure.png?dl=0
隨着M(F)= 1在所有頻率我期望最終ifft()
結果(圖5)等於初始時域信號(圖1),但它不?第二個FFT(圖3)等同於第一個(圖2),這是正確的。
V(T)./ M(F) - 應該這樣做 – GameOfThrows
對不起,我已經這樣做。還有一些其他問題。我期望一個時間變化的信號,但得到這個:https://www.dropbox.com/s/18tqeyqey2pc5te/SOfigure.png?dl=0 – 2one
如果我們不能重新創建問題真的很難知道你做了什麼,也許它是隻是你正在策劃它的方式? 'ifft(fft(vector))'應該給你正確的解決方案 – GameOfThrows