def fft_plot(dp, plt=True): dp -= average(dp) N = len(dp) f = 1. / 200 xf = linspace(0, 1. / (2 * f), N // 2) y = fft(dp) yf = abs(y)[:N // 2] * 2.0 / N idx = where(xf > 2)[0][0] # plot(xf,yf/max(yf)) # axis([0,1.7,0,0.5]) # xlabel('Frequency [Hz]') # ylabel('Amplitude (normalized)') b, a = sc.butter(7, 0.15, btype='low') dP = sc.filtfilt(b, a, yf[:idx]) if plt: # plot(xf[:idx],dP[:idx]) show() return xf[:idx], dP[:idx]解释代码
时间: 2024-04-07 10:29:49 浏览: 142
这段代码定义了一个名为fft_plot的函数,函数接收一个一维数组dp和一个可选参数plt(默认为True)。
函数首先将dp数组减去其平均值,以消除直流分量。
然后计算采样频率f,并使用linspace函数生成一个从0到1/(2*f)的等差数列xf,作为频率轴。
接着,函数使用fft函数对dp数组进行快速傅里叶变换,并取其绝对值,再将前半部分乘以2/N,得到频率谱yf。
函数使用where函数找到xf中大于2的第一个位置,将其作为截止频率。
接下来,函数使用scipy.signal模块的butter函数设计一个7阶的低通滤波器,将yf数组进行滤波,得到滤波后的结果dP。
最后,如果plt参数为True,则将dP随着xf的变化画出图像并显示出来,并将xf和dP返回。
阅读全文