用法:
class cusignal.estimation.filters.KalmanFilter(dim_x, dim_z, dim_u=0, points=1, dtype=<class 'numpy.float32'>)
这是一个multi-point卡尔曼滤波器实现https://github.com/rlabbe/filterpy/blob/master/filterpy/kalman/kalman_filter.py,具有函数的子集。
所有卡尔曼滤波器矩阵都堆叠在 X 轴上。这是为了在 GPU 上实现最佳的全局访问。
- dim_x:int
卡尔曼滤波器的状态变量数。例如,如果您在二维中跟踪对象的位置和速度,dim_x 将为 4。这用于设置 P、Q 和 u 的默认大小
- dim_z:int
测量输入的数量。例如,如果传感器为您提供 (x,y) 中的位置,则 dim_z 将为 2。
- dim_u:int(可选)
控制输入的大小(如果正在使用)。默认值 0 表示不使用。
- points:int(可选)
要跟踪的卡尔曼滤波器点数。
- dtype:dtype(可选)
计算的数据类型。
参数:
参考:
- 1
Dan Simon. “Optimal State Estimation.” John Wiley & Sons. p. 208-212. (2006)
- 2
Roger Labbe. “Kalman and Bayesian Filters in Python” https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python
例子:
这是一个使用仅读取位置的传感器跟踪位置和速度的过滤器。
首先构造具有所需维度、点数和数据类型的对象。
import cupy as cp import numpy as np from cusignal import KalmanFilter points = 1024 kf = KalmanFilter(dim_x=4, dim_z=2, points=points, dtype=cp.float64)
为所有卡尔曼滤波器点分配状态(位置和速度)的初始值。
initial_location = np.array( [[10.0, 10.0, 0.0, 0.0]], dtype=dt ).T # x, y, v_x, v_y kf.x = cp.repeat( cp.asarray(initial_location[cp.newaxis, :, :]), points, axis=0 )
定义所有卡尔曼滤波器点的状态转移矩阵:
F = np.array( [ [1.0, 0.0, 1.0, 0.0], # x = x0 + v_x*dt [0.0, 1.0, 0.0, 1.0], # y = y0 + v_y*dt [0.0, 0.0, 1.0, 0.0], # dx = v_x [1.0, 0.0, 0.0, 1.0], ], # dy = v_y dtype=dt, ) kf.F = cp.repeat(cp.asarray(F[cp.newaxis, :, :]), points, axis=0)
定义所有卡尔曼滤波器点的测量函数:
H = np.array( [[1.0, 0.0, 1.0, 0.0], [0.0, 1.0, 0.0, 1.0]], dtype=dt, # x_0 # y_0 ) kf.H = cp.repeat(cp.asarray(H[cp.newaxis, :, :]), points, axis=0)
定义所有卡尔曼滤波器点的协方差矩阵:
initial_estimate_error = np.eye(dim_x, dtype=dt) * np.array( [1.0, 1.0, 2.0, 2.0], dtype=dt ) kf.P = cp.repeat( cp.asarray(initial_estimate_error[cp.newaxis, :, :]), points, axis=0, )
定义所有卡尔曼滤波器点的测量噪声:
measurement_noise = np.eye(dim_z, dtype=dt) * 0.01 kf.R = cp.repeat( cp.asarray(measurement_noise[cp.newaxis, :, :]), points, axis=0 )
定义所有卡尔曼滤波器点的过程噪声:
现在只需执行标准的预测/更新循环: 注意:此示例仅对所有点使用相同的传感器读数
kf.predict() z = get_sensor_reading() (dim_z, 1) kf.z = cp.repeat(z[cp.newaxis, :, :], points, axis=0) kf.update()
结果在:
相关用法
- Python cusignal.windows.windows.hann用法及代码示例
- Python cusignal.windows.windows.general_gaussian用法及代码示例
- Python cusignal.waveforms.waveforms.chirp用法及代码示例
- Python cusignal.windows.windows.gaussian用法及代码示例
- Python cusignal.windows.windows.hamming用法及代码示例
- Python cusignal.windows.windows.get_window用法及代码示例
- Python cusignal.waveforms.waveforms.gausspulse用法及代码示例
- Python cusignal.peak_finding.peak_finding.argrelmin用法及代码示例
- Python cusignal.windows.windows.bartlett用法及代码示例
- Python cusignal.spectral_analysis.spectral.welch用法及代码示例
- Python cusignal.windows.windows.chebwin用法及代码示例
- Python cusignal.windows.windows.general_cosine用法及代码示例
- Python cusignal.peak_finding.peak_finding.argrelextrema用法及代码示例
- Python cusignal.convolution.convolve.convolve2d用法及代码示例
- Python cusignal.filtering.resample.resample_poly用法及代码示例
- Python cusignal.convolution.correlate.correlate用法及代码示例
- Python cusignal.convolution.convolve.fftconvolve用法及代码示例
- Python cusignal.waveforms.waveforms.unit_impulse用法及代码示例
- Python cusignal.convolution.convolve.convolve1d3o用法及代码示例
- Python cusignal.spectral_analysis.spectral.spectrogram用法及代码示例
注:本文由纯净天空筛选整理自rapids.ai大神的英文原创作品 cusignal.estimation.filters.KalmanFilter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。