簡體   English   中英

Python)“實時音頻信號處理”如何以秒為單位繪制x軸?

[英]Python) “Real time Audio signal processing” How to plot x-axis in seconds?

我想繪制實時原始音頻信號和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(signal)(接收到的數據包數量)*緩沖區大小/ 2(1792字節->接收到的數據包大小)。 這是錯的嗎?

經過檢查,計算出的時間是准確的! 我使用了秒表,並比較了[[len(signal)*(buffer_size / 2))/ sample_rate]的結果。 兩者是相同的。

但是上面的代碼會導致繪圖錯誤。

ax [0] .plot(Time,signal)錯誤為“ x和y必須具有相同的第一維”

我該怎么辦?,,

在調用np.linespace()的行中,嘗試將num =(buffer_size / 2)替換為num = len(signal)

該行變為

Time = np.linspace(0,(len(signal)*(buffer_size/2))/sample_rate, num=len(signal) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM