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); }
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(); }
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(); }
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); }
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); }
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); }
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); }