Example #1
0
        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;
            }
        }
Example #2
0
        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();
        }