public bool AddParameter()
        {
            DesignMethod designMethod = DesignerViewModel.CurrentDesignClass.Methodes.Where(item => item.IsChecked).FirstOrDefault();

            designMethod.Parameters.Add(DesignMethodParameter);
            DesignerViewModel.SaveClassCommand.RaiseCanExecuteChanged();
            return(true);
        }
Beispiel #2
0
 public void Cancel()
 {
     if (DesignMethod.MethodID > 0)
     {
         DesignMethod originalDesignMethod = ApplicationDesignService.GetDesignMethod(DesignMethod.MethodID);
         DesignMethod.MethodName           = originalDesignMethod.MethodName;
         DesignMethod.Body                 = originalDesignMethod.Body;
         DesignMethod.Description          = originalDesignMethod.Description;
         DesignMethod.IsChecked            = true;
         DesignMethod.IsMethodChanged      = originalDesignMethod.IsMethodChanged;
         DesignMethod.Parameters           = originalDesignMethod.Parameters;
         DesignMethod.ResultCollectionType = originalDesignMethod.ResultCollectionType;
         DesignMethod.ResultDataType       = originalDesignMethod.ResultDataType;
         DesignMethod.ResultStructName     = originalDesignMethod.ResultStructName;
         DesignMethod.ScriptType           = originalDesignMethod.ScriptType;
         DesignMethod.State                = originalDesignMethod.State;
     }
 }
Beispiel #3
0
        public MethodViewModel()
        {
            ResultTypeSelectionChangedCommand = new Microsoft.Practices.Prism.Commands.DelegateCommand(ResultTypeSelectionChanged);

            CollectionTypeSource = ApplicationDesignCache.CollectionTypeSource;
            ResultTypeSource     = ApplicationDesignCache.ResultTypeSource;
            ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(ApplicationDesignCache.StructSource);

            listCollectionView.SortDescriptions.Add(new SortDescription());
            StructSource     = ApplicationDesignCache.StructSource;
            ScriptTypeSource = ApplicationDesignCache.ScriptTypeSource;

            DesignMethod                      = new DesignMethod();
            DesignMethod.MethodID             = -1;
            DesignMethod.IsOperationProtocol  = true;
            DesignMethod.Parameters           = new ObservableCollection <DesignMethodParameter>();
            DesignMethod.ResultCollectionType = "None";
            DesignMethod.ResultDataType       = "Void";
            DesignMethod.ScriptType           = "Dll";
            DesignMethod.IsMethodChanged      = false;
            DesignMethod.State                = "added";
        }
Beispiel #4
0
 /// <summary>
 /// IIR lowpass filter, design and process
 /// </summary>
 /// <param name="inputData">Input waform data</param>
 /// <param name="fPass">Passband frequency</param>
 /// <param name="fStop">Stopband frequency</param>
 /// <param name="sampleRate">Samplerate</param>
 /// <param name="method">Design method</param>
 /// <param name="passbandRipple_dB">PassbandRipple(dB)</param>
 /// <param name="stopbandAttenuation_dB">StopbandAttenuation(dB)</param>
 /// <returns></returns>
 public static double[] ProcessLowpass(double[] inputData, double fPass, double fStop, double sampleRate = 1, DesignMethod method = DesignMethod.InvChebyshev, double passbandRipple_dB = 0.05, double stopbandAttenuation_dB = 60)
 {
     return(Filter(inputData, method, FilterType.Lowpass, fPass, fStop, 0, 0, sampleRate, passbandRipple_dB, stopbandAttenuation_dB));
 }
Beispiel #5
0
        /// <summary>
        /// Filter
        /// </summary>
        /// <param name="inputData">Input waform data</param>
        /// <param name="mode">Folter design method</param>
        /// <param name="type">Filter type</param>
        /// <param name="fpass1">PassBand left frequency</param>
        /// <param name="fstop1">StopBand left frequency</param>
        /// <param name="fpass2">PassBand right frequency</param>
        /// <param name="fstop2">StopBand right frequency</param>
        /// <param name="fs">Samplerate</param>
        /// <param name="rp">Passband ripple</param>
        /// <param name="rs">Stopband attenuation</param>
        /// <returns>Output waveform data</returns>
        private static double[] Filter(double[] inputData, DesignMethod mode, FilterType type, double fpass1, double fstop1, double fpass2, double fstop2, double fs, double rp = 0.1, double rs = 50)
        {
            MWNumericArray waveMatlab = inputData;
            MWNumericArray wpMatlab;
            MWNumericArray wsMatlab;
            MWNumericArray wnMatlab;
            MWArray        typeMatlab;
            MWArray        rpMatlab = rp;
            MWArray        rsMatlab = rs;

            MWArray[] resultMatlab;
            double[]  fpassandFstop = new double[4];
            double[]  frange        = new double[2];
            double[,] result2D;
            double[] result;
            switch (type)
            {
            case FilterType.Highpass:
                if (fpass1 > fstop1)
                {
                    wpMatlab = fpass1 / (fs / 2);
                    wsMatlab = fstop1 / (fs / 2);
                }
                else
                {
                    wpMatlab = fstop1 / (fs / 2);
                    wsMatlab = fpass1 / (fs / 2);
                }
                typeMatlab = "high";
                if (mode == DesignMethod.InvChebyshev)
                {
                    wnMatlab = wsMatlab;
                }
                else
                {
                    wnMatlab = wpMatlab;
                }
                break;

            case FilterType.Lowpass:
                if (fpass1 < fstop1)
                {
                    wpMatlab = fpass1 / (fs / 2);
                    wsMatlab = fstop1 / (fs / 2);
                }
                else
                {
                    wpMatlab = fstop1 / (fs / 2);
                    wsMatlab = fpass1 / (fs / 2);
                }
                typeMatlab = "low";
                if (mode == DesignMethod.InvChebyshev)
                {
                    wnMatlab = wsMatlab;
                }
                else
                {
                    wnMatlab = wpMatlab;
                }
                break;

            case FilterType.Bandpass:
                fpassandFstop[0] = fpass1 / (fs / 2);
                fpassandFstop[1] = fstop1 / (fs / 2);
                fpassandFstop[2] = fpass2 / (fs / 2);
                fpassandFstop[3] = fstop2 / (fs / 2);
                Array.Sort(fpassandFstop);
                frange[0]  = fpassandFstop[1];
                frange[1]  = fpassandFstop[2];
                wpMatlab   = frange;
                frange[0]  = fpassandFstop[0];
                frange[1]  = fpassandFstop[3];
                wsMatlab   = frange;
                typeMatlab = "bandpass";
                if (mode == DesignMethod.InvChebyshev)
                {
                    wnMatlab = wsMatlab;
                }
                else
                {
                    wnMatlab = wpMatlab;
                }
                break;

            case FilterType.Bandstop:
            default:
                fpassandFstop[0] = fpass1 / (fs / 2);
                fpassandFstop[1] = fstop1 / (fs / 2);
                fpassandFstop[2] = fpass2 / (fs / 2);
                fpassandFstop[3] = fstop2 / (fs / 2);
                Array.Sort(fpassandFstop);
                frange[0]  = fpassandFstop[1];
                frange[1]  = fpassandFstop[2];
                wpMatlab   = frange;
                frange[0]  = fpassandFstop[0];
                frange[1]  = fpassandFstop[3];
                wsMatlab   = frange;
                typeMatlab = "stop";
                if (mode == DesignMethod.InvChebyshev)
                {
                    wnMatlab = wpMatlab;
                }
                else
                {
                    wnMatlab = wsMatlab;
                }
                break;
            }

            DSPClass dspTask = new DSPClass();

            switch (mode)
            {
            case DesignMethod.Butterworth:
                resultMatlab = dspTask.Butter(1, waveMatlab, wpMatlab, wsMatlab, rpMatlab, rsMatlab, typeMatlab);
                break;

            case DesignMethod.Elliptic:
                resultMatlab = dspTask.Ellip(1, waveMatlab, wpMatlab, wsMatlab, wnMatlab, rpMatlab, rsMatlab, typeMatlab);
                break;

            case DesignMethod.InvChebyshev:
            default:
                resultMatlab = dspTask.Cheb2(1, waveMatlab, wpMatlab, wsMatlab, wnMatlab, rpMatlab, rsMatlab, typeMatlab);
                break;
            }

            result2D = (double[, ])resultMatlab[0].ToArray();
            result   = new double[result2D.Length];
            Buffer.BlockCopy(result2D, 0, result, 0, result2D.Length * sizeof(double));
            return(result);
        }