У меня есть данные, которые имеют эквивалентные интервалы и соответствующие измерения в соответствующих точках. Например, вот выдержка из данных, которые у меня есть:
y = [2.118, 2.1289,
2,1374,
2,1458,
2,1542,
2,1615,
2,1627,
2,165
2,1687 ...]
интервал между точками составляет 0,1
Итак, что мне нужно получить из данных, это амплитудный спектр (амплитуда против частоты), а также фазовый спектр (фазовый угол против частоты).
Кроме того, мне следует сместить фазу данных на 90 градусов (-pi / 2).
После сдвига фазы и оставления амплитуды нетронутыми, мне нужно сделать обратное FFT и получить новый сигнал. Я хочу сделать это на Python.
Не могли бы вы дать мне пример выполнения этого.
Код, который я использовал, был взят из другого вопроса SO, но я сделал некоторые изменения
## Perform FFT WITH SCIPY
signalFFT = np.fft.fft(y)
## Get Power Spectral Density
signalPSD = np.abs(signalFFT) ** 2
signalPhase = np.angle(signalFFT)
## Shift the phase py +90 degrees
new_signalPhase =(180/np.pi)*np.angle(signalFFT)+90
## Get frequencies corresponding to signal
fftFreq = np.fft.fftfreq(len(signalPSD), 0.1)
## Get positive half of frequencies
i = fftFreq>0
##
plt.figurefigsize=(8,4)
#plt.plot(fftFreq[i], 10*np.log10(signalPSD[i]));
plt.plot(fftFreq[i], new_signalPhase[i]);
plt.ylim(-200, 200);
plt.xlabel('Frequency Hz');
plt.ylabel('Phase Angle')
plt.grid()
plt.show()
Проблема в том, что я хочу восстановить сигнал с теми же амплитудами, но смещенной фазой. Я знаю, что ответ связан с ifft, но как мне подготовить данные для него? Не могли бы вы посоветовать мне дальнейшие шаги?
выход