【问题标题】:Visualize sinus-generator in Python3.5, pyaudio, numpy, matplotlib在 Python3.5、pyaudio、numpy、matplotlib 中可视化 sinus-generator
【发布时间】:2017-04-05 22:02:18
【问题描述】:

我正在尝试可视化一个窦性发生器,但出现错误

ValueError: x 和 y 必须具有相同的第一维

我认为尺寸是相同的,但显然它们不是。 正弦发生器是标准的

import pyaudio
import numpy as np

p = pyaudio.PyAudio()

volume = 0.08     # range [0.0, 1.0]
fs = 192000       # sampling rate, Hz, must be integer
duration = 3.0   # in seconds, may be float
f = 257.0        # sine frequency, Hz, may be float
f2 = 258.0
f3 = 300.0
f4 = 301.0

oma = 2000.0

a = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)
b = (np.sin(2*np.pi*np.arange(fs*duration)*f2/fs)).astype(np.float32)
c = (np.sin(2*np.pi*np.arange(fs*duration)*f3/fs)).astype(np.float32)
d = (np.sin(2*np.pi*np.arange(fs*duration)*f4/fs)).astype(np.float32)

om = (np.sin(2*np.pi*np.arange(fs*duration)*oma/fs)).astype(np.float32)

# generate samples, note conversion to float32 array
samples = om*(a+b+c+d)


# for paFloat32 sample values must be in range [-1.0, 1.0]
stream = p.open(format=pyaudio.paFloat32,
                channels=2,
                rate=fs,
                output=True)

# play. May repeat with different volume values (if done interactively) 
stream.write(volume*samples)

stream.stop_stream()
stream.close()

p.terminate()

我添加了 matplotlib 但无法开始工作。我试图在 0 - 2*np.pi 区间内可视化单个波和聚合函数。

网上有一个解决方案,但仅限于两个频率。 Wave interference beat frequency

plt的最新迭代是

import matplotlib.pyplot as plt  
x = np.mgrid[0:2*np.pi]

plt.rc('lines', linewidth=4)
plt.plot(samples,x)
plt.show()

【问题讨论】:

    标签: numpy matplotlib python-3.5


    【解决方案1】:

    错误消息暗示传递给plt.plotxy 数组的维度不兼容。你可以检查一下

    samples.shape
    # (576000,)
    
    x.shape
    # (7,)
    

    samples 中有 576000 个数据点,但x 中只有 7 个。您很可能需要 x 轴上的时间,因此您需要定义 xas

    x = np.arange(fs*duration) / fs
    

    然后你就可以绘制你的数据了

    plt.plot(x, samples)
    

    1. (请注意,x 先出现。)
    2. (您也可以省略 x plt.plot(samples),这将只提供 x 轴上的样本编号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2021-05-27
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多