[英]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.