/// <summary> /// Method implements simple phaser effect /// </summary> /// <param name="signal"></param> /// <param name="filteringOptions"></param> /// <returns></returns> public DiscreteSignal ApplyTo(DiscreteSignal signal, FilteringOptions filteringOptions = FilteringOptions.Auto) { var x = signal.Samples; var samplingRateInverted = 1.0 / signal.SamplingRate; var lfo = new TriangleWaveBuilder() .SetParameter("lo", MinFrequency) .SetParameter("hi", MaxFrequency) .SetParameter("freq", LfoFrequency) .OfLength(signal.Length) .SampledAt(signal.SamplingRate) .Build(); var y = new float[x.Length]; for (var i = 2; i < signal.Length; i++) { var filter = new NotchFilter((float)(lfo[i] * samplingRateInverted), Q); var b = filter.Tf.Numerator; var a = filter.Tf.Denominator; y[i] = (float)(b[0] * x[i] + b[1] * x[i - 1] + b[2] * x[i - 2] - (a[1] * y[i - 1] + a[2] * y[i - 2])); } return(new DiscreteSignal(signal.SamplingRate, y)); }
private void btnAddFilter_Click(object sender, RoutedEventArgs e) { Filter filter = null; switch ((sender as FrameworkElement).Name) { case "btnAddLPF": filter = new LowPassFilter(Filter.DefaultN, (double)globalSampleRate / 4); break; case "btnAddHPF": filter = new HighPassFilter(Filter.DefaultN, (double)globalSampleRate / 4); break; case "btnAddBPF": filter = new BandPassFilter(Filter.DefaultN, (double)globalSampleRate / 8, (double)globalSampleRate * 3 / 8); break; case "btnAddBSF": filter = new BandStopFilter(Filter.DefaultN, (double)globalSampleRate / 8, (double)globalSampleRate * 3 / 8); break; case "btnAddMF": filter = new AverageFilter(Filter.DefaultN); break; case "btnAddZPass": filter = new ZFilterPass(ZFilterPass.DefaultR, (double)globalSampleRate / 4); break; case "btnAddZPass1": filter = new ZFilterPass1(ZFilterPass1.DefaultR, (double)globalSampleRate / 4); break; case "btnAddNotch": filter = new NotchFilter(NotchFilter.DefaultR1, NotchFilter.DefaultR2, (double)globalSampleRate / 4); break; default: return; } filter.PropertyChanged += new PropertyChangedEventHandler(Filter_PropertyChanged); filters.Add(filter); filtersList.SelectedIndex = filters.IndexOf(filter); updateResult(); }
public Demodulator NotchFilter(NotchFilter filter) { _radio.Check(_api.SetNotchFilter(_radio.GetHandle(), _ddc2.Channel(), filter.Active)); _radio.Check(_api.SetNotchFilterBandwidth(_radio.GetHandle(), _ddc2.Channel(), filter.Bandwidth)); _radio.Check(_api.SetNotchFilterFrequency(_radio.GetHandle(), _ddc2.Channel(), filter.Frequency)); return(this); }
/// <summary> /// Constructor /// </summary> /// <param name="samplingRate"></param> /// <param name="lfo"></param> /// <param name="q"></param> public PhaserEffect(int samplingRate, SignalBuilder lfo, float q = 0.5f) { _fs = samplingRate; Q = q; Lfo = lfo; _filter = new NotchFilter(Lfo.NextSample() / _fs, Q); }
public bool TryNotchFilter(NotchFilter filter) { var res = _api.SetNotchFilter(_radio.GetHandle(), _ddc2.Channel(), filter.Active); res &= _api.SetNotchFilterBandwidth(_radio.GetHandle(), _ddc2.Channel(), filter.Bandwidth); res &= _api.SetNotchFilterFrequency(_radio.GetHandle(), _ddc2.Channel(), filter.Frequency); return(res); }
/// <summary> /// Constructor /// </summary> /// <param name="samplingRate"></param> /// <param name="q"></param> /// <param name="lfoFrequency"></param> /// <param name="minFrequency"></param> /// <param name="maxFrequency"></param> public PhaserEffect(int samplingRate, float lfoFrequency = 1.0f, float minFrequency = 300, float maxFrequency = 3000, float q = 0.5f) { _fs = samplingRate; Lfo = new TriangleWaveBuilder().SampledAt(samplingRate); LfoFrequency = lfoFrequency; MinFrequency = minFrequency; MaxFrequency = maxFrequency; Q = q; _filter = new NotchFilter(Lfo.NextSample() / _fs, Q); }
/// <summary> /// Function for configuring the IF notch filter. /// </summary> /// <param name="notchFilter"><see cref="Devices.NotchFilter"/> Notch parameters</param> /// <returns>Returns <see cref="G313Demodulator"/></returns> public G313Demodulator NotchFilter(NotchFilter notchFilter) { var result = TryNotchFilter(notchFilter); return(CheckFluent(result, "failed to set notch filter")); }
/// <summary> /// Function for configuring the IF notch filter. /// </summary> /// <param name="notchFilter"><see cref="Devices.NotchFilter"/> filter parameters</param> /// <returns>Returns true if Notch filter parameters are set.</returns> public bool TryNotchFilter(NotchFilter notchFilter) { return(G313DemodulatorApi.SetNotchFilter(GetHandle(), notchFilter.Active, notchFilter.Frequency, notchFilter.Bandwidth)); }