public bool AddParameter() { DesignMethod designMethod = DesignerViewModel.CurrentDesignClass.Methodes.Where(item => item.IsChecked).FirstOrDefault(); designMethod.Parameters.Add(DesignMethodParameter); DesignerViewModel.SaveClassCommand.RaiseCanExecuteChanged(); return(true); }
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; } }
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"; }
/// <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)); }
/// <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); }