private void BtnGraficar_Click(object sender, RoutedEventArgs e) { double tiempoInicial = double.Parse(txtTiempoInicial.Text); double tiempoFinal = double.Parse(txtTiempoFinal.Text); double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text); Señal señal; Señal segundaSeñal = null; Señal señalResultante; switch (cbTipoSeñal.SelectedIndex) { case 0: //parabólica señal = new SeñalParabolica(); break; case 1: //senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtFrecuencia.Text); señal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //función signo señal = new FuncionSigno(); break; case 3: //exponencial alfa double alfa = double.Parse(((ConfiguracionSeñalExponencialAlfa)(panelConfiguracion.Children[0])).txtAlfa.Text); señal = new Exponencial_Alfa(alfa); break; case 4: //audio string rutaArchivo = ((ConfiguracionAudio)(panelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = señal.TiempoInicial.ToString(); txtTiempoFinal.Text = señal.TiempoFinal.ToString(); txtFrecuenciaMuestreo.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (cbTipoSeñal.SelectedIndex != 4 && señal != null) { señal.TiempoFinal = tiempoFinal; señal.TiempoInicial = tiempoInicial; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //construir segunda señal if (cbOperacion.SelectedIndex == 2 || cbOperacion.SelectedIndex == 4) { switch (cbTipoSeñal2.SelectedIndex) { case 0: //Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion2.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion2.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion2.Children[0])).txtFrecuencia.Text); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //función signo segundaSeñal = new FuncionSigno(); break; case 3: //Exponencial double alfa = double.Parse(((ConfiguracionSeñalExponencialAlfa)(panelConfiguracion2.Children[0])).txtAlfa.Text); segundaSeñal = new Exponencial_Alfa(alfa); break; case 4: //Audio string rutaArchivo = ((ConfiguracionAudio)(panelConfiguracion2.Children[0])).txtRutaArchivo.Text; segundaSeñal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = segundaSeñal.TiempoInicial.ToString(); txtTiempoFinal.Text = segundaSeñal.TiempoFinal.ToString(); txtFrecuenciaMuestreo.Text = segundaSeñal.FrecuenciaMuestreo.ToString(); break; default: segundaSeñal = null; break; } if (cbTipoSeñal2.SelectedIndex != 4 && segundaSeñal != null) { segundaSeñal.TiempoInicial = tiempoInicial; segundaSeñal.TiempoFinal = tiempoFinal; segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo; segundaSeñal.construirSeñal(); } } switch (cbOperacion.SelectedIndex) { case 0: //escala de amplitud double factorEscala = double.Parse(((ConfiguracionOperacionEscalaAmplitud)(panelConfiguracionOperacion.Children[0])).txtFactorEscala.Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: //desplazamiento double cantidadDesplazamiento = double.Parse(((ConfiguracionOperacionDesplazamiento)(panelConfiguracionOperacion.Children[0])).txtCantidadDesplazamiento.Text); señalResultante = Señal.desplazamientoAmplitud(señal, cantidadDesplazamiento); break; case 2: //multiplicacion señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //escala exponencial double exponente = double.Parse(((ConfiguracionOperacionEscalaExponencial)(panelConfiguracionOperacion).Children[0]).txtExponente.Text); señalResultante = Señal.escalaExponenecial(señal, exponente); break; case 4: //limite superior señalResultante = Señal.limiteSuperior(señal, segundaSeñal); break; default: señalResultante = null; break; } //Elige entre la primera y la resultante double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; if (segundaSeñal != null) { //elige entre la mas grande de la 1ra y resultante y la segunda amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); foreach (Muestra muestra in señal.Muestras) { plnGrafica.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } foreach (Muestra muestra in señalResultante.Muestras) { plnGraficaResultante.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } lblAmplitudSuperior.Text = amplitudMaxima.ToString("F"); lblAmplitudInferior.Text = "-" + amplitudMaxima.ToString("F"); lblAmplitudResultanteSuperior.Text = amplitudMaxima.ToString("F"); lblAmplitudResultanteInferior.Text = "-" + amplitudMaxima.ToString("F"); plnEjeX.Points.Clear(); plnEjeX.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeX.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Clear(); plnEjeY.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add(adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); plnEjeYResultante.Points.Clear(); plnEjeYResultante.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeYResultante.Points.Add(adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); }
private void BtnGraficar_Click(object sender, RoutedEventArgs e) { double tiempoInicial = double.Parse(txtTiempoInicial.Text); double tiempoFinal = double.Parse(txtTiempoFinal.Text); double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text); Señal señal; Señal segundaSeñal = null; Señal señalResultante; switch (cbTipoSeñal.SelectedIndex) { case 0: //parabólica señal = new SeñalParabolica(); break; case 1: //senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtFrecuencia.Text); señal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //función signo señal = new FuncionSigno(); break; case 3: //exponencial alfa double alfa = double.Parse(((ConfiguracionSeñalExponencialAlfa)(panelConfiguracion.Children[0])).txtAlfa.Text); señal = new Exponencial_Alfa(alfa); break; case 4: //audio string rutaArchivo = ((ConfiguracionAudio)(panelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = señal.TiempoInicial.ToString(); txtTiempoFinal.Text = señal.TiempoFinal.ToString(); txtFrecuenciaMuestreo.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (cbTipoSeñal.SelectedIndex != 4 && señal != null) { señal.TiempoFinal = tiempoFinal; señal.TiempoInicial = tiempoInicial; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //construir segunda señal if (cbOperacion.SelectedIndex == 2) { switch (cbTipoSeñal2.SelectedIndex) { case 0: //Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion2.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion2.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion2.Children[0])).txtFrecuencia.Text); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //función signo segundaSeñal = new FuncionSigno(); break; case 3: //Exponencial double alfa = double.Parse(((ConfiguracionSeñalExponencialAlfa)(panelConfiguracion2.Children[0])).txtAlfa.Text); segundaSeñal = new Exponencial_Alfa(alfa); break; case 4: //Audio string rutaArchivo = ((ConfiguracionAudio)(panelConfiguracion2.Children[0])).txtRutaArchivo.Text; segundaSeñal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = segundaSeñal.TiempoInicial.ToString(); txtTiempoFinal.Text = segundaSeñal.TiempoFinal.ToString(); txtFrecuenciaMuestreo.Text = segundaSeñal.FrecuenciaMuestreo.ToString(); break; default: segundaSeñal = null; break; } if (cbTipoSeñal2.SelectedIndex != 4 && segundaSeñal != null) { segundaSeñal.TiempoInicial = tiempoInicial; segundaSeñal.TiempoFinal = tiempoFinal; segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo; segundaSeñal.construirSeñal(); } } switch (cbOperacion.SelectedIndex) { case 0: //escala de amplitud double factorEscala = double.Parse(((ConfiguracionOperacionEscalaAmplitud)(panelConfiguracionOperacion.Children[0])).txtFactorEscala.Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: //desplazamiento double cantidadDesplazamiento = double.Parse(((ConfiguracionOperacionDesplazamiento)(panelConfiguracionOperacion.Children[0])).txtCantidadDesplazamiento.Text); señalResultante = Señal.desplazamientoAmplitud(señal, cantidadDesplazamiento); break; case 2: //multiplicacion señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //escala exponencial double exponente = double.Parse(((ConfiguracionOperacionEscalaExponencial)(panelConfiguracionOperacion).Children[0]).txtExponente.Text); señalResultante = Señal.escalaExponenecial(señal, exponente); break; case 4: //transformada de Fourier señalResultante = Señal.transformadaFourier(señal); break; default: señalResultante = null; break; } //Elige entre la primera y la resultante double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; if (segundaSeñal != null) { //elige entre la mas grande de la 1ra y resultante y la segunda amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica2.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } } foreach (Muestra muestra in señal.Muestras) { plnGrafica.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } foreach (Muestra muestra in señalResultante.Muestras) { plnGraficaResultante.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } if (cbOperacion.SelectedIndex == 4) { int indiceMaximo1 = 0; int indiceMaximo2 = 0; //indices para recorrer la frecuencia baja int indiceInicial = (int)(690.0 * (double)(señal.Muestras.Count) / señalResultante.FrecuenciaMuestreo); int indiceFinal = (int)(950.0 * (double)(señal.Muestras.Count) / señalResultante.FrecuenciaMuestreo); int indiceAltaInicial = (int)(1200.0 * (double)(señal.Muestras.Count) / señalResultante.FrecuenciaMuestreo); int indiceAltaFinal = (int)(1482.0 * (double)(señal.Muestras.Count) / señalResultante.FrecuenciaMuestreo); for (int i = indiceInicial; i <= indiceFinal; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximo1].Y) { indiceMaximo1 = i; } } for (int j = indiceAltaInicial; j <= indiceAltaFinal; j++) { if (señalResultante.Muestras[j].Y > señalResultante.Muestras[indiceMaximo2].Y) { indiceMaximo2 = j; } } double frecuencia = (double)(indiceMaximo1 * señal.FrecuenciaMuestreo / señalResultante.Muestras.Count); double frecuencia2 = (double)(indiceMaximo2 * señal.FrecuenciaMuestreo / señalResultante.Muestras.Count); lblHertzBaja.Text = frecuencia.ToString("N") + " Hz"; lblHertzAlta.Text = frecuencia2.ToString("N") + " Hz"; //imprimir la tecla if (frecuencia >= 695 && frecuencia <= 698) { if (frecuencia2 >= 1207 && frecuencia2 <= 1210) { lblTecla.Text = "1"; } else if (frecuencia2 >= 1335 && frecuencia2 <= 1338) { lblTecla.Text = "2"; } else if (frecuencia2 >= 1475 && frecuencia2 <= 1480) { lblTecla.Text = "3"; } } else if (frecuencia >= 768 && frecuencia <= 775) { if (frecuencia2 >= 1207 && frecuencia2 <= 1210) { lblTecla.Text = "4"; } else if (frecuencia2 >= 1335 && frecuencia2 <= 1338) { lblTecla.Text = "5"; } else if (frecuencia2 >= 1475 && frecuencia2 <= 1480) { lblTecla.Text = "6"; } } else if (frecuencia >= 849 && frecuencia <= 855) { if (frecuencia2 >= 1207 && frecuencia2 <= 1210) { lblTecla.Text = "7"; } else if (frecuencia2 >= 1335 && frecuencia2 <= 1338) { lblTecla.Text = "8"; } else if (frecuencia2 >= 1475 && frecuencia2 <= 1480) { lblTecla.Text = "9"; } } else if (frecuencia >= 938 && frecuencia <= 945) { if (frecuencia2 >= 1207 && frecuencia2 <= 1210) { lblTecla.Text = "*"; } else if (frecuencia2 >= 1335 && frecuencia2 <= 1338) { lblTecla.Text = "0"; } else if (frecuencia2 >= 1475 && frecuencia2 <= 1480) { lblTecla.Text = "#"; } } } lblAmplitudSuperior.Text = amplitudMaxima.ToString("F"); lblAmplitudInferior.Text = "-" + amplitudMaxima.ToString("F"); lblAmplitudResultanteSuperior.Text = amplitudMaxima.ToString("F"); lblAmplitudResultanteInferior.Text = "-" + amplitudMaxima.ToString("F"); plnEjeX.Points.Clear(); plnEjeX.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeX.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Clear(); plnEjeY.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add(adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); plnEjeYResultante.Points.Clear(); plnEjeYResultante.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeYResultante.Points.Add(adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); }