Я пытаюсь фильтровать данные в режиме реального времени с 3 каналов. Я использую библиотеку Mat hnet. Учитывая, что я фильтрую в реальном времени, а фильтры являются причинно-следственными, нужно ли создавать один фильтр для каждого канала? Я не уверен, нужно ли мне реализовать опцию A или опцию B.
Опция A: 1 фильтр для всех каналов
static MathNet.Filtering.OnlineFilter bandpassFilter;
private void CreateFilter()
{
bandpassFilter = MathNet.Filtering.OnlineFilter.CreateBandpass(MathNet.Filtering.ImpulseResponse.Finite, fs, fc1, fc2, order);
}
private double[,] FilterData(double[,] unfilteredData)
{
double[] chFilteredData;
double[,] filteredData = new double[unfilteredData.GetLength(0), unfilteredData.GetLength(1)];
for (int channel = 0; channel < numChannels; channel++)
{
chFilteredData = bandpassFilter.ProcessSamples(unfilteredData.GetRow(channel));
filteredData.SetRow(channel, chFilteredData);
}
return filteredData;
}
Опция B: 1 фильтр для каждого канала
List<MathNet.Filtering.OnlineFilter> bandpassFilters;
private void CreateFilters()
{
for (int channel = 0; channel < numChannels; channel++)
bandpassFilters[channel] = MathNet.Filtering.OnlineFilter.CreateBandpass(MathNet.Filtering.ImpulseResponse.Finite, fs, fc1, fc2, order);
}
private double[,] FilterData(double[,] unfilteredData)
{
double[] chFilteredData;
double[,] filteredData = new double[unfilteredData.GetLength(0), unfilteredData.GetLength(1)];
for (int channel = 0; channel < numChannels; channel++)
{
chFilteredData = bandpassFilters[channel].ProcessSamples(unfilteredData.GetRow(channel));
filteredData.SetRow(channel, chFilteredData);
}
return filteredData;
}