-
Notifications
You must be signed in to change notification settings - Fork 75
Known bugs and changelog
Tim Sharii edited this page Jul 4, 2019
·
35 revisions
- Add more IIR filters: Bessel, Chebyshev-I & II, Elliptic, Thiran
- Add
TfToSos / SosToTf
methods toDesignFilter
class for working with second-order sections - Add
SavitzkyGolayFilter
class (window size up to 31; derivatives 0, 1, 2) - Add
PolyphaseSystem
class - Add
PlpExtractor
class - Add
Stft
methods:MagnitudePhaseSpectrogram()
/ReconstructMagnitudePhase()
- Add
HarmonicPercussiveSeparator
class - Add
GriffinLimReconstructor
class - Add
Remez
class for equiripple FIR filter design - Add methods
FirWin(Lp|Hp|Bp|Bs)
andFirEquiripple(Lp|Hp|Bp|Bs)
toDesignFilter
class - Fix bug with pre-emphasis in
PnccExtractor
that led to less accurate results - Add
lpcOrder
parameter toLpccExtractor
- Add
RealFft
class and use it instead ofFft
where possible (25-35% performance gain) - Important change in interface and implementation of LTI filter classes (more in tutorial soon):
// code in versions before 0.9.2
var filter = DesignFilter.FirLp(145, 0.15f);
var impulseResponse = filter.ImpulseResponse();
var magnitudeResponse = filter.FrequencyResponse().Magnitude;
var tf = filter.Tf;
// became:
var filter = new FirFilter(DesignFilter.FirLp(145, 0.15));
var impulseResponse = filter.Tf.ImpulseResponse();
var magnitudeResponse = filter.Tf.FrequencyResponse().Magnitude;
var tf = filter.Tf; // looks the same, but now it's more optimized
// in short:
// FirFilter / IirFilter classes are now used only for filtering.
// Everything related to filter design & analysis as of ver.0.9.2
// is concentrated in TransferFunction class. It was here before,
// but FDA responsibilities were somewhat mixed between filters and Tf.
// Filter objects contained arrays of both 32-bit and 64-bit coefficients
// although filtering was (and still is) done with 32-bit floats
// and FDA was (and still is) done with 64-bit doubles.
// As of ver.0.9.2 filters contain only 32-bit coefficients for filtering
// and the reference to TransferFunction object (not null - only if needed).
// TF objects contain 64-bit numerator / denominator coefficients.
var filter = new IirFilter(new[] { 1, 0.2, -0.3 }, new[] { 1, 0.9 });
var tf = filter.Tf;
// in this case TransferFunction will be generated on the fly
// from 32-bit floats (so we'll lose precision).
// Internal Tf object of the filter is still null.
// Memory efficient, but this filter maybe lacks precision for filter analysis.
// If we need just to filter data, this is the best solution.
var filter = new IirFilter(new TransferFunction(new[] { 1, 0.2, -0.3 }, new[] { 1, 0.9 }));
var tf = filter.Tf;
// here the filter stores the reference to TF with 64-bit precision
// and Tf property returns this reference.
// If we use this filter only for filtering, then this constructor is redundant
// and memory inefficient.
// Surely, we can work just with TF object, without any filter objects:
var tf = new TransferFunction(new[] { 1, 0.2, -0.3 }, new[] { 1, 0.9 });
var zeros = tf.Zeros;
var freqResponse = tf.FrequencyResponse(1024);
// etc.
// 64-bit precision:
var tf1 = new TransferFunction(b, a);
var tf2 = new TransferFunction(d, c);
var tf = tf1 * tf2;
// 32-bit precision:
var filter1 = new IirFilter(b, a);
var filter2 = new IirFilter(d, c);
var filter = filter1 * filter2;
// also:
var hpFilter = DesignFilter.LpToHp(filter);
var lpFilter = DesignFilter.HpToLp(hpFilter);
var bpFilter = DesignFilter.FirBp(123, 0.05f, 0.15f);
var brFilter = DesignFilter.FirBr(201, 0.08f, 0.23f, WindowTypes.Kaiser);
// became:
var hpFilter = DesignFilter.FirLpToHp(filter);
var lpFilter = DesignFilter.FirHpToLp(hpFilter);
var bpFilter = DesignFilter.FirWinBp(123, 0.05, 0.15);
var brFilter = DesignFilter.FirWinBr(201, 0.08, 0.23, WindowTypes.Kaiser);
- Add wavelets (planned)
- Add adaptive filters (LMS variations, LMF, RLS)
- Add Hartley transform
- Add Mellin transform
- Add wavetable and ADSR signal builders
- Add
PitchShiftVocoderEffect
class - Add parameter
int parallelThreads
inParallelComputeFrom
method of feature extractors - Add overloaded versions of
ParallelComputeFrom
methods withstartSample
andendSample
parameters - Implement online processing methods in
SpectralSubtractor
,WhisperEffect
,RobotEffect
,MorphEffect
- Phase Vocoder with Identity Phase Locking is used by default for TSM (instead of WSOLA)
- Trim feature names in
FeatureDescriptions
list of multi-feature extractors - Move
PitchExtractor
toFeatureExtractors
namespace - Fix bug with incorrectly working pre-emphasis filter in Lpc/LpccExtractor
- Size of FFT in Pncc/SpnccExtractor is 0 by default (it'll be auto-derived)