【发布时间】:2014-01-02 13:05:25
【问题描述】:
我有两个从 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()
【问题讨论】: