所以我一直在玩一些raw biosignal data,并试图学习python用于信号处理和特征提取
我有几个关于FFT和morlet小波构造的具体问题
FFT:我将一个信号存储在一个CSV文件中,其中包含80608个数据点。它包含所有原始1D数据。如果这很重要,则以每秒256个采样的速度从传感器获取信号
我的问题与快速傅里叶变换有关:
data = pd.read_csv('12-01-2016.csv')
signal = data['Electrode']
samplingRate = len(signal) # 80608
L = np.arange(1,np.floor(samplingRate/2),dtype='int')
fhat = np.fft.fft(signal,samplingRate)
PSD = fhat*np.conj(fhat)/samplingRate
plt.plot(PSD[L],color='r',LineWidth=2,label="FFT of noisy signal")
plt.legend()
plt.show()
fhat = np.fft.fft(signal,samplingRate)
我在这里要做的是创建一个morlet小波,并对其应用FFT将其转换为频域。一旦完成,我将在频域中逐点相乘-signalFFT*morletFFT(逐点)并应用逆FFT返回滤波后的信号。我这里有两个问题
a。当我通过正弦波和高斯波相乘来创建morlet小波时,如何选择频率(f)?该频率是否定义了被过滤掉的频率
b。如何为创建morlet小波的步骤选择窗口,正如我在这里定义的步骤=np.linespace()中的-1和1一样
# creating a morlet wavelet
steps = np.linspace(-1,1,samplingRate)
f = 150 # frequency
s = 7/(2*np.pi*f) # this is the standard deviation of the gaussain
c_signal = np.cos(2*np.pi*f*steps)
plt.plot(c_signal,color='r',LineWidth=2,label="Sine wave ")
plt.legend()
plt.show()
gausian_win = np.exp(-(pow(steps, 2))/(2*pow(s,2)))
plt.plot(gausian_win,color='r',LineWidth=2,label="Gaussian window")
plt.legend()
plt.show()
morlet = np.multiply(c_signal,gausian_win)
plt.plot(morlet,color='r',LineWidth=2,label="Morlet Wavelet")
plt.legend()
plt.show()
整个练习的目的是提取信号中存在的ECG伪影。快速的谷歌搜索告诉我它在100-150hz窗口之间,所以我假设我需要一个小波,它可以作为带通滤波器,将除100-150hz之外的所有频率归零。为什么我要尝试这样的小波变换,因为我读过这样做比直接做小波变换计算效率更高,因为FFT真的很快
另一个问题是,如何将其应用于实时数据而不是静态数据
多谢各位
另外,我做得对吗?我做错什么了吗?我问得太多是因为我笨吗? 另外,随着我对这个问题的理解越来越清楚,我会更新这个问题。如果你愿意,我可以和你分享我的笔记本
目前没有回答
相关问题 更多 >
编程相关推荐