public void CorrelateTest() { var correlation = Correlation.Correlate(first, second).ToList(); for (int i = 0; i < 6; i++) { Assert.AreEqual(correlation[i].Y, result[i].Y); } }
private void RunSimulation() { var samplingPeriod = 1.0d / SentSignalData.SamplingFrequency.Value; while (true) { Thread.Sleep((int)SentSignalData.ReportPeriod.Value * 1000); Object.Position.Value += Object.Velocity.Value * SentSignalData.ReportPeriod.Value; var delay = 2.0d * Object.Position.Value / SentSignalData.SignalSpeed.Value; var second = new List <double>(); for (var i = 0; i < SentSignalData.NumberOfSamples.Value; i++) { second.Add(Signal(i * samplingPeriod - delay)); } var correlation = Correlation.Correlate(SentSignal.Select(s => new Point(0, s.Value)), second.Select(s => new Point(0, s))).ToList(); var distance = CorrelationDistance(correlation); if (Application.Current == null) { break; } Application.Current.Dispatcher.Invoke(() => { var i = 0; foreach (var observableValue in ReceivedSignal) { observableValue.Value = second[i++]; } i = 0; foreach (var observableValue in CorrelationData) { observableValue.Value = correlation[i++].Y; } }); SensorParameters.SensedObjectPosition.Value = distance * samplingPeriod * SentSignalData.SignalSpeed.Value / 2.0d; } }
private void Simulation(object arg) { SentSignal.Clear(); ReceivedSignal.Clear(); var samplingPeriod = 1.0d / SentSignalData.SamplingFrequency.Value; for (var i = 0; i < SentSignalData.NumberOfSamples.Value; i++) { SentSignal.Add(new ObservableValue(Signal(i * samplingPeriod))); ReceivedSignal.Add(new ObservableValue(Signal(i * samplingPeriod))); } CorrelationData.AddRange(Correlation .Correlate(SentSignal.Select(p => new Point(0, p.Value)), ReceivedSignal.Select(p => new Point(0, p.Value))).Select(p => new ObservableValue(p.Y))); simulationThread = new Thread(RunSimulation); simulationThread.Start(); }