我正在尝试使用递归神经网络对惯性测量单元进行传感器融合。IMUs通常与卡尔曼滤波(KF)结合使用,KF在进行加速度计和陀螺仪数据的融合以及‘平滑’的同时,得到滤波的、最终的方位输出(如果需要的话还有位置)。出于好奇,我试图使用包含LSTM单元的神经网络来复制这个功能:即,获取网络来计算Kalman滤波器使用训练数据估计的隐藏表示。为了使网络能够复制卡尔曼滤波融合算法的工作原理,首先对原始传感器数据的输入和KF的输出进行训练。
该网络接收6x10 + 6 = 66输入(陀螺仪的3个速度,当前时刻的3个加速度,以及过去10时刻的加速度),目的是提供4个输出(四元数表示方向)。网络结构是
Input -> LSTM units (128) -> Dense layer (128) -> Dense layer (64) -> Output(4)
我最初的训练数据是由陀螺和加速度计输入的噪声传感器数据和平滑的KF定向数据作为输出,从中我期望网络能够尝试学习传感器与方向之间的非线性映射。然而,虽然我正在训练的输出是干净的,但是网络的预测中有很多噪音,甚至在训练数据上也是如此。例如:
卡尔曼滤波输出(用作训练数据的输出):

神经网络的相应预测:

我在预测中看到的噪声并不是不自然的,因为输入传感器的数据也很嘈杂,输出中的噪声量相当于输入的噪声:但是期望神经网络在融合的同时也‘学习’平滑不对吗?有没有办法降低噪音,使网络运行更接近KF的方式?
发布于 2020-01-05 08:12:19
为了消除噪音,我建议你利用傅里叶变换得到信号的频谱。然后你可以应用一个阈值来去除主要是噪声的高频信号分量.
据我所知,您正在使用python。下面的代码创建了一个人工噪声信号,并使用FFT (快速傅立叶变换)算法将其删除。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.01)
y = np.sin(x)
y_noisy = y + np.random.uniform(low=0, high=0.5, size=len(y))
fft_values = np.fft.fft(y_noisy)
mean_value = np.mean(np.abs(fft_values))
threshold = 10 * mean_value # Fine-tune this
fft_values[np.abs(fft_values) < threshold] = 0
filtered_samples = np.fft.ifft(fft_values)
plt.plot(x, filtered_samples)
plt.show()祝好运!
发布于 2018-11-05 06:01:52
我建议你看看编码器解码器网络。AFAIK被用来去除图像中的噪声。看一次这的报纸
https://datascience.stackexchange.com/questions/34071
复制相似问题