示例#1
0
        public static double CalculatePSNR(SygnalDyskretny signal1, SygnalDyskretny signal2)
        {
            double max = 0;

            List <Complex> val1 = signal1.y;
            List <Complex> val2 = signal2.y;

            for (int i = 0; i < val1.Count; i++)
            {
                if (val1[i].Real > max)
                {
                    max = val1[i].Real;
                }
            }

            double mse    = CalculateMSE(signal1, signal2);
            double result = 10 * Math.Log10(max / mse);

            if (Double.IsNaN(result))
            {
                return(0);
            }

            return(result);
        }
示例#2
0
        private void LiczStatystyki_Click(object sender, RoutedEventArgs e)
        {
            SygnalDyskretny przedRekonstrukcja = new SygnalDyskretny();

            przedRekonstrukcja.x = new List <System.Numerics.Complex>();
            przedRekonstrukcja.y = new List <System.Numerics.Complex>();

            SygnalDyskretny poRekonstrukcji = new SygnalDyskretny();

            poRekonstrukcji.x = new List <System.Numerics.Complex>();
            poRekonstrukcji.y = new List <System.Numerics.Complex>();

            przedRekonstrukcja.A = A.A;
            poRekonstrukcji.A    = zrekonstruowany.A;

            double maxX = A.x[0].Real;
            double minX = A.x[0].Real;

            for (int i = 0; i < A.x.Count; i++)
            {
                if (A.x[i].Real > maxX)
                {
                    maxX = A.x[i].Real;
                }
                if (A.x[i].Real < minX)
                {
                    minX = A.x[i].Real;
                }
            }

            A.d = maxX - minX;

            //double czestotliwosc = 50;
            //int ilePunktow = (int)(czestotliwosc * A.d);
            int coIle = (int)(A.n / 400);

            for (int i = 0; i < A.n; i = i + coIle)
            {
                przedRekonstrukcja.x.Add(A.x[i]);
                przedRekonstrukcja.y.Add(A.y[i]);

                poRekonstrukcji.x.Add(zrekonstruowany.x[i]);
                poRekonstrukcji.y.Add(zrekonstruowany.y[i]);
            }

            przedRekonstrukcja.x.Add(A.x[A.x.Count - 1]);
            przedRekonstrukcja.y.Add(A.y[A.y.Count - 1]);

            poRekonstrukcji.x.Add(zrekonstruowany.x[zrekonstruowany.x.Count - 1]);
            poRekonstrukcji.y.Add(zrekonstruowany.y[zrekonstruowany.y.Count - 1]);

            przedRekonstrukcja.PodzielPrzezAmplitude();
            poRekonstrukcji.PodzielPrzezAmplitude();

            MSE.Text  = SignalComparer.CalculateMSE(przedRekonstrukcja, poRekonstrukcji).ToString();
            SNR.Text  = SignalComparer.CalculateSNR(przedRekonstrukcja, poRekonstrukcji).ToString();
            PSNR.Text = SignalComparer.CalculatePSNR(przedRekonstrukcja, poRekonstrukcji).ToString();
            MD.Text   = SignalComparer.CalculateMD(przedRekonstrukcja, poRekonstrukcji).ToString();
        }
示例#3
0
 private void policzHistogramB(SygnalDyskretny B)
 {
     policzHistogram(B);
     SredniaSygnal1.Text     = B.LiczSrednia().ToString();
     SredniaBezwSygnal1.Text = B.LiczSredniaBezwzgledna().ToString();
     SkutecznaSygnal1.Text   = B.LiczWartoscSkuteczna().ToString();
     WariancjaSygnal1.Text   = B.LiczWariancje().ToString();
     MocSredniaSygnal1.Text  = B.LiczSredniaMoc().ToString();
 }
示例#4
0
        private void policzB(SygnalDyskretny B)
        {
            ScatterSeries mySeries = new ScatterSeries();

            mySeries.Title = "Sygnał";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty = new List <KeyValuePair <double, double> >();
            for (int i = 0; i < B.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(B.x[i].Real, B.y[i].Real));
            }
            mySeries.ItemsSource = punkty;
            AmplitudaRzeczywista.Series.Add(mySeries);
        }
示例#5
0
        public static double CalculateMSE(SygnalDyskretny signal1, SygnalDyskretny signal2)
        {
            double result = 0;

            List <Complex> val1 = signal1.y;
            List <Complex> val2 = signal2.y;

            for (int i = 0; i < val1.Count; i++)
            {
                result += (val1[i].Real - val2[i].Real) * (val1[i].Real - val2[i].Real);
            }

            var toReturn = result / val1.Count;

            if (Double.IsNaN(toReturn))
            {
                return(0);
            }

            return(toReturn);
        }
示例#6
0
        public static double CalculateSNR(SygnalDyskretny signal1, SygnalDyskretny signal2)
        {
            double result = 0;

            List <Complex> val1 = signal1.y;
            List <Complex> val2 = signal2.y;

            for (int i = 0; i < val1.Count; i++)
            {
                result += val1[i].Real * val2[i].Real;
            }

            var    mse      = CalculateMSE(signal1, signal2);
            double toReturn = 10 * Math.Log10(result / mse);

            if (Double.IsNaN(toReturn))
            {
                return(0);
            }

            return(toReturn);
        }
示例#7
0
        public static double CalculateMD(SygnalDyskretny signal1, SygnalDyskretny signal2)
        {
            List <Complex> val1 = signal1.y;
            List <Complex> val2 = signal2.y;

            double max = 0;

            for (int i = 0; i < val1.Count; i++)
            {
                double tmp = Math.Abs(val1[i].Real - val2[i].Real);
                if (tmp > max)
                {
                    max = tmp;
                }
            }

            if (Double.IsNaN(max))
            {
                return(0);
            }

            return(max);
        }