我想绘制实时原始音频信号和fft信号。
我的代码是,
socket_server.bind(server_address)
print "Listening...\n"
while(True):
packet, client = socket_server.recvfrom(buffer_size)
count=count+1
if packet=='stop':
print "client stops to send packets"
break
#Convert packet to numpy array
signal.append(np.fromstring(packet, dtype=np.int16))
print "First Here"
socket_server.close()
signal_f = np.fft.fft(signal)
**Time = np.linspace(0,(len(signal)*(buffer_size/2))/sample_rate, num=(buffer_size/2))**
f, ax = plt.subplots(2, sharex=True)
ax[0].plot(Time, signal)
ax[0].set_title('Original Signal')
ax[1].plot(Time, abs(signal_f), 'r')
ax[1].set_title('fft signal')
plt.show()
我从Android应用程序接收数据包(16位pcm数据)。和minbuffersize是3584字节。 (buffer_size = 3584)
要获得时间向量,我应该按帧速率划分信号大小。
因此在粗线中,我认为信号的大小是len(信号)(接收分组的数量)*缓冲区大小/ 2(1792字节 - >接收的分组大小)。这不对吗?
检查后,计算出的时间是准确的!我使用秒表并比较[(len(signal)*(buffer_size / 2))/ sample_rate]的结果。两者都是一样的。但是上面的代码会导致绘图错误。
ax [0] .plot(时间,信号) 错误是“x和y必须具有相同的第一维”
我该怎么办?,,
答案 0 :(得分:0)
在你调用np.linespace()的行中,尝试用num = len(signal)替换num =(buffer_size / 2)
该行变为
Time = np.linspace(0,(len(signal)*(buffer_size/2))/sample_rate, num=len(signal) )