Exemple #1
0
        /// <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();
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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"));
        }
Exemple #8
0
 /// <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));
 }