Repository navigation
Module_SignalProcessing_Filters
Location: Home / Signal processing / Filters
The Vorcyc.Mathematics.SignalProcessing.Filters namespace includes 1D filters: adaptive (LmfFilter, LmsFilter, NlmfFilter, NlmsFilter, RlsFilter, etc.), base types (FilterChain, FirFilter, IirFilter, StereoFilter, etc.), Bessel, biquad, Butterworth, Chebyshev, elliptic, FIR design (Fda), one-pole, polyphase, comb, DC removal, de-emphasis, Hilbert, median, moving average, pre-emphasis, RASTA, Savitzky–Golay, Thiran, and Wiener filters.
0.10.18: Filter kernels, FDA, and analog prototypes have a
Ttrack (float/double) alongside the existing float types.new IirFilter(IEnumerable<double>, …)/FirFilter(IEnumerable<double>)/ZiFilter(IEnumerable<double>, …)still cast to float — use the generic /*64types to keep precision.
IirFilter<T> implements the same delay-line difference equation as IirFilter, for float and double only (IOnlineFilter<T>). IirFilter64 is IirFilter<double>.
var tf = DesignFilter.IirLpTf(0.1, PrototypeButterworth.Poles<double>(4));
var f64 = new IirFilter<double>(tf);
double[] y = f64.ApplyTo(x);Coefficients, zpk (Zeros / Poles / ZpToTf / TfToZp), StateSpace / StateSpace<T>, Zi, ImpulseResponse, FrequencyResponse (Fft<T>), GroupDelay / PhaseDelay, Normalize / NormalizeAt, series / parallel * / +.
0.10.20: empty / null zpk → identity
[1]. All-polenew TransferFunction([], poles, gain)is valid.
FirFilter<T> is the delay-line FIR kernel; ZiFilter<T> keeps a state vector and ZeroPhase (filtfilt). FirFilter64 / ZiFilter64 are the double aliases.
DesignFilter.IirLpTf<T> / IirHpTf / IirBpTf / IirBsTf, notch / peak / comb, SOS, FirWin* / Fir / FirEquiripple* / Remez<T>. Prototypes: PrototypeButterworth.Poles<T>, Chebyshev I/II, elliptic, Bessel. Designed wrappers (Butterworth.LowPassFilter<T>, BiQuad / OnePole cookbook, …) inherit ZiFilter<T> or IirFilter<T>.
Gain normalisation of the pole-filter designs: low-pass at DC, high-pass at Nyquist, band-stop at DC, and band-pass at the image of the prototype's DC, the pre-warped geometric centre 2*atan(sqrt(tan(pi*fLow) * tan(pi*fHigh))) (not the arithmetic centre of the edges, which was used before 0.10.24). Chebyshev I / elliptic designs of even order therefore have unit gain at that point, where SciPy / MATLAB have 10^(-Rp/20).
All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters
📒 Contents
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.LmfFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.LmsFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.NlmfFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.NlmsFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.RlsFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.SignLmsFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.VariableStepLmsFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.FilterChain class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.FirFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.IirFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.IirFilter<T> / IirFilter64
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.TransferFunction<T>
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.StereoFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.TransferFunction class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Base.ZiFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.BandPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.BandStopFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.PrototypeBessel class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.AllPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.BandPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.BiQuadFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.HighShelfFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.LowShelfFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.NotchFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.PeakFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.BandPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.BandStopFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.PrototypeButterworth class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.BandPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.BandStopFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.PrototypeChebyshevI class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.BandPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.BandStopFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.PrototypeChebyshevII class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.BandPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.BandStopFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.PrototypeElliptic class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Fda.DesignFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Fda.FilterBanks class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Fda.Remez class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Fda.VtlnWarper class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.OnePole.HighPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.OnePole.LowPassFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.OnePole.OnePoleFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.Polyphase.PolyphaseSystem class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.CombFeedbackFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.CombFeedforwardFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.DcRemovalFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.DeEmphasisFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.HilbertFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.MedianFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.MedianFilter2 class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.MovingAverageFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.MovingAverageRecursiveFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.PreEmphasisFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.RastaFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.SavitzkyGolayFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.ThiranFilter class
- 🔖 Vorcyc.Mathematics.SignalProcessing.Filters.WienerFilter class
- 🔖 Kalman filters
All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive
Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.LmfFilter implements the least-mean-fourth (LMF) adaptive filtering algorithm.
-
private readonly float _mu- Gets or sets filter step size.
-
private readonly float _leakage- Gets or sets filter leakage factor.
-
public LmfFilter(int order, float mu = 0.75f, float leakage = 0)- Constructs
LmfFilterwith given order. - Parameters:
-
order: filterorder. -
mu: step size, default 0.75. -
leakage: leakage factor, default 0.
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses LmfFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class LmfFilterExample
{
public static void Main()
{
// Define filter order, step size, and leakage factor
int order = 4;
float mu = 0.75f;
float leakage = 0.01f;
// Create LmfFilter instance
LmfFilter filter = new LmfFilter(order, mu, leakage);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.LmsFilter implements the least mean square (Least-Mean-Squares) adaptive filtering algorithm.
-
private readonly float _mu- Gets or sets filter step size.
-
private readonly float _leakage- Gets or sets filter leakage factor.
-
public LmsFilter(int order, float mu = 0.75f, float leakage = 0)- Constructs
LmsFilterwith given order. - Parameters:
-
order: filterorder. -
mu: step size, default 0.75. -
leakage: leakage factor, default 0.
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses LmsFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class LmsFilterExample
{
public static void Main()
{
// Define filter order, step size, and leakage factor
int order = 4;
float mu = 0.75f;
float leakage = 0.01f;
// Create LmsFilter instance
LmsFilter filter = new LmsFilter(order, mu, leakage);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.NlmfFilter implements the normalized least-mean-fourth (NLMF) adaptive filtering algorithm.
-
private readonly float _mu- Gets or sets filter step size.
-
private readonly float _eps- Gets or sets filter normalization factor.
-
private readonly float _leakage- Gets or sets filter leakage factor.
-
public NlmfFilter(int order, float mu = 0.75f, float eps = 1, float leakage = 0)- Constructs
NlmfFilterwith given order. - Parameters:
-
order: filterorder. -
mu: step size, default 0.75. -
eps: normalization factor; default 1.. -
leakage: leakage factor, default 0.
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses NlmfFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class NlmfFilterExample
{
public static void Main()
{
// Define filter order, step size, normalization factor, and leakage factor
int order = 4;
float mu = 0.75f;
float eps = 1.0f;
float leakage = 0.01f;
// Create NlmfFilter instance
NlmfFilter filter = new NlmfFilter(order, mu, eps, leakage);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.NlmsFilter implements the normalized least mean square (Normalized Least-Mean-Squares) adaptive filtering algorithm.
-
private readonly float _mu- Gets or sets filter step size.
-
private readonly float _eps- Gets or sets filter normalization factor.
-
private readonly float _leakage- Gets or sets filter leakage factor.
-
public NlmsFilter(int order, float mu = 0.75f, float eps = 1, float leakage = 0)- Constructs
NlmsFilterwith given order. - Parameters:
-
order: filterorder. -
mu: step size, default 0.75. -
eps: normalization factor; default 1.. -
leakage: leakage factor, default 0.
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses NlmsFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class NlmsFilterExample
{
public static void Main()
{
// Define filter order, step size, normalization factor, and leakage factor
int order = 4;
float mu = 0.75f;
float eps = 1.0f;
float leakage = 0.01f;
// Create NlmsFilter instance
NlmsFilter filter = new NlmsFilter(order, mu, eps, leakage);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.RlsFilter implements the recursive least squares (Recursive-Least-Squares) adaptive filtering algorithm.
-
private readonly float _lambda- Gets or sets filter forgetting factor.
-
private readonly float[,] _p- Gets or sets filter inverse correlation matrix.
-
private readonly float[] _gains- Gets or sets filter gain coefficient matrix.
-
private readonly float[,] _dp, _tmp- Gets or sets temporary matrix for filter computation.
-
public RlsFilter(int order, float lambda = 0.99f, float initCorrMatrix = 1e2f)- Constructs
RlsFilterwith given order. - Parameters:
-
order: filterorder. -
lambda: forgetting factor; default 0.99.. -
initCorrMatrix: initial inverse correlation matrix value; default 1e2f..
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses RlsFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class RlsFilterExample
{
public static void Main()
{
// Define filter order, forgetting factor, and initial inverse correlation matrix value
int order = 4;
float lambda = 0.99f;
float initCorrMatrix = 1e2f;
// Create RlsFilter instance
RlsFilter filter = new RlsFilter(order, lambda, initCorrMatrix);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.SignLmsFilter implements the sign least-mean-squares adaptive filtering algorithm.
-
private readonly float _mu- Gets or sets filter step size.
-
private readonly float _leakage- Gets or sets filter leakage factor.
-
public SignLmsFilter(int order, float mu = 0.75f, float leakage = 0)- Constructs
SignLmsFilterwith given order. - Parameters:
-
order: filterorder. -
mu: step size, default 0.75. -
leakage: leakage factor, default 0.
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses SignLmsFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class SignLmsFilterExample
{
public static void Main()
{
// Define filter order, step size, and leakage factor
int order = 4;
float mu = 0.75f;
float leakage = 0.01f;
// Create SignLmsFilter instance
SignLmsFilter filter = new SignLmsFilter(order, mu, leakage);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive.VariableStepLmsFilter implements LMS adaptive filtering with variable step size.
-
private readonly float[] _mu- Gets or sets filter step-size array.
-
private readonly float _leakage- Gets or sets filter leakage factor.
-
public VariableStepLmsFilter(int order, float[] mu = null, float leakage = 0)- Constructs
VariableStepLmsFilterwith given order. - Parameters:
-
order: filterorder. -
mu: step-size array; default 0.75 per order.. -
leakage: leakage factor, default 0.
-
- Constructs
-
public override float Process(float input, float desired)- Processes one input/desired sample and adaptively updates filter coefficients.
- Parameters:
-
input: input signal sample.. -
desired: desired signal sample..
-
- Returns: filter output sample.
The following example uses VariableStepLmsFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Adaptive;
public class VariableStepLmsFilterExample
{
public static void Main()
{
// Define filter order, step-size array, and leakage factor
int order = 4;
float[] mu = { 0.75f, 0.8f, 0.85f, 0.9f };
float leakage = 0.01f;
// Create VariableStepLmsFilter instance
VariableStepLmsFilter filter = new VariableStepLmsFilter(order, mu, leakage);
// Define input and desired signals
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
float[] desiredSignal = { 1.5f, 2.5f, 3.5f, 4.5f, 5.5f };
// Process signal and print result
for (int i = 0; i < inputSignal.Length; i++)
{
float output = filter.Process(inputSignal[i], desiredSignal[i]);
Console.WriteLine($"Input: {inputSignal[i]}, Desired: {desiredSignal[i]}, Output: {output}");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Base
Vorcyc.Mathematics.SignalProcessing.Filters.Base.FilterChain implements serial filter chain.
-
private readonly List<IOnlineFilter> _filters- Gets or sets filter list in chain.
-
public FilterChain(IEnumerable<IOnlineFilter> filters = null)- constructs
FilterChainfrom online filter collection. - Parameters:
-
filters: online filter collection; default empty..
-
- constructs
-
public FilterChain(IEnumerable<TransferFunction> tfs)- Constructs
FilterChainfrom transfer function set (e.g. SOS sections); createsIirFilterobjects internally. - Parameters:
-
tfs: transfer function set..
-
- Constructs
-
public void Add(IOnlineFilter filter)- Adds filter to chain.
- Parameters:
-
filter: Onlinefilter.
-
-
public void Insert(int index, IOnlineFilter filter)- Inserts filter at specified index in chain.
- Parameters:
-
index: filter index in chain.. -
filter: Onlinefilter.
-
-
public void RemoveAt(int index)- Removes filter at specified index from chain.
- Parameters:
-
index: filter index in chain..
-
-
public float Process(float sample)- Processes one sample through filter chain.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public void Reset()- Resets all filters in chain.
-
public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
The following example uses FilterChain with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Base;
public class FilterChainExample
{
public static void Main()
{
// example filters
IOnlineFilter filter1 = new LowPassFilter(0.5f);
IOnlineFilter filter2 = new HighPassFilter(0.2f);
// create `FilterChain` and add filters
FilterChain filterChain = new FilterChain();
filterChain.Add(filter1);
filterChain.Add(filter2);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filterChain.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Reset filter chain
filterChain.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Base.FirFilter implements a finite impulse response (FIR) filter.
-
public float[] Kernel- Gets copy of filter kernel (impulse response).
-
public override TransferFunction Tf { get; protected set; }- Gets or sets filter transfer function.
-
public int KernelSizeForBlockConvolution { get; set; } = 64- Gets or sets minimum kernel length to switch to overlap-save in auto mode.
-
public FirFilter(IEnumerable<float> kernel)- constructs
FirFilterfrom given kernel. - Parameters:
-
kernel: FIR filter kernel.
-
- constructs
-
public FirFilter(IEnumerable<double> kernel)- constructs
FirFilterfrom 64-bit kernel. - Parameters:
-
kernel: FIR filter kernel.
-
- constructs
-
public FirFilter(TransferFunction tf)- constructs
FirFilterfrom transfer function. - Parameters:
-
tf: transfer function.
-
- constructs
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public float[] ProcessAllSamples(float[] samples)- processes all samples.
- Parameters:
-
samples: sample array..
-
- Returns: processed sample array.
-
public float[] ProcessAllSamples(Span<float> samples)- processes all samples.
- Parameters:
-
samples: sample array..
-
- Returns: processed sample array.
-
protected DiscreteSignal ApplyFilterDirectly(DiscreteSignal signal)- applies filter directly.
- Parameters:
-
signal: input signal.
-
- Returns: processed
DiscreteSignal.
-
public void ChangeKernel(float[] kernel)- changes filter kernel.
- Parameters:
-
kernel: New kernel.
-
-
public override void Reset()- Resetsfilter.
-
public static FirFilter operator *(FirFilter filter1, FirFilter filter2)- creates series connection of two FIR filters.
- Parameters:
-
filter1: first FIR filter.. -
filter2: second FIR filter..
-
- Returns: series-connected FIR filter.
-
public static IirFilter operator *(FirFilter filter1, IirFilter filter2)- creates series connection of FIR and IIR filters.
- Parameters:
-
filter1: FIR filter. -
filter2: IIR filter.
-
- Returns: series-connected IIR filter.
-
public static FirFilter operator +(FirFilter filter1, FirFilter filter2)- creates parallel connection of two FIR filters.
- Parameters:
-
filter1: first FIR filter.. -
filter2: second FIR filter..
-
- Returns: parallel-connected FIR filter.
-
public static IirFilter operator +(FirFilter filter1, IirFilter filter2)- creates parallel connection of FIR and IIR filters.
- Parameters:
-
filter1: FIR filter. -
filter2: IIR filter.
-
- Returns: parallel-connected IIR filter.
The following example uses FirFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Base;
public class FirFilterExample
{
public static void Main()
{
// Define filter kernel
float[] kernel = { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f };
// Create FirFilter instance
FirFilter filter = new FirFilter(kernel);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Reset filter
filter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Base.IirFilter implements a infinite impulse response (IIR) filter.
-
public override TransferFunction Tf { get; protected set; }- Gets or sets filter transfer function.
-
public int DefaultImpulseResponseLength { get; set; } = 512- Gets or sets default truncated impulse response length.
-
public IirFilter(IEnumerable<float> b, IEnumerable<float> a)- constructs
IirFilterfrom numerator and denominator coefficients. - Parameters:
-
b: transfer function numerator coefficients.. -
a: transfer function denominator coefficients..
-
- constructs
-
public IirFilter(IEnumerable<double> b, IEnumerable<double> a)- constructs
IirFilterfrom 64-bit numerator/denominator coefficients. - Parameters:
-
b: transfer function numerator coefficients.. -
a: transfer function denominator coefficients..
-
- constructs
-
public IirFilter(TransferFunction tf)- constructs
IirFilterfrom transfer function. - Parameters:
-
tf: transfer function.
-
- constructs
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
protected DiscreteSignal ApplyFilterDirectly(DiscreteSignal signal)- applies filter directly.
- Parameters:
-
signal: input signal.
-
- Returns: processed
DiscreteSignal.
-
public void ChangeNumeratorCoeffs(float[] b)- Changes filter numerator coefficients.
- Parameters:
-
b: new numerator coefficients..
-
-
public void ChangeDenominatorCoeffs(float[] a)- Changes filter denominator coefficients.
- Parameters:
-
a: new denominator coefficients..
-
-
public void Change(TransferFunction tf)- Changes filter transfer function.
- Parameters:
-
tf: new transfer function..
-
-
public override void Reset()- Resetsfilter.
-
public void Normalize()- Normalizes transfer function (divides all coefficients by the first denominator coefficient).
-
public static IirFilter operator *(IirFilter filter1, LtiFilter filter2)- creates series connection of IIR and arbitrary LTI filter.
- Parameters:
-
filter1: IIR filter. -
filter2: LTI filter.
-
- Returns: series-connected IIR filter.
-
public static IirFilter operator +(IirFilter filter1, LtiFilter filter2)- creates parallel connection of IIR and arbitrary LTI filter.
- Parameters:
-
filter1: IIR filter. -
filter2: LTI filter.
-
- Returns: parallel-connected IIR filter.
The following example uses IirFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Base;
public class IirFilterExample
{
public static void Main()
{
// Define filter numerator and denominator coefficients
float[] b = { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f };
float[] a = { 1.0f, -0.5f, 0.25f, -0.125f, 0.0625f };
// Create IirFilter instance
IirFilter filter = new IirFilter(b, a);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Reset filter
filter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Base.StereoFilter filters interleaved stereo buffer data. It contains two independent filters: one for the left channel and one for the right channel.
-
private readonly IOnlineFilter _filterLeft- Gets or sets left-channel filter.
-
private readonly IOnlineFilter _filterRight- Gets or sets right-channel filter.
-
private bool _isRight- internal flag toggling left/right channel.
-
public StereoFilter(IOnlineFilter filterLeft, IOnlineFilter filterRight)- constructs
StereoFilterfrom two independent filters. - Parameters:
-
filterLeft: left-channel filter.. -
filterRight: right-channel filter..
-
- constructs
-
public float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public void Reset()- Resetsfilter.
-
public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
The following example uses StereoFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Base;
public class StereoFilterExample
{
public static void Main()
{
// example filters
IOnlineFilter filterLeft = new LowPassFilter(0.5f);
IOnlineFilter filterRight = new HighPassFilter(0.2f);
// Create StereoFilter instance
StereoFilter stereoFilter = new StereoFilter(filterLeft, filterRight);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = stereoFilter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Reset filter
stereoFilter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Base.TransferFunction is used for representing an LTI filter transfer function.
-
public float[] Numerator { get; protected set; }- Gets transfer function numerator.
-
public float[] Denominator { get; protected set; }- Gets transfer function denominator.
-
public int CalculateZpIterations { get; set; } = VMath.PolyRootsIterations- Gets or sets max iterations for zero/pole computation. Default 25000.
-
public ComplexFp32[] Zeros => _zeros ?? TfToZp(Numerator, CalculateZpIterations)- Gets zeros ('z' in zpk notation).
-
public ComplexFp32[] Poles => _poles ?? TfToZp(Denominator, CalculateZpIterations)- Gets poles ('p' in zpk notation).
-
public float Gain => Numerator[0]- Gets gain ('k' in zpk notation).
-
public StateSpace StateSpace { get; }- Gets state-space representation.
-
public float[] Zi { get; }- Gets initial state corresponding to step-response steady state.
-
public TransferFunction(float[] numerator, float[] denominator = null)- constructs
TransferFunctionfrom numerator and denominator. - Parameters:
-
numerator: transfer function numerator.. -
denominator: transfer function denominator; default[1.0f]..
-
- constructs
-
public TransferFunction(ComplexFp32[] zeros, ComplexFp32[] poles, float gain = 1)- constructs
TransferFunctionfrom zeros, poles, and gain. - Parameters:
-
zeros: zeros. -
poles: poles. -
gain: gain, default 1.
-
- constructs
-
public TransferFunction(ComplexDiscreteSignalFp32 zeros, ComplexDiscreteSignalFp32 poles, float gain = 1)- constructs
TransferFunctionfrom zeros, poles, and gain. - Parameters:
-
zeros: zeros. -
poles: poles. -
gain: gain, default 1.
-
- constructs
-
public TransferFunction(StateSpace stateSpace)- constructs
TransferFunctionfrom state-space representation. - Parameters:
-
stateSpace: state-space representation..
-
- constructs
-
public float[] ImpulseResponse(int length = 512)- computes impulse response of given length.
- Parameters:
-
length: impulse response length..
-
- Returns: impulse response array.
-
public ComplexDiscreteSignalFp32 FrequencyResponse(int length = 512)- computes frequency response of given length.
- Parameters:
-
length: frequency response length..
-
- Returns:
ComplexDiscreteSignalFp32of frequency response.
-
public float[] GroupDelay(int length = 512)- computes group delay of given length.
- Parameters:
-
length: group delay array length..
-
- Returns: group delay array.
-
public float[] PhaseDelay(int length = 512)- computes phase delay of given length.
- Parameters:
-
length: phase delay array length..
-
- Returns: phase delay array.
-
public void NormalizeAt(float freq)- normalizes frequency response at given frequency (maps to [0, 1]).
- Parameters:
-
freq: frequency.
-
-
public void Normalize()- normalizes numerator and denominator (divide by first denominator coefficient).
-
public static TransferFunction operator *(TransferFunction tf1, TransferFunction tf2)- creates series connection of two transfer functions.
- Parameters:
-
tf1: first transfer function.. -
tf2: second transfer function..
-
- Returns: series-connected transfer function.
-
public static TransferFunction operator +(TransferFunction tf1, TransferFunction tf2)- creates parallel connection of two transfer functions.
- Parameters:
-
tf1: first transfer function.. -
tf2: second transfer function..
-
- Returns: parallel-connected transfer function.
-
public static TransferFunction FromCsv(Stream stream, char delimiter = ',')- loads transfer function numerator/denominator from CSV stream.
- Parameters:
-
stream: Input stream. -
delimiter: delimiter; default,..
-
- Returns:
TransferFunctioninstance.
-
public void ToCsv(Stream stream, char delimiter = ',')- serializes transfer function numerator/denominator to CSV stream.
- Parameters:
-
stream: Output stream. -
delimiter: delimiter; default,..
-
The following example uses TransferFunction with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Base;
public class TransferFunctionExample
{
public static void Main()
{
// Define transfer function numerator and denominator
float[] numerator = { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f };
float[] denominator = { 1.0f, -0.5f, 0.25f, -0.125f, 0.0625f };
// Create TransferFunction instance
TransferFunction tf = new TransferFunction(numerator, denominator);
// Compute impulse response
float[] impulseResponse = tf.ImpulseResponse();
Console.WriteLine("Impulse Response:");
foreach (var value in impulseResponse)
{
Console.WriteLine(value);
}
// Compute frequency response
var frequencyResponse = tf.FrequencyResponse();
Console.WriteLine("Frequency Response:");
foreach (var value in frequencyResponse.Real)
{
Console.WriteLine(value);
}
// Computesgroup delay
float[] groupDelay = tf.GroupDelay();
Console.WriteLine("Group Delay:");
foreach (var value in groupDelay)
{
Console.WriteLine(value);
}
// Compute phasedelay
float[] phaseDelay = tf.PhaseDelay();
Console.WriteLine("Phase Delay:");
foreach (var value in phaseDelay)
{
Console.WriteLine(value);
}
// normalizedtransfer function
tf.Normalize();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Base.ZiFilter is a state-vector-based LTI filter implementation. It allows setting initial state (filter delay initial conditions) and provides additional zero-phase filtering methods.
-
public float[] Zi => _zi- Gets state vector.
-
public override TransferFunction Tf { get; protected set; }- Gets or sets filter transfer function.
-
public ZiFilter(IEnumerable<float> b, IEnumerable<float> a)- Constructs
ZiFilterfrom numerator and denominator. - Parameters:
-
b: transfer function numerator.. -
a: transfer function denominator..
-
- Constructs
-
public ZiFilter(IEnumerable<double> b, IEnumerable<double> a)- Constructs
ZiFilterfrom 64-bit numerator and denominator. - Parameters:
-
b: transfer function numerator.. -
a: transfer function denominator..
-
- Constructs
-
public ZiFilter(TransferFunction tf)- Constructs
ZiFilterfrom transfer function. - Parameters:
-
tf: transfer function.
-
- Constructs
-
public virtual void Init(float[] zi)- Uses initial conditionsInitializesfilter.
- Parameters:
-
zi: initial condition vector..
-
-
public virtual void Init(double[] zi)- Uses initial conditionsInitializesfilter.
- Parameters:
-
zi: initial condition vector..
-
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public DiscreteSignal ZeroPhase(DiscreteSignal signal, int padLength = 0)- performs zero-phase filtering.
- Parameters:
-
signal: input signal. -
padLength: number of elements to pad at both ends before filtering.default 3 * (max{len(numerator), len(denominator)} - 1)..
-
- Returns: processed
DiscreteSignal.
-
public void ChangeNumeratorCoeffs(float[] b)- Changes filter numerator coefficients.
- Parameters:
-
b: new numerator coefficients..
-
-
public void ChangeDenominatorCoeffs(float[] a)- Changes filter denominator coefficients.
- Parameters:
-
a: new denominator coefficients..
-
-
public void Change(TransferFunction tf)- Changes filter transfer function.
- Parameters:
-
tf: new transfer function..
-
-
public override void Reset()- Resetsfilter.
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
The following example uses ZiFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Base;
public class ZiFilterExample
{
public static void Main()
{
// Define filter numerator and denominator coefficients
float[] b = { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f };
float[] a = { 1.0f, -0.5f, 0.25f, -0.125f, 0.0625f };
// Create ZiFilter instance
ZiFilter filter = new ZiFilter(b, a);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Perform zero-phase filtering
var signal = new DiscreteSignal(44100, inputSignal);
var zeroPhaseSignal = filter.ZeroPhase(signal);
Console.WriteLine("Zero Phase Filtered Signal:");
foreach (var sample in zeroPhaseSignal.Samples)
{
Console.WriteLine(sample);
}
// Reset filter
filter.Reset();
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Bassel
Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.BandPassFilter implements a band-pass Bessel filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public int Order => (_a.Length - 1) / 2- Getsfilterorder.
-
public BandPassFilter(float frequencyLow, float frequencyHigh, int order)- Constructs with given order and cutoff frequency BandPassFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: generated
TransferFunction.
-
public void Change(float frequencyLow, float frequencyHigh)- changes filter coefficients (preserves filter state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]..
-
The following example uses BandPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Bessel;
public class BandPassFilterExample
{
public static void Main()
{
// Define low/high cutoff frequencies and filter order
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
// Create BandPassFilter instance
BandPassFilter filter = new BandPassFilter(frequencyLow, frequencyHigh, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency
filter.Change(0.2f, 0.4f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.BandStopFilter implements a band-stop Bessel filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public int Order => (_a.Length - 1) / 2- Getsfilterorder.
-
public BandStopFilter(float frequencyLow, float frequencyHigh, int order)- Constructs with given order and cutoff frequency BandStopFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: generated
TransferFunction.
-
public void Change(float frequencyLow, float frequencyHigh)- changes filter coefficients (preserves filter state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]..
-
The following example uses BandStopFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Bessel;
public class BandStopFilterExample
{
public static void Main()
{
// Define low/high cutoff frequencies and filter order
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
// Create BandStopFilter instance
BandStopFilter filter = new BandStopFilter(frequencyLow, frequencyHigh, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency
filter.Change(0.2f, 0.4f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.HighPassFilter implements a high-pass Bessel filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public int Order => _a.Length - 1- Getsfilterorder.
-
public HighPassFilter(float frequency, int order)- Constructs with given order and cutoff frequency HighPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequency, int order)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: generated
TransferFunction.
-
public void Change(float frequency)- changes filter coefficients (preserves filter state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]..
-
The following example uses HighPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Bessel;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency and filter order
float frequency = 0.2f;
int order = 4;
// Create HighPassFilter instance
HighPassFilter filter = new HighPassFilter(frequency, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency
filter.Change(0.3f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.LowPassFilter implements a low-pass Bessel filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public int Order => _a.Length - 1- Getsfilterorder.
-
public LowPassFilter(float frequency, int order)- Constructs with given order and cutoff frequency LowPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequency, int order)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: generated
TransferFunction.
-
public void Change(float frequency)- changes filter coefficients (preserves filter state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]..
-
The following example uses LowPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Bessel;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency and filter order
float frequency = 0.2f;
int order = 4;
// Create LowPassFilter instance
LowPassFilter filter = new LowPassFilter(frequency, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency
filter.Change(0.3f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Bessel.PrototypeBessel generates Besselfilterprototype static class.
-
public static float Reverse(int k, int n)- Gets k-th coefficient of n-th order Bessel polynomial.
- Parameters:
-
k: coefficient index.. -
n: Bessel polynomial order..
-
- Returns: k-th coefficient.
-
public static ComplexFp32[] Poles(int order)- computes analog poles of Bessel filter of given order.
- Parameters:
-
order: filterorder.
-
- Returns: pole array.
The following example uses PrototypeBessel with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Bessel;
public class PrototypeBesselExample
{
public static void Main()
{
// Define Bessel polynomial order
int order = 4;
// Get Bessel polynomial coefficients
for (int k = 0; k <= order; k++)
{
float coefficient = PrototypeBessel.Reverse(k, order);
Console.WriteLine($"Coefficient k={k}, n={order}: {coefficient}");
}
// Compute Bessel filter poles
var poles = PrototypeBessel.Poles(order);
Console.WriteLine("Poles:");
foreach (var pole in poles)
{
Console.WriteLine(pole);
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad
Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.AllPassFilter implements a biquad all-pass filter.
-
public float Frequency { get; protected set; }- Getscenter frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public AllPassFilter(float frequency, float q = 1)- Constructs AllPassFilter instance.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1..
-
-
private void SetCoefficients(float frequency, float q)- sets filter coefficients.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor..
-
-
public void Change(float frequency, float q = 1)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1..
-
The following example uses AllPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class AllPassFilterExample
{
public static void Main()
{
// Define center frequency and Q factor
float frequency = 0.2f;
float q = 1.0f;
// Create AllPassFilter instance
AllPassFilter filter = new AllPassFilter(frequency, q);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter center frequency and Q factor
filter.Change(0.3f, 0.8f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.BandPassFilter implements a biquad band-pass filter.
-
public float Frequency { get; protected set; }- Getscenter frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public BandPassFilter(float frequency, float q = 1)- Constructs BandPassFilter instance.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1..
-
-
private void SetCoefficients(float frequency, float q)- sets filter coefficients.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor..
-
-
public void Change(float frequency, float q = 1)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1..
-
The following example uses BandPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class BandPassFilterExample
{
public static void Main()
{
// Define center frequency and Q factor
float frequency = 0.2f;
float q = 1.0f;
// Create BandPassFilter instance
BandPassFilter filter = new BandPassFilter(frequency, q);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter center frequency and Q factor
filter.Change(0.3f, 0.8f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.BiQuadFilter implements a biquad IIR filter.
No public properties.
-
protected BiQuadFilter()- Constructs default
BiQuadFilterwith default coefficients.
- Constructs default
-
public BiQuadFilter(float b0, float b1, float b2, float a0, float a1, float a2)- Constructs
BiQuadFilterfrom coefficients (numerator {B0, B1, B2}, denominator {A0, A1, A2}). - Parameters:
-
b0: B0 coefficient. -
b1: B1 coefficient. -
b2: B2 coefficient. -
a0: A0 coefficient. -
a1: A1 coefficient. -
a2: A2 coefficient.
-
- Constructs
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override void Reset()- Resetsfilter.
-
public void Change(float b0, float b1, float b2, float a0, float a1, float a2)- changes filter coefficients online (preserves state).
- Parameters:
-
b0: B0 coefficient. -
b1: B1 coefficient. -
b2: B2 coefficient. -
a0: A0 coefficient. -
a1: A1 coefficient. -
a2: A2 coefficient.
-
The following example uses BiQuadFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class BiQuadFilterExample
{
public static void Main()
{
// Define filter numerator and denominator coefficients
float b0 = 0.2f;
float b1 = 0.2f;
float b2 = 0.2f;
float a0 = 1.0f;
float a1 = -0.5f;
float a2 = 0.25f;
// Create BiQuadFilter instance
BiQuadFilter filter = new BiQuadFilter(b0, b1, b2, a0, a1, a2);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter coefficients
filter.Change(0.3f, 0.3f, 0.3f, 1.0f, -0.4f, 0.2f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
// Reset filter
filter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.HighPassFilter implements a biquad high-pass filter.
-
public float Frequency { get; protected set; }- Getscutoff frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public HighPassFilter(float frequency, float q = 1)- Constructs HighPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
q: Q factor; default 1..
-
-
private void SetCoefficients(float frequency, float q)- sets filter coefficients.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
q: Q factor..
-
-
public void Change(float frequency, float q = 1)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
q: Q factor; default 1..
-
The following example uses HighPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency and Q factor
float frequency = 0.2f;
float q = 1.0f;
// Create HighPassFilter instance
HighPassFilter filter = new HighPassFilter(frequency, q);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency and Q factor
filter.Change(0.3f, 0.8f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.HighShelfFilter implements a biquad high-shelf filter.
-
public float Frequency { get; protected set; }- Gets shelf frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public float Gain { get; protected set; }- Gets gain (dB).
-
public HighShelfFilter(float frequency, float q = 1, float gain = 1.0f)- Constructs HighShelfFilter instance.
- Parameters:
-
frequency: normalized shelf frequency, range [0..0.5].. -
q: Q factor; default 1.. -
gain: gain (dB); default 1.0f..
-
-
private void SetCoefficients(float frequency, float q, float gain)- sets filter coefficients.
- Parameters:
-
frequency: normalized shelf frequency, range [0..0.5].. -
q: Q factor.. -
gain: gain (dB)..
-
-
public void Change(float frequency, float q = 1, float gain = 1.0f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized shelf frequency, range [0..0.5].. -
q: Q factor; default 1.. -
gain: gain (dB); default 1.0f..
-
The following example uses HighShelfFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class HighShelfFilterExample
{
public static void Main()
{
// Define shelf frequency, Q factor, and gain
float frequency = 0.2f;
float q = 1.0f;
float gain = 3.0f;
// Create HighShelfFilter instance
HighShelfFilter filter = new HighShelfFilter(frequency, q, gain);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter shelf frequency, Q factor, and gain
filter.Change(0.3f, 0.8f, 6.0f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.LowPassFilter implements a biquad low-pass filter.
-
public float Frequency { get; protected set; }- Getscutoff frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public LowPassFilter(float frequency, float q = 1)- Constructs LowPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
q: Q factor; default 1..
-
-
private void SetCoefficients(float frequency, float q)- sets filter coefficients.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
q: Q factor..
-
-
public void Change(float frequency, float q = 1)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
q: Q factor; default 1..
-
The following example uses LowPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency and Q factor
float frequency = 0.2f;
float q = 1.0f;
// Create LowPassFilter instance
LowPassFilter filter = new LowPassFilter(frequency, q);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency and Q factor
filter.Change(0.3f, 0.8f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.LowShelfFilter implements a biquad low-shelf filter.
-
public float Frequency { get; protected set; }- Gets shelf frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public float Gain { get; protected set; }- Gets gain (dB).
-
public LowShelfFilter(float frequency, float q = 1, float gain = 1.0f)- Constructs LowShelfFilter instance.
- Parameters:
-
frequency: normalized shelf frequency, range [0..0.5].. -
q: Q factor; default 1.. -
gain: gain (dB); default 1.0f..
-
-
private void SetCoefficients(float frequency, float q, float gain)- sets filter coefficients.
- Parameters:
-
frequency: normalized shelf frequency, range [0..0.5].. -
q: Q factor.. -
gain: gain (dB)..
-
-
public void Change(float frequency, float q = 1, float gain = 1.0f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized shelf frequency, range [0..0.5].. -
q: Q factor; default 1.. -
gain: gain (dB); default 1.0f..
-
The following example uses LowShelfFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class LowShelfFilterExample
{
public static void Main()
{
// Define shelf frequency, Q factor, and gain
float frequency = 0.2f;
float q = 1.0f;
float gain = 3.0f;
// Create LowShelfFilter instance
LowShelfFilter filter = new LowShelfFilter(frequency, q, gain);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter shelf frequency, Q factor, and gain
filter.Change(0.3f, 0.8f, 6.0f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.NotchFilter implements a biquad notch filter.
-
public float Frequency { get; protected set; }- Getscenter frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public NotchFilter(float frequency, float q = 1)- Constructs NotchFilter instance.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1..
-
-
private void SetCoefficients(float frequency, float q)- sets filter coefficients.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor..
-
-
public void Change(float frequency, float q = 1)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1..
-
The following example uses NotchFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class NotchFilterExample
{
public static void Main()
{
// Define center frequency and Q factor
float frequency = 0.2f;
float q = 1.0f;
// Create NotchFilter instance
NotchFilter filter = new NotchFilter(frequency, q);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter center frequency and Q factor
filter.Change(0.3f, 0.8f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad.PeakFilter implements a biquad peak EQ filter.
-
public float Frequency { get; protected set; }- Getscenter frequency.
-
public float Q { get; protected set; }- Gets Q factor.
-
public float Gain { get; protected set; }- Gets gain (dB).
-
public PeakFilter(float frequency, float q = 1, float gain = 1.0f)- Constructs PeakFilter instance.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1.. -
gain: gain (dB); default 1.0f..
-
-
private void SetCoefficients(float frequency, float q, float gain)- sets filter coefficients.
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor.. -
gain: gain (dB)..
-
-
public void Change(float frequency, float q = 1, float gain = 1.0f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized center frequency, range [0..0.5].. -
q: Q factor; default 1.. -
gain: gain (dB); default 1.0f..
-
The following example uses PeakFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.BiQuad;
public class PeakFilterExample
{
public static void Main()
{
// Define center frequency, Q factor, and gain
float frequency = 0.2f;
float q = 1.0f;
float gain = 3.0f;
// Create PeakFilter instance
PeakFilter filter = new PeakFilter(frequency, q, gain);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter center frequency, Q factor, and gain
filter.Change(0.3f, 0.8f, 6.0f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth
Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.BandPassFilter implements a band-pass Butterworth filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public int Order { get; }- Getsfilterorder.
-
public BandPassFilter(float frequencyLow, float frequencyHigh, int order)- Constructs BandPassFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]..
-
The following example uses BandPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth;
public class BandPassFilterExample
{
public static void Main()
{
// Define low/high cutoff frequencies and filter order
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
// Create BandPassFilter instance
BandPassFilter filter = new BandPassFilter(frequencyLow, frequencyHigh, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low and high cutoff frequencies
filter.Change(0.2f, 0.4f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.BandStopFilter implements a band-stop Butterworth filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public int Order { get; }- Getsfilterorder.
-
public BandStopFilter(float frequencyLow, float frequencyHigh, int order)- Constructs BandStopFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]..
-
The following example uses BandStopFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth;
public class BandStopFilterExample
{
public static void Main()
{
// Define low/high cutoff frequencies and filter order
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
// Create BandStopFilter instance
BandStopFilter filter = new BandStopFilter(frequencyLow, frequencyHigh, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low and high cutoff frequencies
filter.Change(0.2f, 0.4f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.HighPassFilter implements a high-pass Butterworth filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public int Order { get; }- Getsfilterorder.
-
public HighPassFilter(float frequency, int order)- Constructs HighPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequency, int order)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: transfer function.
-
public void Change(float frequency)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]..
-
The following example uses HighPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency and filter order
float frequency = 0.2f;
int order = 4;
// Create HighPassFilter instance
HighPassFilter filter = new HighPassFilter(frequency, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency
filter.Change(0.3f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.LowPassFilter implements a low-pass Butterworth filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public int Order { get; }- Getsfilterorder.
-
public LowPassFilter(float frequency, int order)- Constructs LowPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
-
private static TransferFunction MakeTf(float frequency, int order)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder.
-
- Returns: transfer function.
-
public void Change(float frequency)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]..
-
The following example uses LowPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency and filter order
float frequency = 0.2f;
int order = 4;
// Create LowPassFilter instance
LowPassFilter filter = new LowPassFilter(frequency, order);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency
filter.Change(0.3f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth.PrototypeButterworth generates Butterworthfilterprototype static class.
-
public static ComplexFp32[] Poles(int order)- computes analog poles of Butterworth filter of given order.
- Parameters:
-
order: filterorder.
-
- Returns:
ComplexFp32array of Butterworth filter poles.
The following example uses PrototypeButterworth.Poles with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Butterworth;
public class PrototypeButterworthExample
{
public static void Main()
{
// Define filterorder
int order = 4;
// Compute Butterworth filter poles
ComplexFp32[] poles = PrototypeButterworth.Poles(order);
// Print poles
foreach (var pole in poles)
{
Console.WriteLine($"Pole: {pole.Real} + {pole.Imaginary}i");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI
Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.BandPassFilter implements a band-pass Chebyshev type I filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public float Ripple { get; private set; }- Gets ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public BandPassFilter(float frequencyLow, float frequencyHigh, int order, float ripple = 0.1f)- Constructs BandPassFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order, float ripple = 0.1f)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh, float ripple = 0.1f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
ripple: ripple (dB); default 0.1f..
-
The following example uses BandPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI;
public class BandPassFilterExample
{
public static void Main()
{
// Define low/high cutoff, order, and ripple
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
float ripple = 0.1f;
// Create BandPassFilter instance
BandPassFilter filter = new BandPassFilter(frequencyLow, frequencyHigh, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low/high cutoff and ripple
filter.Change(0.2f, 0.4f, 0.2f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.BandStopFilter implements a band-stop Chebyshev type I filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public float Ripple { get; private set; }- Gets ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public BandStopFilter(float frequencyLow, float frequencyHigh, int order, float ripple = 0.1f)- Constructs BandStopFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order, float ripple = 0.1f)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh, float ripple = 0.1f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
ripple: ripple (dB); default 0.1f..
-
The following example uses BandStopFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI;
public class BandStopFilterExample
{
public static void Main()
{
// Define low/high cutoff, order, and ripple
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
float ripple = 0.1f;
// Create BandStopFilter instance
BandStopFilter filter = new BandStopFilter(frequencyLow, frequencyHigh, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low/high cutoff and ripple
filter.Change(0.2f, 0.4f, 0.2f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.HighPassFilter implements a high-pass Chebyshev type I filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public float Ripple { get; private set; }- Gets ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public HighPassFilter(float frequency, int order, float ripple = 0.1f)- Constructs HighPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
-
private static TransferFunction MakeTf(float frequency, int order, float ripple = 0.1f)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
- Returns: transfer function.
-
public void Change(float frequency, float ripple = 0.1f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
ripple: ripple (dB); default 0.1f..
-
The following example uses HighPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency, order, and ripple
float frequency = 0.2f;
int order = 4;
float ripple = 0.1f;
// Create HighPassFilter instance
HighPassFilter filter = new HighPassFilter(frequency, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency and ripple
filter.Change(0.3f, 0.2f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.LowPassFilter implements a low-pass Chebyshev type I filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public float Ripple { get; private set; }- Gets ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public LowPassFilter(float frequency, int order, float ripple = 0.1f)- Constructs LowPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
-
private static TransferFunction MakeTf(float frequency, int order, float ripple = 0.1f)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
- Returns: transfer function.
-
public void Change(float frequency, float ripple = 0.1f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
ripple: ripple (dB); default 0.1f..
-
The following example uses LowPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency, order, and ripple
float frequency = 0.2f;
int order = 4;
float ripple = 0.1f;
// Create LowPassFilter instance
LowPassFilter filter = new LowPassFilter(frequency, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency and ripple
filter.Change(0.3f, 0.2f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI.PrototypeChebyshevI is a static class that generates Chebyshev type I filter prototypes.
-
public static ComplexFp32[] Poles(int order, float ripple = 0.1f)- computes analog poles of Chebyshev type I filter of given order.
- Parameters:
-
order: filterorder. -
ripple: ripple (dB); default 0.1f..
-
- Returns:
ComplexFp32array of Chebyshev type I filter poles.
The following example uses PrototypeChebyshevI.Poles with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevI;
public class PrototypeChebyshevIExample
{
public static void Main()
{
// Define filter order and ripple
int order = 4;
float ripple = 0.1f;
// Compute Chebyshev type I filter poles
ComplexFp32[] poles = PrototypeChebyshevI.Poles(order, ripple);
// Print poles
foreach (var pole in poles)
{
Console.WriteLine($"Pole: {pole.Real} + {pole.Imaginary}i");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII
Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.BandPassFilter implements a band-pass Chebyshev type II filter. ripple is the stopband attenuation in dB (MATLAB cheby2 Rs; default 20, must be positive); frequencyLow / frequencyHigh are the stopband edges.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public float Ripple { get; private set; }- Gets the stopband attenuation (dB).
-
public int Order { get; }- Getsfilterorder.
-
public BandPassFilter(float frequencyLow, float frequencyHigh, int order, float ripple = 20f)- Constructs BandPassFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5]. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB), must be positive; default 20f.
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order, float ripple = 20f)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5]. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB); default 20f.
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh, float ripple = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5]. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]. -
ripple: stopband attenuation (dB); default 20f.
-
The following example uses BandPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII;
public class BandPassFilterExample
{
public static void Main()
{
// Define low/high cutoff, order, and ripple (stopband attenuation in dB)
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
float ripple = 40f;
// Create BandPassFilter instance
BandPassFilter filter = new BandPassFilter(frequencyLow, frequencyHigh, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low/high cutoff and ripple
filter.Change(0.2f, 0.4f, 30f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.BandStopFilter implements a band-stop Chebyshev type II filter. ripple is the stopband attenuation in dB (MATLAB cheby2 Rs; default 20, must be positive).
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public float Ripple { get; private set; }- Gets the stopband attenuation (dB).
-
public int Order { get; }- Getsfilterorder.
-
public BandStopFilter(float frequencyLow, float frequencyHigh, int order, float ripple = 20f)- Constructs BandStopFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5]. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB), must be positive; default 20f.
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order, float ripple = 20f)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5]. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB); default 20f.
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh, float ripple = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5]. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5]. -
ripple: stopband attenuation (dB); default 20f.
-
The following example uses BandStopFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII;
public class BandStopFilterExample
{
public static void Main()
{
// Define low/high cutoff, order, and ripple (stopband attenuation in dB)
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
float ripple = 40f;
// Create BandStopFilter instance
BandStopFilter filter = new BandStopFilter(frequencyLow, frequencyHigh, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low/high cutoff and ripple
filter.Change(0.2f, 0.4f, 30f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.HighPassFilter implements a high-pass Chebyshev type II filter. ripple is the stopband attenuation in dB (MATLAB cheby2 Rs; default 20, must be positive); frequency is the stopband edge.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public float Ripple { get; private set; }- Gets the stopband attenuation (dB).
-
public int Order { get; }- Getsfilterorder.
-
public HighPassFilter(float frequency, int order, float ripple = 20f)- Constructs HighPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB), must be positive; default 20f.
-
-
private static TransferFunction MakeTf(float frequency, int order, float ripple = 20f)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB); default 20f.
-
- Returns: transfer function.
-
public void Change(float frequency, float ripple = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]. -
ripple: stopband attenuation (dB); default 20f.
-
The following example uses HighPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency, order, and ripple (stopband attenuation in dB)
float frequency = 0.2f;
int order = 4;
float ripple = 40f;
// Create HighPassFilter instance
HighPassFilter filter = new HighPassFilter(frequency, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency and ripple
filter.Change(0.3f, 30f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.LowPassFilter implements a low-pass Chebyshev type II filter. ripple is the stopband attenuation in dB (MATLAB cheby2 Rs; default 20, must be positive); frequency is the stopband edge, where the response is exactly -ripple dB (DC gain is 1).
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public float Ripple { get; private set; }- Gets the stopband attenuation (dB).
-
public int Order { get; }- Getsfilterorder.
-
public LowPassFilter(float frequency, int order, float ripple = 20f)- Constructs LowPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB), must be positive; default 20f.
-
-
private static TransferFunction MakeTf(float frequency, int order, float ripple = 20f)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]. -
order: filterorder. -
ripple: stopband attenuation (dB); default 20f.
-
- Returns: transfer function.
-
public void Change(float frequency, float ripple = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5]. -
ripple: stopband attenuation (dB); default 20f.
-
The following example uses LowPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency, order, and ripple (stopband attenuation in dB)
float frequency = 0.2f;
int order = 4;
float ripple = 40f;
// Create LowPassFilter instance
LowPassFilter filter = new LowPassFilter(frequency, order, ripple);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff frequency and ripple
filter.Change(0.3f, 30f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII.PrototypeChebyshevII is a static class that generates Chebyshev type II filter prototypes (MATLAB / SciPy cheb2ap convention: stopband edge at 1 rad/s).
-
public static ComplexFp32[] Poles(int order, float ripple = 20f)- computes analog poles of Chebyshev type II filter of given order.
- Parameters:
-
order: filterorder. -
ripple: stopband attenuation (dB), must be positive (ArgumentOutOfRangeExceptionotherwise); default 20f.
-
- Returns:
ComplexFp32array of Chebyshev type II filter poles.
-
public static ComplexFp32[] Zeros(int order)- computes analog zeros of Chebyshev type II filter of given order.
- Parameters:
-
order: filterorder.
-
- Returns:
ComplexFp32array of Chebyshev type II filter zeros.
The following example uses PrototypeChebyshevII.Poles and Zeros with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.ChebyshevII;
public class PrototypeChebyshevIIExample
{
public static void Main()
{
// Define filter order and ripple (stopband attenuation in dB)
int order = 4;
float ripple = 40f;
// Compute Chebyshev type II filter poles
ComplexFp32[] poles = PrototypeChebyshevII.Poles(order, ripple);
// Print poles
foreach (var pole in poles)
{
Console.WriteLine($"Pole: {pole.Real} + {pole.Imaginary}i");
}
// Compute Chebyshev type II filter zeros
ComplexFp32[] zeros = PrototypeChebyshevII.Zeros(order);
// Print zeros
foreach (var zero in zeros)
{
Console.WriteLine($"Zero: {zero.Real} + {zero.Imaginary}i");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic
Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.BandPassFilter implements a band-pass elliptic filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public float RipplePassband { get; private set; }- Gets passband ripple (dB).
-
public float RippleStopband { get; private set; }- Gets stopband ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public BandPassFilter(float frequencyLow, float frequencyHigh, int order, float ripplePass = 1f, float rippleStop = 20f)- Constructs BandPassFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order, float ripplePass = 1, float rippleStop = 20)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh, float ripplePass = 1, float rippleStop = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
The following example uses BandPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic;
public class BandPassFilterExample
{
public static void Main()
{
// Define low/high cutoff, order, passband and stopband ripple
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
float ripplePass = 1f;
float rippleStop = 20f;
// Create BandPassFilter instance
BandPassFilter filter = new BandPassFilter(frequencyLow, frequencyHigh, order, ripplePass, rippleStop);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low/high cutoff, passband and stopband ripple
filter.Change(0.2f, 0.4f, 0.5f, 25f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.BandStopFilter implements a band-stop elliptic filter.
-
public float FrequencyLow { get; private set; }- Gets low cutoff frequency.
-
public float FrequencyHigh { get; private set; }- Gets high cutoff frequency.
-
public float RipplePassband { get; private set; }- Gets passband ripple (dB).
-
public float RippleStopband { get; private set; }- Gets stopband ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public BandStopFilter(float frequencyLow, float frequencyHigh, int order, float ripplePass = 1f, float rippleStop = 20f)- Constructs BandStopFilter instance.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
-
private static TransferFunction MakeTf(float frequencyLow, float frequencyHigh, int order, float ripplePass = 1f, float rippleStop = 20f)- Generates transfer function.
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
- Returns: transfer function.
-
public void Change(float frequencyLow, float frequencyHigh, float ripplePass = 1f, float rippleStop = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
The following example uses BandStopFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic;
public class BandStopFilterExample
{
public static void Main()
{
// Define low/high cutoff, order, passband and stopband ripple
float frequencyLow = 0.1f;
float frequencyHigh = 0.3f;
int order = 4;
float ripplePass = 1f;
float rippleStop = 20f;
// Create BandStopFilter instance
BandStopFilter filter = new BandStopFilter(frequencyLow, frequencyHigh, order, ripplePass, rippleStop);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter low/high cutoff, passband and stopband ripple
filter.Change(0.2f, 0.4f, 0.5f, 25f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.HighPassFilter implements a high-pass elliptic filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public float RipplePassband { get; private set; }- Gets passband ripple (dB).
-
public float RippleStopband { get; private set; }- Gets stopband ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public HighPassFilter(float frequency, int order, float ripplePass = 1f, float rippleStop = 20f)- Constructs HighPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
-
private static TransferFunction MakeTf(float frequency, int order, float ripplePass = 1f, float rippleStop = 20f)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
- Returns: transfer function.
-
public void Change(float frequency, float ripplePass = 1f, float rippleStop = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
The following example uses HighPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency, order, passband and stopband ripple
float frequency = 0.2f;
int order = 4;
float ripplePass = 1f;
float rippleStop = 20f;
// Create HighPassFilter instance
HighPassFilter filter = new HighPassFilter(frequency, order, ripplePass, rippleStop);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff, passband and stopband ripple
filter.Change(0.3f, 0.5f, 25f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.LowPassFilter implements a low-pass elliptic filter.
-
public float Frequency { get; private set; }- Getscutoff frequency.
-
public float RipplePassband { get; private set; }- Gets passband ripple (dB).
-
public float RippleStopband { get; private set; }- Gets stopband ripple (dB).
-
public int Order { get; }- Getsfilterorder.
-
public LowPassFilter(float frequency, int order, float ripplePass = 1, float rippleStop = 20f)- Constructs LowPassFilter instance.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
-
private static TransferFunction MakeTf(float frequency, int order, float ripplePass = 1, float rippleStop = 20f)- Generates transfer function.
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
- Returns: transfer function.
-
public void Change(float frequency, float ripplePass = 1, float rippleStop = 20f)- changes filter coefficients online (preserves state).
- Parameters:
-
frequency: normalized cutoff frequency, range [0..0.5].. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
The following example uses LowPassFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency, order, passband and stopband ripple
float frequency = 0.2f;
int order = 4;
float ripplePass = 1f;
float rippleStop = 20f;
// Create LowPassFilter instance
LowPassFilter filter = new LowPassFilter(frequency, order, ripplePass, rippleStop);
// Define input signal
float[] inputSignal = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output: {output}");
}
// Change filter cutoff, passband and stopband ripple
filter.Change(0.3f, 0.5f, 25f);
// Process signal and print result
foreach (var sample in inputSignal)
{
float output = filter.Process(sample);
Console.WriteLine($"Input: {sample}, Output after change: {output}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic.PrototypeElliptic generates ellipticfilterprototype static class.
-
public static ComplexFp32[] Poles(int order, float ripplePass = 1f, float rippleStop = 20f)- Computes analog poles of elliptic filter of given order.
- Parameters:
-
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
- Returns:
ComplexFp32array of elliptic filter poles.
-
public static ComplexFp32[] Zeros(int order, float ripplePass = 1, float rippleStop = 20)- Computes analog zeros of elliptic filter of given order.
- Parameters:
-
order: filterorder. -
ripplePass: passbandripple (dB), default 1f.. -
rippleStop: stopbandripple (dB), default 20f..
-
- Returns:
ComplexFp32array of elliptic filter zeros.
-
public static float[] Landen(float k, int iterCount = 12)- Computes Landen sequence.
- Parameters:
-
k: parameters K. -
iterCount: Iteration count; default 12 (5 left up to ~1e-6 relative error for large Rs/Rp ratios or high orders).
-
- Returns: float array of Landen sequence.
-
public static ComplexFp32 Cde(ComplexFp32 x, float[] landen)- Computes Cde.
- Parameters:
-
x: parameters X. -
landen: Landen sequence.
-
- Returns:
ComplexFp32value of computation result.
-
public static ComplexFp32 Sne(ComplexFp32 x, float[] landen)- Computes Sne.
- Parameters:
-
x: parameters X. -
landen: Landen sequence.
-
- Returns:
ComplexFp32value of computation result.
-
public static ComplexFp32 Asne(ComplexFp32 x, float k, int iterCount = 12)- Computes inverse Sne.
- Parameters:
-
x: parameters X. -
k: parameters K. -
iterCount: Iteration count; default 12.
-
- Returns:
ComplexFp32value of computation result.
The following example uses PrototypeElliptic.Poles and Zeros with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Elliptic;
public class PrototypeEllipticExample
{
public static void Main()
{
// Define filter order, passband and stopband ripple
int order = 4;
float ripplePass = 1f;
float rippleStop = 20f;
// Compute elliptic filter poles
ComplexFp32[] poles = PrototypeElliptic.Poles(order, ripplePass, rippleStop);
// Print poles
foreach (var pole in poles)
{
Console.WriteLine($"Pole: {pole.Real} + {pole.Imaginary}i");
}
// Compute elliptic filter zeros
ComplexFp32[] zeros = PrototypeElliptic.Zeros(order, ripplePass, rippleStop);
// Print zeros
foreach (var zero in zeros)
{
Console.WriteLine($"Zero: {zero.Real} + {zero.Imaginary}i");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Fda
Vorcyc.Mathematics.SignalProcessing.Filters.Fda.DesignFilter is a static class for filter design and analysis.
-
public static float[] FirWinFdLp(int order, float frequency, float delay, WindowType window = WindowType.Blackman)- Designs ideal low-pass fractional-delay FIR filter using sinc-window method.
- Parameters:
-
order: filterorder. -
frequency: normalized cutoff frequency, range [0..0.5].. -
delay: Fractional delay. -
window: window, defaultWindowType.Blackman.
-
- Returns: filter coefficient array.
-
public static float[] FirWinFdHp(int order, float frequency, float delay, WindowType window = WindowType.Blackman)- Designs ideal high-pass fractional-delay FIR filter using sinc-window method.
- Parameters:
-
order: filterorder. -
frequency: normalized cutoff frequency, range [0..0.5].. -
delay: Fractional delay. -
window: window, defaultWindowType.Blackman.
-
- Returns: filter coefficient array.
-
public static float[] FirWinFdBp(int order, float frequencyLow, float frequencyHigh, float delay, WindowType window = WindowType.Blackman)- Designs ideal band-pass fractional-delay FIR filter using sinc-window method.
- Parameters:
-
order: filterorder. -
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
delay: Fractional delay. -
window: window, defaultWindowType.Blackman.
-
- Returns: filter coefficient array.
-
public static float[] FirWinFdBs(int order, float frequencyLow, float frequencyHigh, float delay, WindowType window = WindowType.Blackman)- Designs ideal band-stop fractional-delay FIR filter using sinc-window method.
- Parameters:
-
order: filterorder. -
frequencyLow: normalized low cutoff frequency, range [0..0.5].. -
frequencyHigh: normalized high cutoff frequency, range [0..0.5].. -
delay: Fractional delay. -
window: window, defaultWindowType.Blackman.
-
- Returns: filter coefficient array.
-
public static float[] FirWinFdAp(int order, float delay, WindowType window = WindowType.Blackman)- Designs ideal all-pass fractional-delay FIR filter using sinc-window method.
- Parameters:
-
order: filterorder. -
delay: Fractional delay. -
window: window, defaultWindowType.Blackman.
-
- Returns: filter coefficient array.
-
public static void NormalizeKernel(float[] kernel, float frequency = 0)- Normalizes frequency response at given frequency (maps kernel coefficients to [0, 1]).
- Parameters:
-
kernel: Kernel coefficient array. -
frequency: frequency, default 0.
-
The following example uses DesignFilter.FirWinFdLp with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Fda;
public class DesignFilterExample
{
public static void Main()
{
// Define filter order, cutoff frequency, and fractional delay
int order = 64;
float frequency = 0.25f;
float delay = 0.5f;
// Design low-pass fractional-delay FIR filter
float[] filterCoefficients = DesignFilter.FirWinFdLp(order, frequency, delay);
// Print filter coefficients
foreach (var coeff in filterCoefficients)
{
Console.WriteLine($"Coefficient: {coeff}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Fda.FilterBanks is a static class for filter-bank design.
-
public static float[][] Triangular(int fftSize, int samplingRate, (float, float, float)[] frequencies, VtlnWarper? vtln = null, Func<float, float>? mapper = null)- Generates triangular filter-bank weights from given frequencies.
- Parameters:
-
fftSize: Assumed FFT size. -
samplingRate: Assumed signal sample rate. -
frequencies: Array of frequency tuples per filter (left, center, right). -
vtln: VTLN frequency warper; default null. -
mapper: Frequency scale mapper (e.g. herz-to-mel) for weighting only; default null.
-
- Returns: filter-bank weight array.
-
public static float[][] Rectangular(int fftSize, int samplingRate, (float, float, float)[] frequencies, VtlnWarper? vtln = null, Func<float, float>? mapper = null)- Generates rectangular filter-bank weights from given frequencies.
- Parameters:
-
fftSize: Assumed FFT size. -
samplingRate: Assumed signal sample rate. -
frequencies: Array of frequency tuples per filter (left, center, right). -
vtln: VTLN frequency warper; default null. -
mapper: Frequency scale mapper (e.g. herz-to-mel); default null.
-
- Returns: filter-bank weight array.
-
public static float[][] Trapezoidal(int fftSize, int samplingRate, (float, float, float)[] frequencies, VtlnWarper? vtln = null, Func<float, float>? mapper = null)- Generates FIR band-pass (near-trapezoidal) filter bank from given frequencies.
- Parameters:
-
fftSize: Assumed FFT size. -
samplingRate: Assumed signal sample rate. -
frequencies: Array of frequency tuples per filter (left, center, right). -
vtln: VTLN frequency warper; default null. -
mapper: Frequency scale mapper (e.g. herz-to-mel); default null.
-
- Returns: filter-bank weight array.
-
public static float[][] BiQuad(int fftSize, int samplingRate, (float, float, float)[] frequencies)- Generates overlapping BiQuad band-pass filters from given frequencies.
- Parameters:
-
fftSize: Assumed FFT size. -
samplingRate: Assumed signal sample rate. -
frequencies: Array of frequency tuples per filter (left, center, right).
-
- Returns: filter-bank weight array.
-
public static (float, float, float)[] HerzBands(int combFilterCount, int samplingRate, float lowFreq = 0, float highFreq = 0f, bool overlap = false)- Returns frequency tuples for uniformly spaced bands on the Herz scale.
- Parameters:
-
combFilterCount: Number of filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
overlap: Whether bands should overlap; default false.
-
- Returns: array of frequency tuples.
-
public static (float, float, float)[] MelBands(int melFilterCount, int samplingRate, float lowFreq = 0f, float highFreq = 0f, bool overlap = true)- Returns frequency tuples for uniformly spaced bands on the Mel scale.
- Parameters:
-
melFilterCount: Number of Mel filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
overlap: Whether bands should overlap; default true.
-
- Returns: array of frequency tuples.
-
public static (float, float, float)[] MelBandsSlaney(int melFilterCount, int samplingRate, float lowFreq = 0, float highFreq = 0, bool overlap = true)- Returns Mel-scale band frequency tuples (M. Slaney formula).
- Parameters:
-
melFilterCount: Number of Mel filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
overlap: Whether bands should overlap; default true.
-
- Returns: array of frequency tuples.
-
public static (float, float, float)[] BarkBands(int barkFilterCount, int samplingRate, float lowFreq = 0f, float highFreq = 0f, bool overlap = true)- Returns Bark-scale band frequency tuples (Traunmueller, 1990).
- Parameters:
-
barkFilterCount: Number of Bark filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
overlap: Whether bands should overlap; default true.
-
- Returns: array of frequency tuples.
-
public static (float, float, float)[] BarkBandsSlaney(int barkFilterCount, int samplingRate, float lowFreq = 0, float highFreq = 0f, bool overlap = true)- Returns Bark-scale band frequency tuples (Wang, 1992).
- Parameters:
-
barkFilterCount: Number of Bark filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
overlap: Whether bands should overlap; default true.
-
- Returns: array of frequency tuples.
-
public static (float, float, float)[] CriticalBands(int filterCount, int samplingRate, float lowFreq = 0f, float highFreq = 0f)- Returns critical-band frequency tuples.
- Parameters:
-
filterCount: Number of filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0.
-
- Returns: array of frequency tuples.
-
public static (float, float, float)[] OctaveBands(int octaveCount, int samplingRate, float lowFreq = 0f, float highFreq = 0f, bool overlap = false)- Returns octave-band frequency tuples.
- Parameters:
-
octaveCount: Number of octave filters. -
samplingRate: Assumed signal sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
overlap: Whether bands should overlap; default false.
-
- Returns: array of frequency tuples.
-
public static float[][] Chroma(int fftSize, int samplingRate, int chromaCount = 12, float tuning = 0, float centerOctave = 5.0f, float octaveWidth = 2, int norm = 2, bool baseC = true)- Generates chroma feature filter bank.
- Parameters:
-
fftSize: Assumed FFT size. -
samplingRate: Assumed sample rate. -
chromaCount: Number of chroma features; default 12. -
tuning: Detuning from A440 as fraction of chroma bin; default 0. -
centerOctave: Ignored if octaveWidth=0; otherwise Gaussian window center; default 5.0f. -
octaveWidth: Rectangular if 0; otherwise Gaussian window width; default 2. -
norm: Normalization: 0=none, 1=L1, 2=L2; default 2. -
baseC: If true, filter bank starts at 'C'; else at 'A'; default true.
-
- Returns: filter-bank weight array.
-
public static float[][] MelBankSlaney(int filterCount, int fftSize, int samplingRate, float lowFreq = 0f, float highFreq = 0f, bool normalizeGain = true, VtlnWarper? vtln = null)- Creates overlapping triangular Mel filters (as suggested by Malcolm Slaney).
- Parameters:
-
filterCount: Number of Mel filters. -
fftSize: Assumed FFT size. -
samplingRate: Assumed sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
normalizeGain: True to normalize gain; false for unit height 1.0; default true. -
vtln: VTLN frequency warper; default null.
-
- Returns: filter-bank weight array.
-
public static float[][] BarkBankSlaney(int filterCount, int fftSize, int samplingRate, float lowFreq = 0, float highFreq = 0, float width = 1)- Creates overlapping trapezoidal Bark filters (as suggested by Malcolm Slaney).
- Parameters:
-
filterCount: Number of Bark filters. -
fftSize: Assumed FFT size. -
samplingRate: Assumed sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
width: Constant band width; default 1.
-
- Returns: filter-bank weight array.
-
public static float[][] Erb(int erbFilterCount, int fftSize, int samplingRate, float lowFreq = 0, float highFreq = 0, bool normalizeGain = true)- Creates overlapping ERB filters.
- Parameters:
-
erbFilterCount: Number of ERB filters. -
fftSize: Assumed FFT size. -
samplingRate: Assumed sample rate. -
lowFreq: Lower frequency bound; default 0. -
highFreq: Upper frequency bound; default 0. -
normalizeGain: True to normalize gain; false for unit height 1.0; default true.
-
- Returns: filter-bank weight array.
-
public static void Normalize(int filterCount, (float, float, float)[] frequencies, float[][] filterBank)- Normalizes weights (roughly equal energy per band).
- Parameters:
-
filterCount: Number of filters. -
frequencies: Array of frequency tuples per filter (left, center, right). -
filterBank: Filter bank.
-
-
public static void Apply(float[][] filterbank, float[] spectrum, float[] filtered)- Applies filter bank to spectrum and fills filtered spectrum.
- Parameters:
-
filterbank: Filter bank. -
spectrum: Spectrum. -
filtered: Filtered signal spectrum.
-
-
public static float[][] Apply(float[][] filterbank, IList<float[]> spectrogram)- Applies filter bank to all spectra in given sequence.
- Parameters:
-
filterbank: Filter bank. -
spectrogram: Output spectra of filtered signal.
-
- Returns: array of filtered spectra.
-
public static void ApplyAndLog(float[][] filterbank, float[] spectrum, float[] filtered, float floor = float.Epsilon)- Applies filter bank to spectrum, then Ln() on result.
- Parameters:
-
filterbank: Filter bank. -
spectrum: Spectrum. -
filtered: Filtered signal spectrum. -
floor: Log threshold; default float.Epsilon.
-
-
public static void ApplyAndLog10(float[][] filterbank, float[] spectrum, float[] filtered, float floor = float.Epsilon)- Applies filter bank to spectrum, then Log10() on result.
- Parameters:
-
filterbank: Filter bank. -
spectrum: Spectrum. -
filtered: Filtered signal spectrum. -
floor: Log threshold; default float.Epsilon.
-
-
public static void ApplyAndToDecibel(float[][] filterbank, float[] spectrum, float[] filtered, float minLevel = 1e-10f)- Applies filter bank to spectrum, then 10*Log10() (for MFCC comparison with librosa).
- Parameters:
-
filterbank: Filter bank. -
spectrum: Spectrum. -
filtered: Filtered signal spectrum. -
minLevel: Log threshold; default 1e-10f.
-
-
public static void ApplyAndPow(float[][] filterbank, float[] spectrum, float[] filtered, float power = 1.0f / 3)- Applies filter bank to spectrum, then Pow(x, power); e.g. PLP uses power=1/3 (cube root).
- Parameters:
-
filterbank: Filter bank. -
spectrum: Spectrum. -
filtered: Filtered signal spectrum. -
power: Power; default 1.0f / 3.
-
The following example uses FilterBanks.Triangular with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Fda;
public class FilterBanksExample
{
public static void Main()
{
// Define FFT size, sample rate, and frequency tuples
int fftSize = 512;
int samplingRate = 16000;
(float, float, float)[] frequencies = { (100, 200, 300), (200, 300, 400), (300, 400, 500) };
// Generate triangular filter-bank weights
float[][] filterBank = FilterBanks.Triangular(fftSize, samplingRate, frequencies);
// Print filter-bank weights
for (int i = 0; i < filterBank.Length; i++)
{
Console.WriteLine($"Filter {i + 1}:");
foreach (var weight in filterBank[i])
{
Console.WriteLine(weight);
}
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Fda.Remez is an equiripple filter designer based on the Remez (Parks–McClellan) algorithm.
-
public int Order { get; private set; }- Getsfilterorder.
-
public int Iterations { get; private set; }- Gets actual iteration count.
-
public int K { get; private set; }- Gets number of extremal frequencies (K = Order/2 + 2).
-
public float[] InterpolatedResponse { get; private set; }- Gets interpolated frequency response.
-
public float[] Error { get; private set; }- Gets error array.
-
public float[] ExtremalFrequencies- Gets extremal frequency array.
-
public Remez(int order, float[] frequencies, float[] desired, float[] weights, int gridDensity = 16)- Constructs Remez filter designer.
- Parameters:
-
order: filterorder. -
frequencies: Normalized frequency array. -
desired: Desired response values at given frequencies. -
weights: Weight array at given frequencies. -
gridDensity: Grid density; default 16.
-
-
public float[] Design(int maxIterations = 100)- Designs optimal equiripple filter and returns kernel.
- Parameters:
-
maxIterations: Maximum iterations; default 100.
-
- Returns: filter coefficient array.
-
public static float DbToPassbandWeight(float ripple)- Converts ripple (dB) to passband weight.
- Parameters:
-
ripple: Ripple (dB).
-
- Returns: passband weight.
-
public static float DbToStopbandWeight(float ripple)- Converts ripple (dB) to stopband weight.
- Parameters:
-
ripple: Ripple (dB).
-
- Returns: stopband weight.
-
public static int EstimateOrder(float fp, float fa, float dp, float da)- Estimates low-pass filter order.
- Parameters:
-
fp: Passband edge frequency. -
fa: Stopband edge frequency. -
dp: Passband weight. -
da: Stopband weight.
-
- Returns: filterorder.
-
public static int EstimateOrder(float[] frequencies, float[] deltas)- Estimates filter order for custom bands.
- Parameters:
-
frequencies: Edge frequency array. -
deltas: Weight array.
-
- Returns: filterorder.
The following example uses Remez.Design with comments:
using System;
using System.Text.RegularExpressions;
using Vorcyc.Mathematics.SignalProcessing.Filters.Fda;
public class RemezExample
{
public static void Main()
{
// Define filter order, frequencies, desired response, and weights
int order = 57;
float[] frequencies = { 0, 0.15f, 0.17f, 0.5f };
float[] desired = { 1, 0 };
float[] weights = { 0.01f, 0.1f };
// Create Remez instance
var remez = new Remez(order, frequencies, desired, weights);
// Design filter and get coefficients
float[] kernel = remez.Design();
// Print filter coefficients
foreach (var coeff in kernel)
{
Console.WriteLine($"Coefficient: {coeff}");
}
// Print other properties
Console.WriteLine($"Iterations: {remez.Iterations}");
Console.WriteLine($"Extremal Frequencies: {string.Join(", ", remez.ExtremalFrequencies)}");
Console.WriteLine($"Interpolated Response: {string.Join(", ", remez.InterpolatedResponse)}");
Console.WriteLine($"Error: {string.Join(", ", remez.Error)}");
}
}Vorcyc.Mathematics.SignalProcessing.Filters.Fda.VtlnWarper implements vocal-tract length normalization (VTLN) similar to Kaldi.
-
private readonly float _lowFreq- Low frequency.
-
private readonly float _highFreq- High frequency.
-
private readonly float _lowVtln- VTLN low frequency.
-
private readonly float _highVtln- VTLN high frequency.
-
private readonly float _scale- Computed intermediate parameters.
-
private readonly float _scaleLeft- Computed intermediate parameters.
-
private readonly float _scaleRight- Computed intermediate parameters.
-
public VtlnWarper(float alpha, float lowFrequency, float highFrequency, float lowVtln, float highVtln)- Constructs VtlnWarper instance.
- Parameters:
-
alpha: Warp factor. -
lowFrequency: Low frequency. -
highFrequency: High frequency. -
lowVtln: VTLN low frequency. -
highVtln: VTLN high frequency.
-
-
public float Warp(float frequency)- Warps given frequency.
- Parameters:
-
frequency: Frequency to warp.
-
- Returns: warped frequency.
The following example uses VtlnWarper.Warp with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Fda;
public class VtlnWarperExample
{
public static void Main()
{
// Define warp factor and frequency range
float alpha = 1.2f;
float lowFrequency = 100f;
float highFrequency = 8000f;
float lowVtln = 200f;
float highVtln = 6000f;
// Create VtlnWarper instance
var vtlnWarper = new VtlnWarper(alpha, lowFrequency, highFrequency, lowVtln, highVtln);
// Warp frequency and print result
float[] frequencies = { 150f, 300f, 500f, 1000f, 4000f, 7000f };
foreach (var freq in frequencies)
{
float warpedFreq = vtlnWarper.Warp(freq);
Console.WriteLine($"Original Frequency: {freq}, Warped Frequency: {warpedFreq}");
}
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.OnePole
Vorcyc.Mathematics.SignalProcessing.Filters.OnePole.HighPassFilter implements a single-pole high-pass filter.
-
public float Frequency { get; protected set; }- Getscutoff frequency.
-
public HighPassFilter(float frequency)- Constructs HighPassFilter instance.
- Parameters:
-
frequency: cutoff frequency.
-
-
public void Change(float frequency)- changes filter coefficients (preserves filter state).
- Parameters:
-
frequency: cutoff frequency.
-
-
private void SetCoefficients(float frequency)- Sets filter coefficients for given cutoff frequency.
- Parameters:
-
frequency: cutoff frequency.
-
The following example uses HighPassFilter.Change with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.OnePole;
public class HighPassFilterExample
{
public static void Main()
{
// Define cutoff frequency
float frequency = 0.1f;
// Create HighPassFilter instance
var highPassFilter = new HighPassFilter(frequency);
// Change cutoff frequency
highPassFilter.Change(0.2f);
// Print current cutoff frequency
Console.WriteLine($"Current Cutoff Frequency: {highPassFilter.Frequency}");
}
}Vorcyc.Mathematics.SignalProcessing.Filters.OnePole.LowPassFilter implements a single-pole low-pass filter.
-
public float Frequency { get; protected set; }- Getscutoff frequency.
-
public LowPassFilter(float frequency)- Constructs LowPassFilter instance.
- Parameters:
-
frequency: cutoff frequency.
-
-
public void Change(float frequency)- changes filter coefficients (preserves filter state).
- Parameters:
-
frequency: cutoff frequency.
-
-
private void SetCoefficients(float frequency)- Sets filter coefficients for given cutoff frequency.
- Parameters:
-
frequency: cutoff frequency.
-
The following example uses LowPassFilter.Change with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.OnePole;
public class LowPassFilterExample
{
public static void Main()
{
// Define cutoff frequency
float frequency = 0.1f;
// Create LowPassFilter instance
var lowPassFilter = new LowPassFilter(frequency);
// Change cutoff frequency
lowPassFilter.Change(0.2f);
// Print current cutoff frequency
Console.WriteLine($"Current Cutoff Frequency: {lowPassFilter.Frequency}");
}
}Vorcyc.Mathematics.SignalProcessing.Filters.OnePole.OnePoleFilter is a single-pole IIR filter class.
-
protected OnePoleFilter()- Constructs
OnePoleFilterwith default coefficients.
- Constructs
-
public OnePoleFilter(float b, float a)- Constructs
OnePoleFilterwith specified coefficients. - Parameters:
-
b: Numerator coefficients. -
a: poles.
-
- Constructs
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override void Reset()- Resetsfilter.
The following example builds and processes samples with OnePoleFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.OnePole;
public class OnePoleFilterExample
{
public static void Main()
{
// Create OnePoleFilter instance
var filter = new OnePoleFilter(0.5f, 0.3f);
// Define input signal
float[] samples = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process sample
Console.WriteLine("Processed Samples:");
foreach (var sample in samples)
{
var processedSample = filter.Process(sample);
Console.WriteLine(processedSample);
}
// Reset filter
filter.Reset();
}
}All types below are in namespace: Vorcyc.Mathematics.SignalProcessing.Filters.Polyphase
Vorcyc.Mathematics.SignalProcessing.Filters.Polyphase.PolyphaseSystem is a polyphase filter system.
-
public FirFilter[] Filters { get; private set; }- Gets polyphase filter with transfer function E(z^k).
-
public FirFilter[] MultirateFilters { get; private set; }- Gets polyphase filter with transfer function E(z) for multirate processing.
-
public PolyphaseSystem(float[] kernel, int n, int type = 1)- Constructs
PolyphaseSystemwith specified kernel and polyphase count. - Parameters:
-
kernel: Filter kernel. -
n: Number of polyphase filters. -
type: Polyphase system type (1 or 2).
-
- Constructs
-
public DiscreteSignal Decimate(DiscreteSignal signal)- Polyphase decimates input signal (type I system).
- Parameters:
-
signal: input signal.
-
- Returns: decimated signal.
-
public DiscreteSignal Interpolate(DiscreteSignal signal)- Polyphase interpolates input signal (type II system).
- Parameters:
-
signal: input signal.
-
- Returns: interpolated signal.
-
public float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public void Reset()- Resets polyphasefilter.
-
public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Processes entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
The following example builds and processes samples with PolyphaseSystem with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters.Polyphase;
public class PolyphaseSystemExample
{
public static void Main()
{
// Define filter kernel
float[] kernel = { 1, 2, 3, 4, 3, 2, 1 };
// Create PolyphaseSystem instance
var polyphaseSystem = new PolyphaseSystem(kernel, 3);
// Define input signal
float[] samples = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
var signal = new DiscreteSignal(44100, samples);
// Perform polyphase decimation
var decimatedSignal = polyphaseSystem.Decimate(signal);
// Print decimated signal samples
Console.WriteLine("Decimated Signal:");
foreach (var sample in decimatedSignal.Samples)
{
Console.WriteLine(sample);
}
// Perform polyphase interpolation
var interpolatedSignal = polyphaseSystem.Interpolate(signal);
// Print interpolated signal samples
Console.WriteLine("Interpolated Signal:");
foreach (var sample in interpolatedSignal.Samples)
{
Console.WriteLine(sample);
}
// Resetspolyphasefilter
polyphaseSystem.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.CombFeedbackFilter implements a feedback comb filter.
No public properties.
-
public CombFeedbackFilter(int m, float b0 = 1.0f, float am = 0.6f)- Constructs CombFeedbackFilter instance.
- Parameters:
-
m: delay. -
b0: Coefficient b0; default 1.0f. -
am: Coefficient am; default 0.6f.
-
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public void Change(float b0, float am)- changes filter coefficients (preserves filter state).
- Parameters:
-
b0: Coefficient b0. -
am: Coefficient am.
-
The following example uses CombFeedbackFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class CombFeedbackFilterExample
{
public static void Main()
{
// Create CombFeedbackFilter instance
var combFilter = new CombFeedbackFilter(4, 1.0f, 0.6f);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
var signal = new DiscreteSignal(44100, inputSignal);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = combFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Change filter coefficients
combFilter.Change(0.8f, 0.4f);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = combFilter.Process(sample);
Console.WriteLine($"Processed Sample after change: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.CombFeedforwardFilter implements a feedforward comb filter.
No public properties.
-
public CombFeedforwardFilter(int m, float b0 = 1f, float bm = 0.5f, bool normalize = true)- Constructs CombFeedforwardFilter instance.
- Parameters:
-
m: delay. -
b0: Coefficient b0; default 1f. -
bm: Coefficient bm; default 0.5f. -
normalize: Whether to normalize frequency response; default true.
-
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public void Change(float b0, float bm)- changes filter coefficients (preserves filter state).
- Parameters:
-
b0: Coefficient b0. -
bm: Coefficient bm.
-
The following example uses CombFeedforwardFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class CombFeedforwardFilterExample
{
public static void Main()
{
// Create CombFeedforwardFilter instance
var combFilter = new CombFeedforwardFilter(4, 1f, 0.5f);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
var signal = new DiscreteSignal(44100, inputSignal);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = combFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Change filter coefficients
combFilter.Change(0.8f, 0.4f);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = combFilter.Process(sample);
Console.WriteLine($"Processed Sample after change: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.DcRemovalFilter is an IIR filter for DC offset removal.
No public properties.
-
public DcRemovalFilter(float r = 0.995f)- Constructs DcRemovalFilter instance.
- Parameters:
-
r: R coefficient, typically in [0.9, 1]; default 0.995f.
-
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override void Reset()- Resetsfilter.
The following example uses DcRemovalFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class DcRemovalFilterExample
{
public static void Main()
{
// Create DcRemovalFilter instance
var dcRemovalFilter = new DcRemovalFilter(0.995f);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = dcRemovalFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
dcRemovalFilter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.DeEmphasisFilter is an IIR de-emphasis filter.
No public properties.
-
public DeEmphasisFilter(float a = 0.97f, bool normalize = false)- Constructs DeEmphasisFilter instance.
- Parameters:
-
a: De-emphasis coefficient; default 0.97f. -
normalize: Whether to normalize frequency response; default false.
-
The following example uses DeEmphasisFilter constructor with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class DeEmphasisFilterExample
{
public static void Main()
{
// Create DeEmphasisFilter instance
var deEmphasisFilter = new DeEmphasisFilter(0.97f, true);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = deEmphasisFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
deEmphasisFilter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.HilbertFilter is a class that implements Hilbert filter.
-
public int Size { get; }- Gets filter size.
-
public HilbertFilter(int size = 128)- Constructs HilbertFilter instance.
- Parameters:
-
size: Filter size; default 128.
-
-
private static IEnumerable<float> MakeKernel(int size)- Generates filter kernel of given size.
- Parameters:
-
size: Kernel size.
-
- Returns: float array of filter kernel.
The following example uses HilbertFilter constructor with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class HilbertFilterExample
{
public static void Main()
{
// Create HilbertFilter instance
var hilbertFilter = new HilbertFilter(128);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = hilbertFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.MedianFilter implements median filtering.
-
public int Size { get; }- Gets median filter size.
-
public MedianFilter(int size = 9)- Constructs MedianFilter instance.
- Parameters:
-
size: Filter size; default 9.
-
-
public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public void Reset()- Resetsfilter.
The following example uses MedianFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class MedianFilterExample
{
public static void Main()
{
// Create MedianFilter instance
var medianFilter = new MedianFilter(9);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = medianFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
medianFilter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.MedianFilter2 implements median filtering; faster than MedianFilter but only for small sizes (up to about 5).
-
public int Size { get; }- Gets median filter size.
-
public MedianFilter2(int size = 9)- Constructs MedianFilter2 instance.
- Parameters:
-
size: Filter size; default 9.
-
-
public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public void Reset()- Resetsfilter.
The following example uses MedianFilter2 with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class MedianFilter2Example
{
public static void Main()
{
// Create MedianFilter2 instance
var medianFilter2 = new MedianFilter2(9);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = medianFilter2.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
medianFilter2.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.MovingAverageFilter implements a non-recursive moving average filter.
-
public int Size { get; }- Gets filter size.
-
public MovingAverageFilter(int size = 9)- Constructs MovingAverageFilter instance.
- Parameters:
-
size: Filter size; default 9.
-
-
private static IEnumerable<float> MakeKernel(int size)- Generates filter kernel of given size.
- Parameters:
-
size: Kernel size.
-
- Returns: float array of filter kernel.
The following example uses MovingAverageFilter constructor with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class MovingAverageFilterExample
{
public static void Main()
{
// Create MovingAverageFilter instance
var movingAverageFilter = new MovingAverageFilter(9);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = movingAverageFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.MovingAverageRecursiveFilter implements a fast recursive moving average filter.
-
public int Size { get; }- Gets filter size.
-
public MovingAverageRecursiveFilter(int size = 9)- Constructs MovingAverageRecursiveFilter instance.
- Parameters:
-
size: Filter size; default 9.
-
-
private static float[] MakeNumerator(int size)- Generates filter numerator of given size.
- Parameters:
-
size: Numerator size.
-
- Returns: float array of filter numerator.
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override void Reset()- Resetsfilter.
The following example uses MovingAverageRecursiveFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class MovingAverageRecursiveFilterExample
{
public static void Main()
{
// Create MovingAverageRecursiveFilter instance
var movingAverageRecursiveFilter = new MovingAverageRecursiveFilter(9);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
var signal = new DiscreteSignal(44100, inputSignal);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = movingAverageRecursiveFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
movingAverageRecursiveFilter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.PreEmphasisFilter implements pre-emphasis FIR filtering.
No public properties.
-
public PreEmphasisFilter(float a = 0.97f, bool normalize = false)- Constructs PreEmphasisFilter instance.
- Parameters:
-
a: Pre-emphasis coefficient; default 0.97f. -
normalize: Whether to normalize frequency response; default false.
-
-
public override float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public override DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public override void Reset()- Resetsfilter.
The following example uses PreEmphasisFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class PreEmphasisFilterExample
{
public static void Main()
{
// Create PreEmphasisFilter instance
var preEmphasisFilter = new PreEmphasisFilter(0.97f, true);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
var signal = new DiscreteSignal(44100, inputSignal);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = preEmphasisFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
preEmphasisFilter.Reset();
}
}Vorcyc.Mathematics.SignalProcessing.Filters.RastaFilter is an IIR RASTA filter for robust speech processing.
No public properties.
-
public RastaFilter(float pole = 0.98f)- Constructs RastaFilter instance.
- Parameters:
-
pole: poles, default 0.98f.
-
The following example uses RastaFilter constructor with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class RastaFilterExample
{
public static void Main()
{
// Create RastaFilter instance
var rastaFilter = new RastaFilter(0.98f);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = rastaFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.SavitzkyGolayFilter is an FIR Savitzky–Golay filter.
-
public int Size { get; }- Gets filter size.
-
public SavitzkyGolayFilter(int size, int deriv = 0)- Constructs SavitzkyGolayFilter instance.
- Parameters:
-
size: Filter size (odd, in range [5..31]). -
deriv: Derivative (0, 1, or 2); default 0.
-
The following example uses SavitzkyGolayFilter constructor with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class SavitzkyGolayFilterExample
{
public static void Main()
{
// Create SavitzkyGolayFilter instance
var sgFilter = new SavitzkyGolayFilter(11, 0);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = sgFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.ThiranFilter is an IIR N-th order Thiran all-pass interpolation filter.
No public properties.
-
public ThiranFilter(int order, float delta)- Constructs ThiranFilter instance.
- Parameters:
-
order: filterorder. -
delta: Fractional delay.
-
-
private static TransferFunction MakeTf(int order, float delta)- Generates transfer function.
- Parameters:
-
order: filterorder. -
delta: Fractional delay.
-
- Returns: generated
TransferFunction.
-
private static float ThiranCoefficient(int k, int n, float delta)- Computes k-th coefficient of transfer function denominator.
- Parameters:
-
k: Coefficient index. -
n: filterorder. -
delta: Fractional delay.
-
- Returns: computed coefficient.
The following example uses ThiranFilter constructor with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class ThiranFilterExample
{
public static void Main()
{
// Define filter order and fractional delay
int order = 13; float delta = 13.4f;
// Create ThiranFilter instance
var thiranFilter = new ThiranFilter(order, delta);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
// Process signal and print result
foreach (var sample in inputSignal)
{
var processedSample = thiranFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
}
}Vorcyc.Mathematics.SignalProcessing.Filters.WienerFilter implements a Wiener filter; same as scipy.signal.wiener().
No public properties.
-
public WienerFilter(int size = 3, float noise = 0.0f)- Constructs WienerFilter instance.
- Parameters:
-
size: Wiener filter size; default 3. -
noise: Estimated noise power; default 0.0f.
-
-
public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringMethod method = FilteringMethod.Auto)- Applies filter to entire signal and returns new filtered signal.
- Parameters:
-
signal: input signal. -
method: filtering method; defaultFilteringMethod.Auto..
-
- Returns: processed
DiscreteSignal.
-
public float Process(float sample)- Processes one sample.
- Parameters:
-
sample: input sample.
-
- Returns: processed sample.
-
public void Reset()- Resetsfilter.
The following example uses WienerFilter with comments:
using System;
using Vorcyc.Mathematics.SignalProcessing.Filters;
public class WienerFilterExample
{
public static void Main()
{
// Create WienerFilter instance
var wienerFilter = new WienerFilter(3, 0.0f);
// Define input signal
float[] inputSignal = { 0.5f, 0.6f, 0.55f, 0.7f, 0.65f };
var signal = new DiscreteSignal(44100, inputSignal);
// Process signal and print result
foreach (var sample in signal.Samples)
{
var processedSample = wienerFilter.Process(sample);
Console.WriteLine($"Processed Sample: {processedSample}");
}
// Reset filter
wienerFilter.Reset();
}
}The Vorcyc.Mathematics.SignalProcessing.Filters.Kalman namespace provides generic state-estimation filters. All types are generic over T (a floating-point type).
| Type | Description |
|---|---|
StandardKalmanFilter1D<T> |
1D standard Kalman filter; recursive state estimate combining a linear model and measurements (predict + update). |
StandardKalmanFilter2D<T> |
2D (matrix) standard Kalman filter for two-state linear systems. |
ExtendedKalmanFilter1D<T> |
1D extended Kalman filter for nonlinear systems; linearizes model/measurement via user-supplied functions. |
ExtendedKalmanFilter2D<T> |
2D (matrix) extended Kalman filter for nonlinear systems. |
UnscentedKalmanFilter1D<T> |
1D unscented Kalman filter; handles nonlinearity via the unscented transform (no explicit linearization). |
SquareRootKalmanFilter1D<T> |
1D square-root Kalman filter; propagates the square root of the covariance for improved numerical stability. |
InformationFilter1D<T> |
1D information filter; represents uncertainty with the information matrix (inverse covariance). |
ParticleFilter1D<T> |
1D particle filter; represents the posterior with a weighted particle cloud and importance resampling (nonlinear/non-Gaussian). |
-
- 🔖 ArrayExtension class
- 🔖 BaseConverter class
- 🔖 BitMathExtension class
- 🔖 Combinatorics class
- 🔖 ConstantsFp32 class
- 🔖 NumberMapper class
- 🔖 PinnableArray<T> class
- 🔖 SimpleRNG_Fp32 and SimpleRNG_Fp64 classes
- 🔖 TrigonometryHelper class
- 🔖 VMath class
- 🔖 Pinned buffers (Buffers)
- 🔖 IPinnedBuffer<T> interface
- 🔖 POHBuffer<T> class
- 🔖 NativeBuffer<T> class
-
- 🔖 0.9 classifier walkthrough
- 🔖 KNN<T> class
- 🔖 MultipleLinearRegression<T> class
- 🔖 SimpleLinearRegression<T> class
- 🔖 SupportVectorMachine<TSelf> class
- 🔖 DBSCAN<T> class
- 🔖 ExpectationMaximization<T> class
- 🔖 GMM<T> class
- 🔖 HierarchicalClustering<T> class
- 🔖 KMeansClusterer<T> class
- 🔖 VectorQuantization<T> class
- 🔖 FactorAnalysis<T> class
- 🔖 PCA<TSelf> class
- 🔖 TSNE<T> class
- 🔖 Distance metric classes
-
📒 Examples
-
📒 GPU 策略说明
- 🔖 为何放弃主包 GPU
- 🔖 当前性能路径
- 🔖 若仍需要更强算力
-
📒 计算上下文模块
-
📒 核心模块
-
📒 深度学习模块
-
📒 线性代数模块
-
📒 机器学习模块
- 🔖 0.9 分类器完整示例
- 🔖 KNN<T> 类
- 🔖 MultipleLinearRegression<T> 类
- 🔖 SimpleLinearRegression<T> 类
- 🔖 SupportVectorMachine<TSelf> 类
- 🔖 DBSCAN<T> 类
- 🔖 ExpectationMaximization<T> 类
- 🔖 GMM<T> 类
- 🔖 HierarchicalClustering<T> 类
- 🔖 KMeansClusterer<T> 类
- 🔖 VectorQuantization<T> 类
- 🔖 FactorAnalysis<T> 类
- 🔖 PCA<TSelf> 类
- 🔖 TSNE<T> 类
- 🔖 距离度量类
-
📒 信号处理模块
-
📒 数值模块
-
📒 统计模块
- 🔖 基础统计函数
- 🔖 高级统计函数
- 🔖 稳健统计 / RunningMoments
- 🔖 其它统计函数
- 🔖 分布相关函数
- 🔖 时间序列分析
- 🔖 IComparable 扩展
- 🔖 ExtremeValueFinder
- 🔖 INumber 扩展
-
📒 FFTW 扩展
-
📒 示例