Библиотека алгоритмов цифровой обработки сигналов
$ dotnet add package MathCore.DSPБиблиотека цифровой обработки сигналов (Digital Signal Processing) для .NET, предоставляющая набор базовых и продвинутых алгоритмов анализа и преобразования дискретных сигналов.
| TFM | Версия | Назначение |
|---|---|---|
| netstandard2.0 | .NET Standard 2.0 | Совместимость с широким спектром ранних платформ |
| net8.0 | .NET 8 | Современные приложения |
| net9.0 | .NET 9 | Актуальные возможности и оптимизации |
| net10.0 | .NET 10 | Самая свежая платформа |
# Установка через NuGet
dotnet add package MathCore.DSP
using MathCore.DSP; // Основные типы
using MathCore.DSP.FFT; // FFT‑алгоритмы
using MathCore.DSP.Filters; // Фильтры
using MathCore.DSP.Windows; // Оконные функции
// Допустим есть сигнал
double[] signal = GetInputSamples(); // Получаем массив выборок (пользовательский метод) // получаем данные
int n = signal.Length; // Длина сигнала // сохраняем длину
// Применим окно Хэнна для снижения утечек спектра
var window = Window.Hann(n); // Генерируем окно Хэнна // создаём окно
for (var i = 0; i < n; i++) // Применяем окно к сигналу // применяем окно
signal[i] *= window[i]; // Умножаем на окно // масштабируем
// Выполним прямое FFT
var spectrum = FFT.RealFFT(signal); // Расчёт комплексного спектра // считаем спектр
// Получим амплитудный спектр
var amplitudes = spectrum.GetAmplitudes(); // Амплитуды гармоник // извлекаем амплитуды
// Спроектируем низкочастотный FIR‑фильтр
double sampleRate = 48000; // Частота дискретизации Гц // задаём частоту
double cutoff = 5000; // Частота среза Гц // задаём срез
int order = 127; // Порядок фильтра (количество коэффициентов - 1) // задаём порядок
var fir = FirFilter.LowPass(order, cutoff, sampleRate, WindowType.Blackman); // Создаём фильтр // проектируем FIR
// Применим фильтр к исходному сигналу
var filtered = fir.Process(signal); // Фильтрация // применяем фильтр
// Обратное FFT для восстановления (пример для модифицированного спектра)
var restored = FFT.RealInverseFFT(spectrum, n); // Обратное преобразование // обратное FFT
Span<T> и Memory<T> (на поддерживаемых TFM)MathCore.DSP.FFT – преобразования ФурьеMathCore.DSP.Filters – фильтры и проектированиеMathCore.DSP.Windows – оконные функцииMathCore.DSP.Signals – типы данных сигналовMathCore.DSP.Statistics – статистический анализusing MathCore.DSP.Operations; // Предположим модуль операций
double[] a = { 1, 2, 3, 4 }; // Первый сигнал // данные A
double[] b = { 0.25, 0.5, 0.25 }; // Импульсная характеристика фильтра // данные B
var convolution = Convolution.Linear(a, b); // Линейная свёртка // выполняем свёртку
MIT. Свободное использование в коммерческих и открытых проектах с сохранением уведомления о лицензии.
// Быстрый расчёт амплитудного спектра
var amplitudes = FFT.RealFFT(samples).GetAmplitudes(); // Получаем массив амплитуд
using MathCore.DSP;Если нужна дополнительная функциональность – создайте Issue: это помогает развивать библиотеку.