Документация Engee
Notebook

Удаление высокочастотного шума из данных гироскопа

Открыть пример в Engee

В этом примере показано, как удалить высокочастотные выбросы из потоковой передачи с использованием блока MedianFilter из библиотеки EngeeDSP.

Медианный фильтр — это метод нелинейной цифровой фильтрации , часто используемый для удаления шума из изображения или сигнала.

Реализация данного алгоритма начинается с подключения библиотек:

In [ ]:
import .EngeeDSP
using DelimitedFiles
using Plots
plotlyjs()
Out[0]:
Plots.PlotlyJSBackend()

Загрузка сигнала с высокочастотными шумами из файла JL - это файл исходного кода Julia.

In [ ]:
matrix = readdlm("$(@__DIR__)/data.jl", '\t', Float64, '\n');

Кодирование файла на 714 сэмплов, чтобы каждый столбец данных содержал 10 кадров.

In [ ]:
In1 = map(Iterators.partition(axes(matrix,1), 714)) do cols
    matrix[cols,:]
end
Out[0]:
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.

In [ ]:
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...)
Out[0]:
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

Создание графика объекта для просмотра отфильтрованного вывода и сравнения его с входным сигналом с шумами.

In [ ]:
plot( [matrix[:,3],Out1[:,3]], ylims = [-300, 300], label=["Входной сигнал" "Отфильтрованный выход"], legendfontsize=6)
Out[0]:

Вывод

В данном примере были продемонстрированы возможности использования в среде разработки Engee дополнительных библиотек, расширяющих функционал среды, а именно библиотеки EngeeDSP и реализованного в ней MedianFilter.