首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的谱图图

Python中的谱图图
EN

Stack Overflow用户
提问于 2021-02-01 07:04:08
回答 1查看 510关注 0票数 0

我应用了以下代码来创建平面图。

代码语言:javascript
复制
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np

# Define the signal
Fs = 1e4     # Sampling Frequency


# Sin wave with Amplite 1 unit, 50Hz, for duration 0-5 seconds
N1 = (1e5)/2
time1 = np.arange(N1) / float(Fs)          
x1 = 1*np.sin(2*np.pi*50*time1)


# Sin wave with Amplite 0.008 units, 100Hz, for duration 5-10 seconds
time2 = np.arange(N1,2*N1) / float(Fs)
x2 = 0.008*np.sin(2*np.pi*100*time2)


# Concatenate above two waves
T    =np.concatenate((time1,time2))
Y    =np.concatenate((x1,x2))



# Plot the waves
plt.plot(T , Y)
plt.title('Time Data')
plt.ylabel('Amplitude')
plt.xlabel('Time [sec]')
plt.show()


# spectrogram 
freq_axis, time_axis, Sxx = signal.spectrogram(Y, Fs)


# Plot the spectrogram 
plt.pcolormesh(time_axis, freq_axis, Sxx)
plt.title('Spectrogram')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.xlim(0,10)
plt.ylim(0,200)
plt.show()

平面图图的结果如下:

在这幅图中,从0到5秒(黄色区域),主频在37赫兹至75赫兹之间。然而,在所产生的信号中,唯一占主导地位的频率。从0到5秒是50赫兹。

此外,0.008单位的振幅,100赫兹的持续时间为5-10秒的信号无法识别。

有人能告诉我我哪里出了问题吗?

此外,除了谱图的绘图窗口外,还有什么方法可以描绘出一个色条,这样就可以看到与颜色相对应的振幅值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-05 11:31:04

首先是对颜色条问题的回答。Matplotlib.pyplot提供了一个创建彩色条的函数。你只需加上

代码语言:javascript
复制
plt.colorbar()

若要在情节中添加标准颜色条,请执行以下操作。

然后回答你的第一个问题。您可能需要更好地理解signal.spectrogram()的功能。要获得对结果的直觉,您必须知道,用于在频率-时间域内转换来自时间的信号的函数在所提供的精度上是有限的。所以,你可以对频率进行非常精确的计算,但不能准确地知道什么时候有频率,或者你在什么时候非常准确,但在哪个频率上不准确。

在您的例子中,频率不是非常精确的计算,导致所谓的频率箱。垃圾箱的大小是黄色块的高度。因此光谱图识别了它们各自的垃圾箱中的两个频率,因此,一个垃圾桶是黄色的,另一个是蓝色的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65988406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档