【发布时间】:2016-03-11 04:19:13
【问题描述】:
我正在尝试使用 matplotlib 绘制信号和信号的频谱图,但是...我仅获得信号的第一个值(样本)的频谱图(例如 30000 中的 60...)。
这是一个很长的文件,这就是为什么我只想绘制前 30000 个样本。
这里是代码:
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 是如何工作的,所以我不明白问题出在哪里......
非常感谢!
【问题讨论】:
-
如果你给出一个可执行的例子会有所帮助,例如有一些合成数据。只是一些简单的东西,比如 upchirp 或一些不同频率的正弦波。这也是解决问题的最佳方式,因为您将(可能采样不足的)数据与分析分开。
-
很可能存在采样率问题,因为您将时间生成为 [0,1,2,3...],这可能是几秒钟,但您使用的采样率为 500。所以尝试将 t 除以 1000 左右。
-
非常感谢您的帮助,但我无法测试它...现在出现 MemoryError(似乎停止第 7 行,“header 0”)...我不明白为什么。 ..
标签: python matplotlib plot spectrogram