采用plt.specgram画信号的频谱图

1.创建信号

首先创建一个信号

T = 2 ** 13
x = generate_harmonic_signal(T)
plt.figure(figsize=(8, 2))
plt.plot(x)
plt.title("Original signal")

长这样:
在这里插入图片描述

2.画频谱图

然后画信号的频谱图,先看看plt.specgram的参数

2.1 plt.specgram入口参数

x : 一维数组或序列
Fs : 采样频率, default: 2
window : 长度为NFFT的函数或向量。参见 scipy.signal.get_window, default: window_hanning
sides : {‘default’, ‘onesided’, ‘twosided’}, 返回光谱的哪一边。 对于默认数据,“默认”为单面;对于复杂数据,“默认”为单面。 “单面”强制返回单侧频谱,而“单面”强制双向。
noverlap : 块之间的重叠点数。 default: 128。
NFFT : 每个块中用于FFT的数据点数。 幂2是最有效的。 不应将其用于填充零,否则结果的缩放比例将不正确; 使用pad_to代替。default: 256
mode: {‘default’, ‘psd’, ‘magnitude’, ‘angle’, ‘phase’}
使用哪种频谱。 默认值为“ psd”,它采用功率谱密度。 “magnitude”返回幅度谱。 “angle”返回相位光谱而无需展开。 'phase’返回展开的相位谱。

2.2 plt.specgram返回参数

spectrum:2-D array,列是连续段的周期图。
freqs:1-D array, 对应于频谱中各行的频率。
t:1-D array, 与段的中点相对应的时间(即频谱中的列)。
im:由imshow创建的包含频谱图的图像。

以上都是抄的,原文链接: https://blog.csdn.net/Winds_Up/article/details/108899873

2.3 画它

这里只修改mode参数

plt.figure(figsize=(8, 4))
#mode: {‘default’, ‘psd’, ‘magnitude’, ‘angle’, ‘phase’}
plt.specgram(x, Fs=1024, mode='psd)
plt.title("Time-Frequency spectrogram of signal-psd")

分别长这样:

psd:返回功率谱密度
在这里插入图片描述

magnitude:返回幅度谱
在这里插入图片描述

angle:返回相位光谱而无需展开
在这里插入图片描述

phase:返回展开的相位谱
在这里插入图片描述

3.频谱图解释

具体解释有空再补。

结束语

拿捏。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: plt.specgram()是Matplotlib中用于绘制声谱图的函数。它可以将音频信号转换为频谱图,并以图像的形式进行可视化展示。该函数的用法如下: ```python import matplotlib.pyplot as plt from scipy import signal from scipy.io import wavfile # 读取音频文件 sample_rate, samples = wavfile.read('audio.wav') # 计算频谱图 f, t, Sxx = signal.spectrogram(samples, sample_rate) # 绘制频谱图 plt.pcolormesh(t, f, Sxx) plt.ylabel('Frequency [Hz]') plt.xlabel('Time [sec]') plt.show() ``` 在上述代码中,首先使用`wavfile.read()`函数读取音频文件,并将其存储在`sample_rate`和`samples`变量中。然后,使用`signal.spectrogram()`函数将音频信号`samples`转换为频谱图,并将其存储在`f`、`t`和`Sxx`三个变量中。最后,使用`plt.pcolormesh()`函数绘制频谱图,其中`f`表示频率,`t`表示时间,`Sxx`表示每个时间段内每个频率的声压级(以对数尺度表示)。 需要注意的是,`plt.specgram()`函数已经被废弃,建议使用`signal.spectrogram()`函数进行频谱图的计算。 ### 回答2: plt.specgram()是matplotlib库中用于绘制频谱图的函数。频谱图是一种将信号的频率信息可视化的方法。该函数的参数包括输入的信号数据、采样率、窗口类型、FFT大小、频谱图绘制的坐标轴等。 输入信号数据可以是一维的时域信号数组,也可以是多通道的二维数组。采样率是指每秒钟采集的样本数,用于计算频率。不同的采样率对应不同的频率分辨率。 窗口类型是指在计算频谱时使用的窗口函数。窗口函数可以用于减小频谱中的泄漏效应,常见的窗口函数包括矩形窗口、汉明窗、海宁窗等。 FFT大小是指进行快速傅里叶变换的窗口大小。FFT是一种将时域信号转换为频域信号的算法,傅里叶变换的结果包含了信号的频率成分信息。通过调整FFT大小可以改变频谱图的频率分辨率。 频谱图绘制的坐标轴包括x轴和y轴。x轴表示时间,y轴表示频率。频谱图可以用彩色来表示信号的能量强度,不同颜色对应不同的能量强度。 通过调用plt.specgram()函数,并传入相应的参数,可以绘制出输入信号频谱图。绘制完成后,可以使用其他函数进行图像的显示、保存等操作。 总之,plt.specgram()是一个方便绘制频谱图的函数,可以直观地展示信号在频域上的特性,帮助分析信号的频率成分。 ### 回答3: plt.specgram() 是 matplotlib 库中的一个函数,用于绘制信号的谱图。谱图是显示信号频谱和时间关系的图表,用于分析信号的频率分布。 plt.specgram() 函数的参数包括: - x:输入信号,可以是一个一维数组,表示一个连续的信号。 - NFFT:采样窗口大小,即每次计算频谱的数据长度,默认为256。 - Fs:采样频率,即每秒钟采样的次数,默认为2。 - noverlap:两个相邻频谱之间的重叠样本数,默认为128。 - cmap:绘图的颜色映射,默认为'jet'。 - vmin, vmax:谱图显示的最小和最大值范围。 绘制谱图的步骤如下: 1. 导入 matplotlib 库:`import matplotlib.pyplot as plt` 2. 输入信号:`x = ...` 3. 调用 plt.specgram() 函数绘制谱图:`plt.specgram(x, NFFT=256, Fs=2, noverlap=128, cmap='jet')` 4. 可以进一步添加图表标题、横纵坐标标签等。 5. 最后调用 `plt.show()` 将绘制的图表显示出来。 谱图通过颜色表示频谱的强度,通常会用声音的频率作为横轴,时间作为纵轴,从而展示信号随时间变化的频率分布。谱图可以用于分析音频信号、振动信号等,在音频处理、语音识别、波形分析等领域有广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值