У меня есть изменяющийся во времени сигнал (с основной частотой и рядом гармоник), для которого я вычислил fft()
, а затем разделил его на зависящую от частоты чувствительность M(f)
. Затем я хочу преобразовать обратно во временную область, используя ifft()
, чтобы получить изменяющийся во времени сигнал, но 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), но это не так? Второе БПФ (рис. 3) эквивалентно первому (рис. 2), что является правильным.
ifft(fft(vector))
должен дать вам правильное решение - person GameOfThrows   schedule 14.04.2016fft
? - person GameOfThrows   schedule 14.04.2016