updated with standard NLMS
This commit is contained in:
		
							parent
							
								
									4d70cb8261
								
							
						
					
					
						commit
						b79b26d1a3
					
				
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -114,6 +114,10 @@ namespace NMLS_Graphisch
 | 
			
		|||
            switch (comboBox_algorithem.SelectedItem.ToString())
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                case "standard NLMS":
 | 
			
		||||
                    series = standardNLMS();
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case "local mean":
 | 
			
		||||
                    series = localMean();
 | 
			
		||||
                    break;
 | 
			
		||||
| 
						 | 
				
			
			@ -163,6 +167,125 @@ namespace NMLS_Graphisch
 | 
			
		|||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*---------------------------------------------------
 | 
			
		||||
         *  standardNLMS()
 | 
			
		||||
         * 
 | 
			
		||||
         *  the algorithem for the standard NLMS
 | 
			
		||||
         *  
 | 
			
		||||
         *  returns a array of Series with the error and prediction for
 | 
			
		||||
         *  displaying in a chart
 | 
			
		||||
         * 
 | 
			
		||||
         *---------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
        Series[] standardNLMS()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            int x_count = 0;
 | 
			
		||||
            double[] x_error = new double[NumberOfSamples];
 | 
			
		||||
            x_error[0] = 0;
 | 
			
		||||
 | 
			
		||||
            /* Inizilazing series for the main chart */
 | 
			
		||||
            Series standardNLMSError = new Series("Standard NLMS Error");
 | 
			
		||||
            Series standardNLMSPredict = new Series("Standard NLMS Prediction");
 | 
			
		||||
            standardNLMSError.ChartType = SeriesChartType.Spline;
 | 
			
		||||
            standardNLMSPredict.ChartType = SeriesChartType.Spline;
 | 
			
		||||
 | 
			
		||||
            /* Main while loop for the prediction and learing */
 | 
			
		||||
 | 
			
		||||
            while (x_count < NumberOfSamples - 1)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0;
 | 
			
		||||
                int _arrayLength = (x_count > windowSize) ? windowSize : x_count;
 | 
			
		||||
 | 
			
		||||
                double x_pred = 0.0;
 | 
			
		||||
 | 
			
		||||
                double[] x_array = _x;
 | 
			
		||||
                double x_actual = _x[x_count];
 | 
			
		||||
 | 
			
		||||
                /* Prediction algorithem */
 | 
			
		||||
 | 
			
		||||
                for (int i = 1; i < _arrayLength; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    x_pred += (w[i, x_count] * (x_array[x_count - i]));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* If output is checked a file is produced with prediction, actual and the error */
 | 
			
		||||
                if (checkBox_output.Checked)
 | 
			
		||||
                {
 | 
			
		||||
                    File.AppendAllText("standardNLMS.txt",
 | 
			
		||||
                   String.Format("{0}. X_pred {1}\n", x_count, x_pred),
 | 
			
		||||
                   Encoding.UTF8);
 | 
			
		||||
 | 
			
		||||
                    File.AppendAllText("standardNLMS.txt",
 | 
			
		||||
                        String.Format("{0}. X_actual {1}\n", x_count, x_actual),
 | 
			
		||||
                        Encoding.UTF8);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* Calculating the error */
 | 
			
		||||
                x_error[x_count] = x_actual - x_pred;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                double x_square = 0;
 | 
			
		||||
 | 
			
		||||
                /* Output */
 | 
			
		||||
                if (checkBox_output.Checked)
 | 
			
		||||
                {
 | 
			
		||||
                    File.AppendAllText("standardNLMS.txt",
 | 
			
		||||
                    String.Format("{0}. X_error {1}\n\n", x_count, x_error[x_count]),
 | 
			
		||||
                    Encoding.UTF8);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* Calulating the LMS value */
 | 
			
		||||
                for (int i = 1; i < _arrayLength; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    x_square += Math.Pow(x_array[x_count - i], 2);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* x_square == 0.0, drives to undefined weights therefor we set it to 1 */
 | 
			
		||||
 | 
			
		||||
                if (x_square == 0.0)
 | 
			
		||||
                    x_square = 1.0;
 | 
			
		||||
 | 
			
		||||
                /* Learning algorithem */
 | 
			
		||||
                for (int i = 1; i < _arrayLength; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * (x_array[x_count - i] / x_square);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* Printing error and prediction on the series */
 | 
			
		||||
 | 
			
		||||
                standardNLMSError.Points.AddXY(x_count, x_error[x_count]);
 | 
			
		||||
                standardNLMSPredict.Points.AddXY(x_count, x_pred);
 | 
			
		||||
 | 
			
		||||
                x_count += 1;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Calculating the avearage of the error and the variance of the error */
 | 
			
		||||
            double mittel = x_error.Where(d => !double.IsNaN(d)).Skip(windowSize).Sum() / x_error.Length;
 | 
			
		||||
            double varianz = 0.0;
 | 
			
		||||
            foreach (double x_e in x_error.Skip(windowSize))
 | 
			
		||||
            {
 | 
			
		||||
                if (!double.IsNaN(x_e))
 | 
			
		||||
                    varianz += Math.Pow(x_e - mittel, 2);
 | 
			
		||||
            }
 | 
			
		||||
            varianz /= x_error.Length;
 | 
			
		||||
 | 
			
		||||
            /* Displayes both on labels */
 | 
			
		||||
            label3.Text = mittel.ToString();
 | 
			
		||||
            label5.Text = varianz.ToString();
 | 
			
		||||
 | 
			
		||||
            /* Output the result */
 | 
			
		||||
            if (checkBox_output.Checked)
 | 
			
		||||
            {
 | 
			
		||||
                File.AppendAllText("results_standardNLMS.txt",
 | 
			
		||||
                        String.Format("Squared variance(x_error): {0}\n Average(x_error): {1}\n\n", varianz, mittel),
 | 
			
		||||
                        Encoding.UTF8);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return new Series[] { standardNLMSPredict, standardNLMSError };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*---------------------------------------------------
 | 
			
		||||
         *  localMean()
 | 
			
		||||
         * 
 | 
			
		||||
| 
						 | 
				
			
			@ -253,7 +376,7 @@ namespace NMLS_Graphisch
 | 
			
		|||
                /* Learning algorithem */
 | 
			
		||||
                for (int i = 1; i < _arrayLength; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((x_array[x_count - i] - x_middle) / x_square);
 | 
			
		||||
                    w[i, x_count+1] = w[i, x_count] + learnrate * x_error[x_count] * ((x_array[x_count - i] - x_middle) / x_square);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                /* Printing error and prediction on the series */
 | 
			
		||||
| 
						 | 
				
			
			@ -626,6 +749,9 @@ namespace NMLS_Graphisch
 | 
			
		|||
                    Bitmap img = new Bitmap(openFileDialog.FileName);
 | 
			
		||||
                    pixel_array = new double[img.Width * img.Height];
 | 
			
		||||
 | 
			
		||||
                    Console.WriteLine("imgWidth: {0}", img.Width);
 | 
			
		||||
                    Console.WriteLine("imgHeight: {0}", img.Height);
 | 
			
		||||
 | 
			
		||||
                    for (int i = 1; i < img.Width; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int j = 1; j < img.Height; j++)
 | 
			
		||||
| 
						 | 
				
			
			@ -636,7 +762,7 @@ namespace NMLS_Graphisch
 | 
			
		|||
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Console.WriteLine("pixle_array length: {0}", pixel_array.Length);
 | 
			
		||||
                    _x = pixel_array;
 | 
			
		||||
 | 
			
		||||
                    /* Recreating the weights with the new size of NumberOfSamples */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue