我是python的新手,上个学期只做过一门课程。基本上我想要傅立叶变换聚合物图像的绘图轮廓,如下所示:
我尝试了几种不同的方式,但它没有给我任何东西,可能是因为它有多嘈杂,而且它是非周期性的,所以我只是想知道它是否真的可以做到这一点?
到目前为止,这是我的代码:
%matplotlib inline
import pylab as plt
import numpy as np
from math import pi
from scipy.fftpack import fft
x = open('20x0.5hr.txt')
Yvalues = []
for line in x:
a,b = line.split()
Yvalues.append(b)
FuncFFT=fft(Yvalues)
FuncFFT=np.abs(FuncFFT)
plt.plot(FuncFFT[:100])
plt.show()
感谢。
答案 0 :(得分:0)
看起来事情正在发生,从某种频率开始然后增加,但是吵闹和不规律。或者它可能在前几个周期后停止,并且在该数据运行的中间会出现稍高的频率噪声。我认为这是感兴趣信号的一部分。还有一种下垂趋势。也许高频噪声正在做一些有趣的事情,幅度不同或有一些光谱结构。
如果对长期趋势不感兴趣,您可以使用高通滤波器将其减去,这样可以通过低频率(如图所示,每次运行数据为1到几个周期)或适合低阶多项式和减法。如果不感兴趣,可以通过低通滤波器降低最高频率的噪声。我倾向于成为一个Savitzky-Golay的粉丝,我可能会使用第四顺序和宽度大约是第一个大正峰值宽度的一半。我通常删除我不关心的东西,用于初始数据探索,只是为了让有趣的部分更易于查看和拟合曲线。
由于我对频率增加的印象,我可能会非线性地重新采样数据。而不是y与x,我定义了一个新的x'它比左侧部分更多地拉伸数据的右侧部分。我试着用plt.plot(x * x,y)和各种表情玩具,直到我认为我看到均匀间隔的峰值。当然,对仪器和物理现象的理论理解将有助于缩小可能性。然后我会重新发布数据,所以我有价值y'在x'的统一网格上点,然后看傅立叶功率谱。
然后,在任何清洁或非线性拉伸之前,我可能会立即查看傅立叶功率谱。无论是立即还是在某些处理之后,功率谱都是以几行计算的。处理它的对数更容易。
f = fft(b)
p = np.log( np.real( f * np.conj(f) ) )
plt.plot(p)
仅绘制f的实部或虚部,不会显示有见地的信息。您可能会看到余弦部分而不是正弦部分 - 也就是说,您在图中看到的信号对信号的时移很敏感。要查看噪声中是否存在周期性信号,您必须查看功率谱。
最后,你看过Signal Processing Stack Exchange网站了吗? https://dsp.stackexchange.com/。这些问题经常在那里处理,尽管编程语言细节通常会被推送到StackOverflow。