Python)“实时音频信号处理”如何在几秒内绘制x轴?

时间:2016-10-30 00:57:44

标签: android python audio-processing

我想绘制实时原始音频信号和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必须具有相同的第一维”

我该怎么办?,,

1 个答案:

答案 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) )