用matplotlib谱图进行绘图?

编程入门 行业动态 更新时间:2024-10-12 16:24:37
本文介绍了用matplotlib谱图进行绘图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试使用 matplotlib 绘制信号和信号的频谱图,但是...我仅获得信号的第一个值(样本)的频谱图(例如 30000 中的 60 个...).

I'm trying to plot a signal and the spectrogram of the signal with matplotlib, but... i get the spectrogram only for the first value (samples) of my signal (like 60 of the 30000...).

这是一个非常长的文件,这就是为什么我只想绘制前30000个样本的原因.

It's a very long file, that's why I would like to plot only the first 30000 sample.

这是代码:

import matplotlib.pyplot as plt import numpy as np import pandas as pd Data=pd.read_csv('MySignal.txt', skiprows=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19], header=0) print(Data.head()) DataI=Data['Sig'].tolist() print(len(Data.index)) DataI=DataI[0:30000] NFFT = 200 # the length of the windowing segments Fs = 500 # the sampling rate # plot signal and spectrogram t=range(len(DataI)) ax1 = plt.subplot(211) plt.plot(t, DataI) plt.subplot(212, sharex=ax1) Pxx, freqs, bins, im = plt.specgram(DataI, NFFT=NFFT, Fs=Fs,noverlap=100, cmap=plt.cm.gist_heat) plt.show()

我不太了解 plt.specgram 是如何工作的,所以我不明白问题出在哪里......

I don't understand well how plt.specgram work, so i don't understand where is the problem...

非常感谢!

推荐答案

这里有一个快速而肮脏的合成示例,每个音调相隔一个八度,效果很好.请阅读采样定理以了解频谱图的概念.实际上,最好首先通过使用 FFT 来学习如何绘制频谱(频谱图的垂直切片).

Here a quick and dirty synthetic example of three tones an octave apart each, which works fine. Please read up on the sampling theorem to understand the idea of a spectrogram. It's actually best to first learn how to plot spectra (vertical slices of the spectrogram) by just playing with FFTs.

import matplotlib.pyplot as plt import numpy as np import pandas as pd time1 = np.arange(0,5,0.0001) time = np.arange(0,15,0.0001) data1=np.sin(2*np.pi*300*time1) data2=np.sin(2*np.pi*600*time1) data3=np.sin(2*np.pi*900*time1) data=np.append(data1,data2 ) data=np.append(data,data3) print len(time) print len(data) NFFT = 200 # the length of the windowing segments Fs = 500 # the sampling rate # plot signal and spectrogram ax1 = plt.subplot(211) plt.plot(time,data) # for this one has to either undersample or zoom in plt.xlim([0,15]) plt.subplot(212 ) # don't share the axis Pxx, freqs, bins, im = plt.specgram(data, NFFT=NFFT, Fs=Fs,noverlap=100, cmap=plt.cm.gist_heat) plt.show()

顶部的x轴以秒为单位.为了清晰起见,我在5秒钟的300 Hz到600 Hz的过渡处进行了放大.底部轴不是以秒为单位,这就是为什么我取出了这些轴的原因.这可以修复(细节).

The top x-axis is in seconds.I zoomed in at the transition of 300 Hz to 600 Hz at 5 seconds for clarity. The bottom axis is not in seconds, which is why I took out the sharing of the axes. That can be fixed (detail).

更多推荐

用matplotlib谱图进行绘图?

本文发布于:2023-07-18 15:43:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1146344.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:matplotlib

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!