2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2025-05-06 11:32:59 +00:00
2022-11-05 17:48:30 +03:00

58 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Esiur.Analysis.DSP
{
public static class Functions
{
public static double[] ConvolveMany(params double[][] signals)
{
var rt = signals[0];
for (var i = 1; i < signals.Length; i++)
rt = rt.Convolve(signals[i]);
return rt;
}
public static double[] Convolve(this double[] signal, double[] filter)
{
var length = signal.Length + filter.Length - 1;
var rt = new double[length];
//for (var i = 0; i < signal.Length; i++)
// for (var j = 0; j < filter.Length; j++)
// rt[i + j] += signal[i] * filter[j];
for (var i = 0; i < length; i++)
{
for (var j = 0; j < signal.Length; j++)
{
if (i - j >= 0 && i - j < filter.Length)
rt[i] += signal[j] * filter[i - j];
}
}
return rt;
}
public static double[] CrossCorrelate(this double[] signal, double[] filter)
{
var length = signal.Length + filter.Length - 1;
var rt = new double[length];
for (var i = 0; i < length; i++)
{
for (var j = 0; j < signal.Length && j + i < filter.Length; j++)
{
rt[i] = signal[j] * filter[i + j];
}
}
return rt;
}
}
}