【发布时间】:2016-10-30 00:57:43
【问题描述】:
我想实时绘制原始音频信号和 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(时间,信号) 错误是“ x 和 y 必须具有相同的第一维”
我该怎么办?,,
【问题讨论】:
-
请正确格式化您的代码,缩进四个空格。
-
我编辑了它!谢谢!
-
Catch The error,检查时间和信号(特别是它们的尺寸),看看那里是否有线索,回溯代码,找出导致 if 的原因。
标签: android python audio-processing