我可以访问numpy和scipy,并希望创建一个简单的数据集FFT.我有两个列表,一个是y值,另一个是y值的时间戳.
将这些列表提供给scipy或numpy方法并绘制结果FFT的最简单方法是什么?
我查了一些示例,但它们都依赖于创建一组具有一定数量的数据点和频率等的假数据,并没有真正展示如何使用一组数据和相应的时间戳来实现它.
我尝试过以下示例:
from scipy.fftpack import fft
# Number of samplepoints
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
import matplotlib.pyplot as plt
plt.plot(xf, 2.0/N * np.abs(yf[0:N/2]))
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是当我将fft的参数更改为我的数据集并绘制它时,我得到了非常奇怪的结果,看起来频率的缩放可能会关闭.我不确定.
这是我试图FFT的数据的pastebin
http://pastebin.com/0WhjjMkb http://pastebin.com/ksM4FvZS
当我在整个事情上做一个fft时,它只有一个零的巨大尖峰而没有别的
这是我的代码:
## Perform FFT WITH SCIPY
signalFFT = fft(yInterp)
## Get Power Spectral Density
signalPSD = np.abs(signalFFT) ** 2
## …Run Code Online (Sandbox Code Playgroud) 我试图用python过滤嘈杂的心率信号.因为心率不应该是每分钟约220次心跳,我想过滤掉220bpm以上的所有噪音.我将220 /分钟转换为3.66666666赫兹,然后将赫兹转换为rad/s得到23.0383461 rad/sec.
采集数据的芯片采样频率为30Hz,因此我将其转换为rad/s,得到188.495559 rad/s.
在线查找了一些东西之后,我发现了一些带通滤波器的功能,我想把它变成低通.这是带通代码的链接,所以我将其转换为:
from scipy.signal import butter, lfilter
from scipy.signal import freqs
def butter_lowpass(cutOff, fs, order=5):
nyq = 0.5 * fs
normalCutoff = cutOff / nyq
b, a = butter(order, normalCutoff, btype='low', analog = True)
return b, a
def butter_lowpass_filter(data, cutOff, fs, order=4):
b, a = butter_lowpass(cutOff, fs, order=order)
y = lfilter(b, a, data)
return y
cutOff = 23.1 #cutoff frequency in rad/s
fs = 188.495559 #sampling frequency in rad/s
order = 20 #order of …Run Code Online (Sandbox Code Playgroud) 我已经在csv中读到了一个pandas数据帧,它有五列.某些行仅在第二列中具有重复值,我想从数据帧中删除这些行,但drop和drop_duplicates都不起作用.
这是我的实现:
#Read CSV
df = pd.read_csv(data_path, header=0, names=['a', 'b', 'c', 'd', 'e'])
print Series(df.b)
dropRows = []
#Sanitize the data to get rid of duplicates
for indx, val in enumerate(df.b): #for all the values
if(indx == 0): #skip first indx
continue
if (val == df.b[indx-1]): #this is duplicate rtc value
dropRows.append(indx)
print dropRows
df.drop(dropRows) #this doesnt work
df.drop_duplicates('b') #this doesnt work either
print Series(df.b)
Run Code Online (Sandbox Code Playgroud)
当我打印出df.b系列之前和之后它们的长度相同时,我仍然可以看到重复的副本.我的实施有什么问题吗?
我想知道numpy或scipy是否在他们的库中有一个方法来找到具有非均匀间距的值列表的数值导数.我们的想法是输入与值对应的时间戳,然后使用时间戳来查找数值导数.