Нет, это невозможно. Чтобы рассчитать спектрограмму, вы делите свой входной сигнал во временной области на (наполовину перекрывающиеся) порции данных, каждый из которых умножается на соответствующую оконную функцию , после чего вы делаете FFT , который дает вам сложный вектор, который указывает амплитуду и фазу для каждого частотного бина. Каждый столбец спектрограммы, наконец, формируется путем взятия абсолютного квадрата одного БПФ (и обычно вы отбрасываете отрицательные частоты, так как PSD симметричен для реального входного сигнала). Взяв абсолютный квадрат, вы потеряете любую информацию о фазе. Это делает невозможным точное восстановление исходного сигнала во временной области.
Поскольку ваше ухо не заботится о фазовой информации (ваш мозг будет ощущать нечто похожее на спектрограмму), тем не менее, возможно, будет возможно восстановить сигнал, который звучит приблизительно одинаково. В основном это можно сделать, выполнив все описанные шаги в обратном порядке и выбрав случайную фазу для БПФ.
Обратите внимание, что в вашем коде есть одна проблема: вы создаете переменную с именем signal
, которая 'shadows 'модуль scipy.signal, который вы импортируете с тем же именем.