Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scipy.signal.spectrogram在pyqtgraph中绘制波形文件的频谱_Python_Scipy_Signal Processing_Pyqtgraph_Spectrogram - Fatal编程技术网

Python 使用scipy.signal.spectrogram在pyqtgraph中绘制波形文件的频谱

Python 使用scipy.signal.spectrogram在pyqtgraph中绘制波形文件的频谱,python,scipy,signal-processing,pyqtgraph,spectrogram,Python,Scipy,Signal Processing,Pyqtgraph,Spectrogram,我有一个用于音乐和语音分析的PyQt plus pyqtgraph程序,我想绘制wav文件的频谱(使用scipy python包计算)。 我可以在matplotlib中完成,但由于matplotlib的性能,我需要切换到pyqtgraph,但我找不到任何一致的方法将scipy.signal.spectrogram的输出绘制到pyqtgraph 谢谢 Scipy光谱图的输出可以很容易地绘制为pyqtgraph的ImageItem。通常,生成的光谱图仅为灰度图。您可以使用柱状图轻松地进行调整 作为一

我有一个用于音乐和语音分析的PyQt plus pyqtgraph程序,我想绘制wav文件的频谱(使用scipy python包计算)。 我可以在matplotlib中完成,但由于matplotlib的性能,我需要切换到pyqtgraph,但我找不到任何一致的方法将scipy.signal.spectrogram的输出绘制到pyqtgraph


谢谢

Scipy光谱图的输出可以很容易地绘制为pyqtgraph的ImageItem。通常,生成的光谱图仅为灰度图。您可以使用柱状图轻松地进行调整

作为一个示例,下面是如何将光谱图的SciPy示例改编为使用pyqtgraph(使用pyqtgraph中的示例作为基础):

Matpotlib谱图

Pyqtgraph图像项


Scipy光谱图的输出可以很容易地从pyqtgraph绘制为ImageItem。通常,生成的光谱图仅为灰度图。您可以使用柱状图轻松地进行调整

作为一个示例,下面是如何将光谱图的SciPy示例改编为使用pyqtgraph(使用pyqtgraph中的示例作为基础):

Matpotlib谱图

Pyqtgraph图像项


您可以指示如何在matplotlib中生成图形以将其作为参考。您可以指示如何在matplotlib中生成图形以将其作为参考
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
import pyqtgraph

# Create the data
fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 500*np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise
f, t, Sxx = signal.spectrogram(x, fs)

# Interpret image data as row-major instead of col-major
pyqtgraph.setConfigOptions(imageAxisOrder='row-major')

pyqtgraph.mkQApp()
win = pyqtgraph.GraphicsLayoutWidget()
# A plot area (ViewBox + axes) for displaying the image
p1 = win.addPlot()

# Item for displaying image data
img = pyqtgraph.ImageItem()
p1.addItem(img)
# Add a histogram with which to control the gradient of the image
hist = pyqtgraph.HistogramLUTItem()
# Link the histogram to the image
hist.setImageItem(img)
# If you don't add the histogram to the window, it stays invisible, but I find it useful.
win.addItem(hist)
# Show the window
win.show()
# Fit the min and max levels of the histogram to the data available
hist.setLevels(np.min(Sxx), np.max(Sxx))
# This gradient is roughly comparable to the gradient used by Matplotlib
# You can adjust it and then save it using hist.gradient.saveState()
hist.gradient.restoreState(
        {'mode': 'rgb',
         'ticks': [(0.5, (0, 182, 188, 255)),
                   (1.0, (246, 111, 0, 255)),
                   (0.0, (75, 0, 113, 255))]})
# Sxx contains the amplitude for each pixel
img.setImage(Sxx)
# Scale the X and Y Axis to time and frequency (standard is pixels)
img.scale(t[-1]/np.size(Sxx, axis=1),
          f[-1]/np.size(Sxx, axis=0))
# Limit panning/zooming to the spectrogram
p1.setLimits(xMin=0, xMax=t[-1], yMin=0, yMax=f[-1])
# Add labels to the axis
p1.setLabel('bottom', "Time", units='s')
# If you include the units, Pyqtgraph automatically scales the axis and adjusts the SI prefix (in this case kHz)
p1.setLabel('left', "Frequency", units='Hz')

# Plotting with Matplotlib in comparison
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.colorbar()
plt.show()

pyqtgraph.Qt.QtGui.QApplication.instance().exec_()