提问人:Vinicento 提问时间:11/6/2023 最后编辑:maddes8chtVinicento 更新时间:11/8/2023 访问量:63
快速傅里叶滤波侵入/外汇即时报价数据去噪
Fast fourier filtering treshold / forex tick data denoising
问:
我有一个大型的货币对分时数据数据集,我想使用傅里叶对其进行降噪。问题是我想自动找到一个用于过滤的侵扰点,它将成为更大系统的一部分,不断获取新数据并对其进行预处理。
感谢您抽出宝贵时间:)
这是我的代码,很容易找到这个阈值,绘制数据并尝试不同的值,但这不是一个选项
market_data=market_data["<BID>"]
market_data=market_data.fillna(method="ffill")
market_data=market_data.fillna(method="bfill")
market_data=market_data - market_data.mean()
fourier = np.fft.fft(market_data)
amplitude_filter=fourier.copy()
amplitude_filter[(np.abs(amplitude_filter) < treshold)] = 0 # part where i apply treshold
amplitude_filtered_back=np.fft.ifft(amplitude_filter)
amplitude_filter=amplitude_filter[-80:]
答:
0赞
Lourenço Monteiro Rodrigues
11/8/2023
#1
如果您绝对没有考虑带通滤波,我会继续思考:“我想保留多少变化?
这意味着,在计算FFT后,您可以选择对信号总功率的贡献小于X%的频率分量。
您可以使用以下方法执行此操作:
amplitudes = np.abs(fft)
amp_sorted_index = np.argsort(amplitudes) # save correspondence between original and sorted elements
sorted_amplitudes = amplitudes[amp_sorted_index] # sort amplitudes in ascending
contributions = np.cumsum(sorted_amplitudes)/np.sum(sorted_amplitudes)
threshold = 0.1 # if you chose to keep 90% of most contributing
to_delete = amp_sorted_index[contributions < threshold]
fft[to_delete] = 0
filtered_data = np.fft.ifft(fft)
但同样,这种滤波是不寻常的,它定义了一个截止频率,并有一个滤波器来实现直接的物理读数,正如@lastchance评论的那样。
评论
fft
algorithm