Технологии и ограничения:
- Языки программирования: Java, Python, C++;
- Дополнительные библиотеки: Apache math3;
Постановка задачи:
- Реализовать программный модуль фильтрации входящего сигнала на основе скользящего окна;
- Найти временной ряд отклонений (дисперсий) и построить их функцию распределения;
- Построить автокорреляционную функцию временного ряда:
- Реализовать при помощи стандартного способа (кольцевого смещения);
- При помощи БПФ;
Проект реализован на языке Python
с использованием следующих библиотек:
numpy
(Ссылка на страницу с инструкцией по установке и документацией): хранение массивов и некоторые базовые функции статистики (вычисление мат. ожидания, СКО).
Установить библиотеку можно с использованием pip3 следующей командой:pip3 install numpy
matplotlib
(Ссылка на страницу с инструкцией по установке и документацией): вывод графиков.
Установить библиотеку можно с использованием pip3 следующей командой:pip3 install matplotlib
scipy
(Ссылка на страницу с инструкцией по установке и документацией): использование готовой реализации быстрого преобразования Фурье (FFT).
Установить библиотеку можно с использованием pip3 следующей командой:pip3 install scipy
Перед запуском необходимо скачать проект. Это можно сделать с помощью команды git clone https://github.com/AlexanderKamynin/dsp.git
.
Запуск можно выполнить из корневой папки проекта с использованием команды python3 main.py
.
После запуска с использованием CLI выбирается тип генератора для сигнала, вводятся параметры, размер окна фильтрации (SMA) и выбирается метод построения автокорреляционной функции.
Полученные в ходе обработки сигнала результаты сохраняются в папке output
. В output/images/
находятся построенные графики, в output/result
текстовые файлы с числовыми данными.
Для генерации используется гармонический сигнал, формула которого может быть описана следующим уравнением:
Фильтрация сигнала осуществляется с помощью метода скользящего окна (Simple Moving Average). Для вычисления нового, отфильтрованного сигнала, в пределах задаваемого окна усредняются значения и заносятся в новый ряд по следующей формуле:
Несложно заметить, что при
Между полученным отфильтрованным сигналом и исходным ищется отклонение (разность между истинным и полученным значением). Полученный ряд сортируется по возрастанию, ищется значения функции распределения по следующей формуле:
Вычисление автокорреляционной функции циклическим сдвигом (кольцевым смещением) выполняется по следующей формуле:
Формула для автокорреляционной функции с применением быстрого преобразования Фурье выглядит следующим образом:
Известно, что для самого первого элемента коэффициент корреляции равен 1 (исходя из определения автокорреляционной функции). Значит коэффициент C можно найти, как
Отфильтрованный сигнал с помощью метода скользящего окна (SMA):