【发布时间】:2017-08-23 21:31:59
【问题描述】:
我计算了 uint8 I/Q 数据的 STFT 并将其存储在一个 numpy 矩阵中,其中每一行存储一个窗口的 STFT,如下面的 sudo 代码所示。
#k= length of window
#fs= Sampling frequency
#n= Number of STFT calculated
#matrix= Initially empty numpy array
for i in range(0,n):
t=data[start:end,:] #start & end calculated with each iteration
t=t.flatten()
t=t-127.5
array = np.empty(t.shape[0]//2, dtype=np.complex128)
array.real = t[::2]
array.imag = t[1::2]
transform=(np.fft.fft(temp_array))
line = 2*abs(transform)/k
#Inserting row into numpy array
if(i==0):
matrix = np.hstack((matrix, line))
else:
matrix = np.vstack((matrix, line))
现在如何绘制频率与时间的频谱图?
【问题讨论】:
-
你研究过matplotlib吗?
-
是的,我在 matplotlib 和 scipy 中都做过,但在复杂的 numpy 数组中都不能正常工作
-
为什么是复杂数组?取 FFT 的绝对值应该得到可以用 matplotlib 的
imshow轻松绘制的实际值。请注意不要使用复杂数据类型初始化matrix。 -
@kazemakase 您的意思是在采用绝对值后使用带有范围的 imshow,即 ax.imshow(np.absolute(matrix),extent=[0,100,0,1]) ?我假设频率将在 Y 轴上。
-
@JayKrishna 是的,这应该可以按预期工作。仍然......看起来你只将绝对值放入
line,因此无论如何都放入matrix,所以令人惊讶的是你在matrix中有复数。
标签: python-3.x numpy signal-processing spectrogram