Приветствую! Надо реализовать алгоритм, который:
1. Преобразует сигнал в log-спектрограмму;
2. Спектрограмму превращает в изображение 128 на 128. Но по факту под изображением имеется ввиду массив с шейпом (3, 128, 128) или же (1, 128, 128);
Важный момент! Мне нужно будет прогнать через такой алгоритм тысячи отрезков-сигналов по 10 секунд.
1-ый этап алгоритма реализован:
sampling_rate = 360 # Сигнал записан с частотой 360 Hz
length = 3600 # Беру 10 секунд от сигнала
wnd = scipy.signal.get_window('hann', 256) # Окно Ханнинга размером 256
f, t, Zxx = sp.signal.spectrogram(data[0:length ], fs=360, window=wnd, nperseg=256, noverlap=178)
plt.pcolormesh(t, f, np.log10(np.abs(Zxx)), shading='gouraud', cmap='jet') # Вывожу спектрограмму
А вот со 2-ым этапом проблемка. Я до сих пор не могу даже предположить как это сделать. Например, в изображении обе оси (высота и ширина) находятся в пространственной области и имеют одинаковый масштаб, пиксели хранятся как целые числа в диапазоне [0, 255]. А вот оси в спектрограмме относятся к разным "измерениям": горизонтальная ось - время, а вертикальная - частота. Каждая из этих величин имеет свой масштаб. Размерность частоты определяется размером окна, а размерность времени задается общей длиной сигнала, размером окна и т.д.