Удаление высокочастотного шума из данных гироскопа
В этом примере показано, как удалить высокочастотные выбросы из потоковой передачи с использованием блока MedianFilter из библиотеки EngeeDSP.
Медианный фильтр — это метод нелинейной цифровой фильтрации , часто используемый для удаления шума из изображения или сигнала.
Реализация данного алгоритма начинается с подключения библиотек:
import .EngeeDSP
using DelimitedFiles
using Plots
plotlyjs()
Plots.PlotlyJSBackend()
Загрузка сигнала с высокочастотными шумами из файла JL - это файл исходного кода Julia.
matrix = readdlm("$(@__DIR__)/data.jl", '\t', Float64, '\n');
Кодирование файла на 714 сэмплов, чтобы каждый столбец данных содержал 10 кадров.
In1 = map(Iterators.partition(axes(matrix,1), 714)) do cols
matrix[cols,:]
end
10-element Vector{Matrix{Float64}}:
[-122.0 -13.0 3.0; -101.0 17.0 -4.0; … ; -109.0 12.0 1.0; -104.0 8.0 -4.0]
[-99.0 18.0 -7.0; -92.0 19.0 15.0; … ; -110.0 22.0 -7.0; -113.0 21.0 -3.0]
[-89.0 9.0 9.0; -112.0 27.0 -7.0; … ; -99.0 16.0 5.0; -94.0 23.0 9.0]
[-94.0 23.0 9.0; -94.0 23.0 -7.0; … ; -113.0 10.0 -2.0; -106.0 4.0 6.0]
[-91.0 -2.0 -6.0; -108.0 10.0 5.0; … ; -91.0 16.0 0.0; -91.0 16.0 0.0]
[-111.0 8.0 3.0; -111.0 -2.0 4.0; … ; -105.0 13.0 9.0; -99.0 25.0 -2.0]
[-99.0 25.0 -2.0; -102.0 7.0 7.0; … ; -101.0 14.0 6.0; -107.0 24.0 14.0]
[-97.0 8.0 9.0; -95.0 1.0 14.0; … ; -112.0 10.0 19.0; -101.0 1.0 -2.0]
[-91.0 1.0 28.0; -107.0 18.0 6.0; … ; -109.0 -3.0 3.0; -106.0 12.0 -5.0]
[-106.0 12.0 -5.0; -112.0 5.0 9.0; … ; -98.0 6.0 28.0; -120.0 6.0 28.0]
Реализация фильтрации, система использует длину окна 10.
var_median_fir = EngeeDSP.MedianFilter(10) # Объявление фильтра
EngeeDSP.setup( var_median_fir, In1[1] )
Out1 = In1
for i = 1:10 # Обработка сигнала в цикле.
global gyroData = In1[i]
global filteredData = EngeeDSP.step(var_median_fir,gyroData)
Out1[i] = filteredData
end
Out1 = vcat(Out1...)
7140×3 Matrix{Float64}:
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
-49.0 0.0 0.0
-98.0 0.0 -0.5
-99.5 0.0 -2.5
-99.5 1.0 -2.5
-101.0 3.0 -5.0
-107.0 5.5 -5.5
-103.5 6.5 -7.5
-108.0 6.5 -10.5
-110.0 7.0 -12.0
⋮
-110.5 12.0 9.0
-110.0 13.0 12.0
-110.0 14.0 12.5
-110.0 14.0 12.5
-112.0 14.0 12.5
-112.0 16.0 12.5
-110.0 16.0 12.5
-110.0 14.0 10.0
-110.0 14.0 8.0
-110.0 14.0 7.0
-105.0 10.5 7.0
-107.0 7.0 7.0
Создание графика объекта для просмотра отфильтрованного вывода и сравнения его с входным сигналом с шумами.
plot( [matrix[:,3],Out1[:,3]], ylims = [-300, 300], label=["Входной сигнал" "Отфильтрованный выход"], legendfontsize=6)