【问题标题】:python fft plot "type error"python fft plot“类型错误”
【发布时间】:2016-02-11 22:32:26
【问题描述】:

我在绘制信号的 FFT 时遇到以下错误。该代码从 .txt 文件中读取信号样本。 TypeError: 无法根据规则 'safe' 将数组数据从 dtype('S17') 转换为 dtype('complex128')

         #%% Import libraries
           import numpy as np
           from scipy import signal
           from scipy import fft,log10
           from scipy import ifft
           import matplotlib.pyplot as plt
           import scipy.fftpack

           #%%  Import signal
           text_file = open("sample.txt", "r")
           a=text_file.readlines()
           plt.figure(1)
           plt.plot(a)
           fs=1000
           t=np.arange(0,(len(a)))/float(fs)
           plt.figure(201)
           plt.plot(t,a)
           plt.title('Signal')
           plt.show()
#%% Plot FFT
n=len(a) # Number of samples
k=np.arange(n)
T=n/float(fs) # Sample spacing
frq=k/T
frq = k/T # two sides frequency range
frq = frq[range(n/2)] # one side frequency range

Y = np.fft.fft(a)/n # fft computing and normalization
Y = Y[range(n/2)]

plt.figure(203)
plt.plot(frq,np.abs(Y),'r')  # plotting the spectrum
plt.show()

【问题讨论】:

  • 错误指的是哪一行?
  • 文件“C:\Python27\lib\site-packages\numpy\fft\fftpack.py”,第 79 行,在 _raw_fft r = work_function(a, wsave)
  • 你的代码是哪一行?
  • 为什么不使用np.genfromtxtnp.loadtxt 将文本文件读入浮点数组,而不是readlines()

标签: python matplotlib plot fft ifft


【解决方案1】:

a=text_file.readlines() 会给你一个字符串列表。您需要先将字符串转换为数字(可能是浮点数),然后才能执行plot(a)fft(a)

a=text_file.readlines()
a = [float(x) for x in a]
plt.figure(1)
plt.plot(a)
Y = np.fft.fft(a)

【讨论】:

    猜你喜欢
    • 2020-12-03
    • 2016-12-07
    • 2016-07-02
    • 2013-09-30
    • 2015-06-25
    • 2014-03-04
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多