我有一个从spice导出文本文件导入的两个numpy数组(一个用于时间,一个用于值)。该文件包含1kHz的正弦波。
使用plotSpectrum函数(link here)绘制FFT时,输出与1kHz不匹配,大约为891Hz。
任何可能出错的建议?我已经计算了前4个样本之间的dt,它们的间距相等。 spice不会在导出文件中平均排列所有样本吗?或者可能出了什么问题?我需要将数组限制为2的幂?
感谢您的帮助!
我的完整代码看起来像
import numpy
from pylab import plot, show, title, xlabel, ylabel, subplot
from scipy import fft, arange
import pylab
data = numpy.loadtxt('sin1k.txt', delimiter='\t')
time = data[:,0]
value = data[:,1]
def plotSpectrum(y,Fs):
"""
Plots a Single-Sided Amplitude Spectrum of y(t)
"""
n = len(y) # length of the signal
k = arange(n)
T = n/Fs
frq = k/T # two sides frequency range
frq = frq[range(n/2)] # one side frequency range
Y = fft(y)/n # fft computing and normalization
Y = Y[range(n/2)]
plot(frq,abs(Y),'r') # plotting the spectrum
xlabel('Freq (Hz)')
ylabel('|Y(freq)|')
subplot(2,1,1)
plot(time,value)
xlabel('Time')
ylabel('Amplitude')
subplot(2,1,2)
plotSpectrum(value,(time[1]-time[0])*10e9)
pylab.xlim([0,2000])
show()
答案 0 :(得分:0)
事实证明,香料让我得到的所有2907个样本的间距不均匀;有些间隔相等,有些则没有!我的4个样本恰好是等距的。
我和Paul Wagner的图书馆(链接here)平分了样本,谢谢Paul!
fft结果是1045Hz,这更合理。