示例#1
0
            /// <summary>
            /// Average the Earth Velocity data.
            /// </summary>
            /// <param name="scale">Scale value to multiply to the averaged data.</param>
            /// <returns>Average the Earth Velocity data.</returns>
            private float[] AverageEarthVelocity(float scale)
            {
                // Accumulate the data
                AccumulatedBtData data = Accumulate(_earthVelocityAccum);

                // Then average the data
                return(AverageData(data, scale));
            }
示例#2
0
            /// <summary>
            /// Average the Amplitude data.
            /// </summary>
            /// <param name="scale">Scale value to multiply to the averaged data.</param>
            /// <returns>Average the Amplitude data.</returns>
            private float[] AverageAmplitude(float scale)
            {
                // Accumulate the data
                AccumulatedBtData data = Accumulate(_amplitudeAccum);

                // Then average the data
                return(AverageData(data, scale));
            }
示例#3
0
            /// <summary>
            /// Average the Correlation data.
            /// </summary>
            /// <param name="scale">Scale value to multiply to the averaged data.</param>
            /// <returns>Average the Correlation data.</returns>
            private float[] AverageCorrelation(float scale)
            {
                // Accumulate the data
                AccumulatedBtData data = Accumulate(_correlationAccum);

                // Then average the data
                return(AverageData(data, scale));
            }
示例#4
0
            /// <summary>
            /// Average the SNR data.
            /// </summary>
            /// <param name="scale">Scale value to multiply to the averaged data.</param>
            /// <returns>Average the SNR data.</returns>
            private float[] AverageSnr(float scale)
            {
                // Accumulate the data
                AccumulatedBtData data = Accumulate(_sNRAccum);

                // Then average the data
                return(AverageData(data, scale));
            }
示例#5
0
            /// <summary>
            /// Average all the given accumulated data.  This will then multiple a
            /// scale value to the averaged data.
            /// </summary>
            /// <param name="accumData">Accumulated values.</param>
            /// <returns>Array with the averaged and scaled value.</returns>
            /// <param name="scale">Scale value to multiply to the averaged value.</param>
            protected float[] AverageData(AccumulatedBtData accumData, float scale = 1.0f)
            {
                // Create an array, if no data is accumulated, null will be retruned
                float[] result = null;

                if (accumData.AvgAccum != null && accumData.AvgCount != null)
                {
                    // Create the results array based off the accumulated values
                    result = new float[accumData.AvgAccum.GetLength(0)];

                    int numBeams = accumData.AvgCount.GetLength(0);

                    // Check if it has at least 1 beams
                    if (numBeams > 0)
                    {
                        // Calculate the average values
                        float B0 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_0_INDEX] > 0)
                        {
                            B0 = accumData.AvgAccum[DataSet.Ensemble.BEAM_0_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_0_INDEX];       // Beam 0 Average
                        }

                        // Set results
                        B0 *= scale;
                        result[DataSet.Ensemble.BEAM_0_INDEX] = B0;
                    }

                    // Check if it has at least 2 beams
                    if (numBeams > 1)
                    {
                        float B1 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_1_INDEX] > 0)
                        {
                            B1 = accumData.AvgAccum[DataSet.Ensemble.BEAM_1_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_1_INDEX];       // Beam 1 Average
                        }

                        // Set Results
                        B1 *= scale;
                        result[DataSet.Ensemble.BEAM_1_INDEX] = B1;
                    }

                    // Check if it has a least 3 beams
                    if (numBeams > 2)
                    {
                        float B2 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_2_INDEX] > 0)
                        {
                            B2 = accumData.AvgAccum[DataSet.Ensemble.BEAM_2_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_2_INDEX];       // Beam 2 Average
                        }

                        // Set Results
                        B2 *= scale;
                        result[DataSet.Ensemble.BEAM_2_INDEX] = B2;
                    }

                    // Check if it has a least 4 beams
                    if (numBeams > 3)
                    {
                        float B3 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_3_INDEX] > 0)
                        {
                            B3 = accumData.AvgAccum[DataSet.Ensemble.BEAM_3_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_3_INDEX];       // Beam 3 Average
                        }

                        // Set Result
                        B3 *= scale;
                        result[DataSet.Ensemble.BEAM_3_INDEX] = B3;
                    }
                }

                return(result);
            }
示例#6
0
            /// <summary>
            /// Accumulate the data.
            /// </summary>
            /// <returns>The accumulated data.</returns>
            private AccumulatedBtData Accumulate(List <float[]> input)
            {
                AccumulatedBtData result = new AccumulatedBtData();

                if (input.Count > 0)
                {
                    // Get the number of bins and beams
                    // These values should be the same for all the accumulated data
                    float[] firstData = input.First();
                    int     numBeams  = firstData.GetLength(0);

                    // Create arrays to accumulate the data
                    float[] avgAccum = new float[numBeams];
                    int[]   avgCount = new int[numBeams];

                    // Accumulate the data for each accumulate array
                    for (int x = 0; x < input.Count; x++)
                    {
                        // Get the data from the list
                        float[] data = input[x];

                        // Accumulate the values
                        for (int bin = 0; bin < data.GetLength(0); bin++)
                        {
                            // Beam 0
                            if (numBeams > 0)
                            {
                                float b0 = data[DataSet.Ensemble.BEAM_0_INDEX];
                                if (b0 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_0_INDEX] += b0;
                                    avgCount[DataSet.Ensemble.BEAM_0_INDEX]++;
                                }
                            }

                            // Beam 1
                            if (numBeams > 1)
                            {
                                float b1 = data[DataSet.Ensemble.BEAM_1_INDEX];
                                if (b1 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_1_INDEX] += b1;
                                    avgCount[DataSet.Ensemble.BEAM_1_INDEX]++;
                                }
                            }

                            // Beam 2
                            if (numBeams > 2)
                            {
                                float b2 = data[DataSet.Ensemble.BEAM_2_INDEX];
                                if (b2 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_2_INDEX] += b2;
                                    avgCount[DataSet.Ensemble.BEAM_2_INDEX]++;
                                }
                            }

                            // Beam 3
                            if (numBeams > 3)
                            {
                                float b3 = data[DataSet.Ensemble.BEAM_3_INDEX];
                                if (b3 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_3_INDEX] += b3;
                                    avgCount[DataSet.Ensemble.BEAM_3_INDEX]++;
                                }
                            }
                        }
                    }

                    // Set the accumulated data
                    result.AvgAccum = avgAccum;
                    result.AvgCount = avgCount;
                }

                return(result);
            }
示例#7
0
            /// <summary>
            /// Average all the given accumulated data.  This will then multiple a
            /// scale value to the averaged data.
            /// </summary>
            /// <param name="accumData">Accumulated values.</param>
            /// <returns>Array with the averaged and scaled value.</returns>
            /// <param name="scale">Scale value to multiply to the averaged value.</param>
            protected float[] AverageData(AccumulatedBtData accumData, float scale = 1.0f)
            {
                // Create an array, if no data is accumulated, null will be retruned
                float[] result = null;

                if (accumData.AvgAccum != null && accumData.AvgCount != null)
                {
                    // Create the results array based off the accumulated values
                    result = new float[accumData.AvgAccum.GetLength(0)];

                    int numBeams = accumData.AvgCount.GetLength(0);

                    // Check if it has at least 1 beams
                    if (numBeams > 0)
                    {
                        // Calculate the average values
                        float B0 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_0_INDEX] > 0)
                        {
                            B0 = accumData.AvgAccum[DataSet.Ensemble.BEAM_0_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_0_INDEX];       // Beam 0 Average
                        }

                        // Set results
                        B0 *= scale;
                        result[DataSet.Ensemble.BEAM_0_INDEX] = B0;
                    }

                    // Check if it has at least 2 beams
                    if (numBeams > 1)
                    {
                        float B1 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_1_INDEX] > 0)
                        {
                            B1 = accumData.AvgAccum[DataSet.Ensemble.BEAM_1_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_1_INDEX];       // Beam 1 Average
                        }

                        // Set Results
                        B1 *= scale;
                        result[DataSet.Ensemble.BEAM_1_INDEX] = B1;
                    }

                    // Check if it has a least 3 beams
                    if (numBeams > 2)
                    {
                        float B2 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_2_INDEX] > 0)
                        {
                            B2 = accumData.AvgAccum[DataSet.Ensemble.BEAM_2_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_2_INDEX];       // Beam 2 Average
                        }

                        // Set Results
                        B2 *= scale;
                        result[DataSet.Ensemble.BEAM_2_INDEX] = B2;
                    }

                    // Check if it has a least 4 beams
                    if (numBeams > 3)
                    {
                        float B3 = 0.0f;
                        if (accumData.AvgCount[DataSet.Ensemble.BEAM_3_INDEX] > 0)
                        {
                            B3 = accumData.AvgAccum[DataSet.Ensemble.BEAM_3_INDEX] / accumData.AvgCount[DataSet.Ensemble.BEAM_3_INDEX];       // Beam 3 Average
                        }

                        // Set Result
                        B3 *= scale;
                        result[DataSet.Ensemble.BEAM_3_INDEX] = B3;
                    }
                }

                return result;
            }
示例#8
0
            /// <summary>
            /// Accumulate the data.
            /// </summary>
            /// <returns>The accumulated data.</returns>
            private AccumulatedBtData Accumulate(List<float[]> input)
            {
                AccumulatedBtData result = new AccumulatedBtData();

                if (input.Count > 0)
                {
                    // Get the number of bins and beams
                    // These values should be the same for all the accumulated data
                    float[] firstData = input.First();
                    int numBeams = firstData.GetLength(0);

                    // Create arrays to accumulate the data
                    float[] avgAccum = new float[numBeams];
                    int[] avgCount = new int[numBeams];

                    // Accumulate the data for each accumulate array
                    for (int x = 0; x < input.Count; x++)
                    {
                        // Get the data from the list
                        float[] data = input[x];

                        // Accumulate the values
                        for (int bin = 0; bin < data.GetLength(0); bin++)
                        {
                            // Beam 0
                            if (numBeams > 0)
                            {
                                float b0 = data[DataSet.Ensemble.BEAM_0_INDEX];
                                if (b0 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_0_INDEX] += b0;
                                    avgCount[DataSet.Ensemble.BEAM_0_INDEX]++;
                                }
                            }

                            // Beam 1
                            if (numBeams > 1)
                            {
                                float b1 = data[DataSet.Ensemble.BEAM_1_INDEX];
                                if (b1 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_1_INDEX] += b1;
                                    avgCount[DataSet.Ensemble.BEAM_1_INDEX]++;
                                }
                            }

                            // Beam 2
                            if (numBeams > 2)
                            {
                                float b2 = data[DataSet.Ensemble.BEAM_2_INDEX];
                                if (b2 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_2_INDEX] += b2;
                                    avgCount[DataSet.Ensemble.BEAM_2_INDEX]++;
                                }
                            }

                            // Beam 3
                            if (numBeams > 3)
                            {
                                float b3 = data[DataSet.Ensemble.BEAM_3_INDEX];
                                if (b3 != DataSet.Ensemble.BAD_VELOCITY)
                                {
                                    avgAccum[DataSet.Ensemble.BEAM_3_INDEX] += b3;
                                    avgCount[DataSet.Ensemble.BEAM_3_INDEX]++;
                                }
                            }
                        }
                    }

                    // Set the accumulated data
                    result.AvgAccum = avgAccum;
                    result.AvgCount = avgCount;
                }

                return result;
            }