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: // Parabolica 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: 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 != 2 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //Construir segunda señal si es necesario if (cbOperacion.SelectedIndex == 2 | cbOperacion.SelectedIndex == 4) { switch (cbTipoSeñal_2.SelectedIndex) { case 0: // Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //Senoidal double amplitud = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtAmplitud.Text); double fase = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtFase.Text ); double frecuencia = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtFrecuencia.Text ); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: string rutaArchivo = ((ConfiguracionAudio) (panelConfiguracion_2.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ñal_2.SelectedIndex != 2 && 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( ((OperacionEscalaAmplitud) (panelConfiguracionOperacion. Children[0])).txtFactorEscala .Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: double factorDesplazamiento = double.Parse(((DesplazamientoAmplitud)(panelConfiguracionOperacion.Children[0])) .txtFactorDesplazamiento.Text); señalResultante = Señal.desAmplitud(señal, factorDesplazamiento); break; case 2: señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: double factorExponencial = double.Parse(((OperacionEscalaExponencial)(panelConfiguracionOperacion.Children[0])) .txtFactorExponente.Text); señalResultante = Señal.escalaExponencial(señal, factorExponencial); break; case 4: señalResultante = Señal.adicionarSeñales(señal, segundaSeñal); break; case 5: //Transf. de Fourier señalResultante = Señal.transformadaFourier(señal); break; default: señalResultante = null; break; } /////AQUI ME QUEDE //Operador ternario //Evalua condicion. Si si y Si no //Elige entre la primera y la resultante double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; //Elige entre la mas grande de la 1ra y resultante y la segunda if (segundaSeñal != null) { amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica_2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.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 == 5) { int indeceMaximo = 0; for (int i = 0; i < (señalResultante.Muestras.Count / 2); i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indeceMaximo].Y) { indeceMaximo = i; } } lblHertz.Text = ((indeceMaximo * frecuenciaMuestreo) / (señal.Muestras.Count)).ToString("N") + "Hz"; } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); lblLimiteInferiorResultante.Text = "-" + amplitudMaxima.ToString("F"); //Original plnEjeX.Points.Clear(); plnEjeX.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima) ); plnEjeX.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima) ); //Resultado plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima))); plnEjeXResultante.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //ver el cambio de como afecto la escala de la grafica //Original plnEjeY.Points.Clear(); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima * -1, tiempoInicial, amplitudMaxima)); //Resultado plnEjeYResultante.Points.Clear(); plnEjeYResultante.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima) ); plnEjeYResultante.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima * -1, tiempoInicial, amplitudMaxima) ); }
private void BtnGraficar_Click(object sender, RoutedEventArgs e) { //Convertidor de texto a int double tiempoInicial = double.Parse(txtTiempoInicial.Text); double tiempoFinal = double.Parse(txtTiempoFinal.Text); double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text); //SeñalSenoidal señal = new SeñalSenoidal(amplitud, fase, frecuencia); //SeñalParabolica señal = new SeñalParabolica(); //FuncionSigno señal = new FuncionSigno(); Señal señal; //polimorfismo: que clases actuen como otras clases 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: //Exponencial double alpha = double.Parse(((ConfigurcionExponencial)(panelConfiguracion.Children[0])).txtAlpha.Text); señal = new SeñalExponencial(alpha); break; case 3: //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 != 3 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //Construir segunda señal si es necesario if(cbOperacion.SelectedIndex ==2) { switch (cbTipoSeñal_2.SelectedIndex) { case 0: //Parabólica segundaSeñal = new SeñalParabolica(); break; case 1: //Senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFrecuencia.Text); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //Exponencial double alpha = double.Parse(((ConfigurcionExponencial)(panelConfiguracion_2.Children[0])).txtAlpha.Text); segundaSeñal = new SeñalExponencial(alpha); break; case 3: //Audio string rutaArchivo = ((ConfiguracionAudio)(panelConfiguracion_2.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ñal_2.SelectedIndex !=2 && 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(((OperacionEscalaAmplitud)(panelConfiguracionOperacion.Children[0])).txtFactorEscala.Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: //Desplazamiento de amplitud double cantidadDesplazamiento = double.Parse(((DesplazamientoAmplitud)(panelConfiguracionOperacion.Children[0])).txtCantidadDesplazamiento.Text); señalResultante = Señal.desplazamientoAmplitud(señal, cantidadDesplazamiento); break; case 2: //Multiplicacion de señales señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //Escala resultante double exponente = double.Parse(((OperacionEscalaExponencial)(panelConfiguracionOperacion.Children[0])).txtExponente.Text); señalResultante = Señal.escalaExponencial(señal, exponente); break; case 4: //Transformada de Fourier señalResultante = Señal.transformadaFourier(señal); break; default: señalResultante = null; break; } //Operador ternario //Si una es mayor que la otra o sino-> 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 primera y la resultante y la segunda amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica_2.Points.Clear(); if(segundaSeñal!=null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } } //Ayuda a recorrer todas las estructuras de datos que hay foreach (Muestra muestra in señal.Muestras) { plnGraficaResultante.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } foreach (Muestra muestra in señalResultante.Muestras) { plnGrafica.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } //Se recorre todo el arreglo de la transformada de fourier para encontrar el indice if(cbOperacion.SelectedIndex == 4) { //Se obtiene la frecuencia baja de la tecla int indiceMaximo = 0; int indiceInicial = (int)((690.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); int indiceFinal= (int)((950.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); for (int i=indiceInicial; i<indiceFinal; i++) { if(señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximo].Y) { indiceMaximo = i; } } double frecuencia = (double)(indiceMaximo * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; //Pasar numero a "texto" lblHertzBaja.Text = frecuencia.ToString("N") + "Hz"; //Se obtiene la frecuencia alta de la tecla int indiceMaximoAlta = 0; int indiceInicialAlta = (int)((1200.0 * (double)señalResultante.Muestras.Count) / (double)señalResultante.FrecuenciaMuestreo); int indiceFinalAlta = (int)((1482.0 * (double)señalResultante.Muestras.Count) / (double)señalResultante.FrecuenciaMuestreo); for (int i = indiceInicialAlta; i < indiceFinalAlta; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximoAlta].Y) { indiceMaximoAlta = i; } } double frecuenciaAlta = (double)(indiceMaximoAlta * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHertzAlta.Text = frecuenciaAlta.ToString("N") + "Hz"; //Se obtiene el numero de la tecla double tecla; if(frecuencia <= 690.0 && frecuenciaAlta <= ) { tecla = 1; lblTecla.Text = tecla.ToString("N"); } if(frecuencia ) } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteInferiorResultante.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); //Entre más muestras haya, más calidad en la gráfica hay <<Original>> plnEjeX.Points.Clear(); plnEjeX.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); //Esto es para hacer la linea del eje de las X plnEjeX.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //Esto es para hacer la linea del eje de las X //<<Resultante>> plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //Eje Y <<Original>> plnEjeY.Points.Clear(); plnEjeY.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add(adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); //<<Resultante>> 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 || 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: //Parabolica 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: //Exponencial double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txtAlpha.Text); señal = new SeñalExponencial(alpha); break; case 3: //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 != 3 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.constriurSeñal(); } //Construir segunda señal si es necesario if (cbOperacion.SelectedIndex == 2) { switch (cbTipoSeñal_2.SelectedIndex) { case 0: //Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFrecuencia.Text); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //Exponencial double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion_2.Children[0])).txtAlpha.Text); segundaSeñal = new SeñalExponencial(alpha); break; case 3: //Audio string rutaArchivo = ((ConfiguracionAudio)(panelConfiguracion_2.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ñal_2.SelectedIndex != 3 && segundaSeñal != null) { segundaSeñal.TiempoInicial = tiempoInicial; segundaSeñal.TiempoFinal = tiempoFinal; segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo; segundaSeñal.constriurSeñal(); } } switch (cbOperacion.SelectedIndex) { case 0: //Escala de amplitud double factorEscala = double.Parse(((OperacionEscalaAmplitud) (panelConfiguracionOperacion.Children[0])).txtFactorEscala.Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: //Desplazamiento de Amplitud double cantidadDesplazamiento = double.Parse(((OperacionDesplazamientoAmplitud) (panelConfiguracionOperacion.Children[0])).txtDesplazamiento.Text); señalResultante = Señal.desplazarAmplitud(señal, cantidadDesplazamiento); break; case 2: //Multiplicacion de señales señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //Escala exponencial double exponente = double.Parse(((OperacionEscalaExponencial) (panelConfiguracionOperacion.Children[0])).txtExponente.Text); señalResultante = Señal.escalaExponencial(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(); plnGrafica_2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.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 indiceMaximo = 0; int indiceInicial = (int)((690.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); int indiceFinal = (int)((950.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); //Frecuancia Baja for (int i = indiceInicial; i < indiceFinal; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximo].Y) { indiceMaximo = i; } } double frecuencia = (double)(indiceMaximo * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHz_Baja.Text = frecuencia.ToString("N") + " Hz"; //Frecuencia Alta int indiceInicialAlta = (int)((1200.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); int indiceFinalAlta = (int)((1482.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); int indiceMaximoAlta = 0; for (int i = indiceInicialAlta; i < indiceFinalAlta; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximoAlta].Y) { indiceMaximoAlta = i; } } double frecuenciaAlta = (double)(indiceMaximoAlta * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHz_Alta.Text = frecuenciaAlta.ToString("N") + " Hz"; if (frecuencia > 695 && frecuencia < 699) { if (frecuenciaAlta > 1207 && frecuenciaAlta < 1211) { lblTecla.Text = "1"; } if (frecuenciaAlta > 1334 && frecuenciaAlta < 1338) { lblTecla.Text = "2"; } if (frecuenciaAlta > 1475 && frecuenciaAlta < 1479) { lblTecla.Text = "3"; } } if (frecuencia > 768 && frecuencia < 772) { if (frecuenciaAlta > 1207 && frecuenciaAlta < 1211) { lblTecla.Text = "4"; } if (frecuenciaAlta > 1334 && frecuenciaAlta < 1338) { lblTecla.Text = "5"; } if (frecuenciaAlta > 1475 && frecuenciaAlta < 1479) { lblTecla.Text = "6"; } } if (frecuencia > 850 && frecuencia < 854) { if (frecuenciaAlta > 1207 && frecuenciaAlta < 1211) { lblTecla.Text = "7"; } if (frecuenciaAlta > 1334 && frecuenciaAlta < 1338) { lblTecla.Text = "8"; } if (frecuenciaAlta > 1475 && frecuenciaAlta < 1479) { lblTecla.Text = "9"; } } if (frecuencia > 939 && frecuencia < 943) { if (frecuenciaAlta > 1207 && frecuenciaAlta < 1211) { lblTecla.Text = "*"; } if (frecuenciaAlta > 1334 && frecuenciaAlta < 1338) { lblTecla.Text = "0"; } if (frecuenciaAlta > 1475 && frecuenciaAlta < 1479) { lblTecla.Text = "#"; } } } //Original lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.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)); //Resultado lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); lblLimiteInferiorResultado.Text = "-" + amplitudMaxima.ToString("F"); plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoInicial, 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 señalResultante; switch (cbTipoSeñal.SelectedIndex) { case 0: // Parabolica 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: 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 != 2 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } switch (cbOperacion.SelectedIndex) { case 0: //Escala de amplitud double factorEscala = double.Parse( ((OperacionEscalaAmplitud) (panelConfiguracionOperacion. Children[0])).txtFactorEscala .Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: //Desplazamiento de amplitud double cantidadDesplazamiento = double.Parse( ((OperacionDesplazamientoAmplitud) (panelConfiguracionOperacion. Children[0])).txtCantidadDesplazamiento .Text); señalResultante = Señal.desplazarAmplitud(señal, cantidadDesplazamiento); break; case 3: //Escala exponencial double exponente = double.Parse( ((OperacionEscalaExponencial) (panelConfiguracionOperacion. Children[0])).txtExponente.Text); señalResultante = Señal.escalaExponencial( señal, exponente); break; default: señalResultante = null; break; } double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.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) ); } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteInferiorResultante.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); //Original plnEjeX.Points.Clear(); plnEjeX.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima) ); plnEjeX.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima) ); //Resultado plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //Original plnEjeY.Points.Clear(); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add( adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); //Resultado 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: // Parabolica 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: 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 != 2 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //Construir segunda señal si es necesario if (cbOperacion.SelectedIndex == 2) { switch (cbTipoSeñal_2.SelectedIndex) { case 0: // Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //Senoidal double amplitud = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtAmplitud.Text); double fase = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtFase.Text ); double frecuencia = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtFrecuencia.Text ); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: string rutaArchivo = ((ConfiguracionAudio) (panelConfiguracion_2.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ñal_2.SelectedIndex != 2 && 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( ((OperacionEscalaAmplitud) (panelConfiguracionOperacion. Children[0])).txtFactorEscala .Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: //Desplazamiento de amplitud double cantidadDesplazamiento = double.Parse( ((OperacionDesplazamientoAmplitud) (panelConfiguracionOperacion. Children[0])).txtCantidadDesplazamiento .Text); señalResultante = Señal.desplazarAmplitud(señal, cantidadDesplazamiento); break; case 2: //multiplicacion de señales señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //Escala exponencial double exponente = double.Parse( ((OperacionEscalaExponencial) (panelConfiguracionOperacion. Children[0])).txtExponente.Text); señalResultante = Señal.escalaExponencial( 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 1ra 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(); plnGrafica_2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.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 indiceMaximo = 0; int indiceMaximo2 = 0; for (int i = 0; i < señalResultante.Muestras.Count / 2; i++) { if (señalResultante.Muestras[i].X > señalResultante.TiempoFinal / 8 && señalResultante.Muestras[i].X < señalResultante.TiempoFinal / 2) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximo].Y) { indiceMaximo = i; } } if (señalResultante.Muestras[i].X < señalResultante.TiempoFinal / 8) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximo2].Y) { indiceMaximo2 = i; } } } double frecuencia = (double)(indiceMaximo * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; double frecuencia_2 = (double)(indiceMaximo2 * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHertz.Text = frecuencia.ToString("N") + " Hz"; lblHertz_2.Text = frecuencia_2.ToString("N") + " Hz"; string numero = "#"; if (frecuencia_2 > 670 && frecuencia_2 < 720) { if (frecuencia > 1150 && frecuencia < 1250) { numero = "1"; } if (frecuencia > 1250 && frecuencia < 1400) { numero = "2"; } if (frecuencia > 1400) { numero = "3"; } } if (frecuencia_2 > 720 && frecuencia_2 < 810) { if (frecuencia > 1150 && frecuencia < 1250) { numero = "4"; } if (frecuencia > 1250 && frecuencia < 1400) { numero = "5"; } if (frecuencia > 1400) { numero = "6"; } } if (frecuencia_2 > 810 && frecuencia_2 < 950) { if (frecuencia > 1150 && frecuencia < 1250) { numero = "7"; } if (frecuencia > 1250 && frecuencia < 1400) { numero = "8"; } if (frecuencia > 1400) { numero = "9"; } } if (frecuencia_2 > 900) { if (frecuencia > 1150 && frecuencia < 1250) { numero = "*"; } if (frecuencia > 1250 && frecuencia < 1400) { numero = "0"; } if (frecuencia > 1400) { numero = "#"; } } lblNumero.Text = numero.ToString(); } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteInferiorResultante.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); //Original plnEjeX.Points.Clear(); plnEjeX.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima) ); plnEjeX.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima) ); //Resultado plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //Original plnEjeY.Points.Clear(); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add( adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); //Resultado 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; switch (cbTipoSeñal.SelectedIndex) { case 0: // Parabolica 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: string rutaArchivo = ((ConfiguracionAudio) (panelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); break; default: señal = null; break; } if (cbTipoSeñal.SelectedIndex != 2 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } double amplitudMaxima = señal.AmplitudMaxima; plnGrafica.Points.Clear(); foreach (Muestra muestra in señal.Muestras) { plnGrafica.Points.Add( adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima) ); } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.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)); }
private void BtnGraficar_Click(object sender, RoutedEventArgs e) { double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text); double tiempoInicial = double.Parse(txtTiempoInicial.Text); double tiempoFinal = double.Parse(txtTiempoFinal.Text); //FuncionSigno señal = new FuncionSigno(); Señal señal; //Segunda señal Señal señalResultante; switch (CbTipoSenal.SelectedIndex) { case 0: señal = new SeñalParabolica(); break; case 1: //Casteo y luego parse 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: double alpha = double.Parse( ((ConfiguaracionExponencial)(panelConfiguracion.Children[0])).txtAlpha.Text); señal = new SeñalExponencial(alpha); break; case 3: 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 (CbTipoSenal.SelectedIndex != 3 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeña(); } switch (cbOperacion.SelectedIndex) { case 0: //Escala de Amplitud double factorEscala = double.Parse(((OperacionEscalaAmplitud)(panelConfiguracion.Children[0])).txtFactorEscala.Text); señalResultante = new Señal.escalarAmplitud(señal, factorEscala); break; default: señalResultante = null; break; } double amplitudMaxima = señal.AmplitudMaxima; double amplitudMaximaResultado = señalResultante.AmplitudMaxima; plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); //para graficar los puntos 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, amplitudMaximaResultado)); } lbllimiteSuperior.Text = amplitudMaxima.ToString("F"); lbllimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lbllimiteSuperiorResultante.Text = amplitudMaximaResultado.ToString("F"); lbllimiteInferiorResulstante.Text = "-" + amplitudMaximaResultado.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 * -1, tiempoInicial, amplitudMaxima)); //RESULTADO /2da grafica/ plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaximaResultado)); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaximaResultado)); plnEjeYResultante.Points.Clear(); plnEjeYResultante.Points.Add(adaptarCoordenadas(0.0, amplitudMaximaResultado, tiempoInicial, amplitudMaximaResultado)); plnEjeYResultante.Points.Add(adaptarCoordenadas(0.0, amplitudMaximaResultado * -1, tiempoInicial, amplitudMaximaResultado)); }
private void btnGraficar_Click(object sender, RoutedEventArgs e) { /*double amplitud = * double.Parse(txtAmplitud.Text); * double fase = * double.Parse(txtFase.Text); * double frecuencia = * double.Parse(txtFrecuencia.Text);*/ 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 (cbTipoSenal.SelectedIndex) { case 0: //parabolica señal = new SenalParabolica(); 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: //exponencial double alfa = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txtAlfa.Text); señal = new SeñalExponencial(alfa); break; case 3: //audio string rutaArchivo = ((ConfiguracionSeñalAudio)(panelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = señal.TiempoInicial.ToString(); txtTiempoFinal.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (cbTipoSenal.SelectedIndex != 3 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //construir segunda señal si es necesario if (cbOperacion.SelectedIndex == 2) { switch (cbTipoSenal_2.SelectedIndex) { case 0: //parabolica segundaSeñal = new SenalParabolica(); break; case 1: //senoidal double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtAmplitud.Text); double fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFase.Text); double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFrecuencia.Text); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //exponencial double alfa = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion_2.Children[0])).txtAlfa.Text); segundaSeñal = new SeñalExponencial(alfa); break; case 3: //audio string rutaArchivo = ((ConfiguracionSeñalAudio)(panelConfiguracion_2.Children[0])).txtRutaArchivo.Text; segundaSeñal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = segundaSeñal.TiempoInicial.ToString(); txtTiempoFinal.Text = segundaSeñal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (cbTipoSenal_2.SelectedIndex != 2 && 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(((OperacionEscalaAmplitud)(panelConfiguracionOperacion.Children[0])).txtFactorEscala.Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: // desplazamiento double desplazamiento = double.Parse(((OperacionDesplazamiento)(panelConfiguracionOperacion.Children[0])).txtDesplazamiento.Text); señalResultante = Señal.desplazamintoSeñales(señal, desplazamiento); break; case 2: //multiplicacion de señales señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //escala exponencial double exponente = double.Parse(((OperacionEscalaExponencial)(panelConfiguracionOperacion.Children[0])).txtExponente.Text); señalResultante = Señal.escalarExponencial(señal, exponente); break; case 4: //transformada de fourier señalResultante = Señal.transformadaFourier(señal); break; default: señalResultante = null; break; } // elije entre la primera y la resultante double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; if (segundaSeñal != null) { //elije entre la mas grande de la primera y resultante y la segunda amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } double periodoMuestreo = 1.0 / frecuenciaMuestreo; plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica_2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.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 indiceMaximo = 0; for (int i = 0; i < señalResultante.Muestras.Count / 2; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indiceMaximo].Y) { indiceMaximo = i; } } double frecuencia = (double)(indiceMaximo * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHerz.Text = frecuencia.ToString("N") + " Hz"; } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteInferiorResultado.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultado.Text = amplitudMaxima.ToString("F"); // original plnEjeX.Points.Clear(); plnEjeX.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeX.Points.Add(adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //resultado plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima)); plnEjeXResultante.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)); //resultado 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(txtbox_tiempoInicial.Text); double tiempoFinal = double.Parse(txtbox_tiempoFinal.Text); double muestro = double.Parse(txtbox_muestreo.Text); Señal señal; Señal segundaSeñal = null; Señal señalResultante; switch (CbTipoSeñal.SelectedIndex) { case 0: //Parabolica señal = new SeñalParabolica(); break; case 1: //Senoidal double amplitud = double.Parse( ((ConfiguracionSeñalSenoidal)(PanelConfiguracion.Children[0])).txtbox_amplitud.Text ); double fase = double.Parse( ((ConfiguracionSeñalSenoidal)(PanelConfiguracion.Children[0])).txtbox_fase.Text ); double frecuencia = double.Parse( ((ConfiguracionSeñalSenoidal)(PanelConfiguracion.Children[0])).txtbox_frecuencia.Text ); señal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //Exponencial double alpha = double.Parse( ((ConfiguracionSeñalExponencial)(PanelConfiguracion.Children[0])).txt_alpha.Text ); señal = new SeñalExponencial(alpha); break; case 3: //Audio string rutaArchivo = ((ConfiguracionSeñalAudio)(PanelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); txtbox_tiempoInicial.Text = señal.TiempoInicial.ToString(); txtbox_tiempoFinal.Text = señal.TiempoFinal.ToString(); txtbox_muestreo.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (CbTipoSeñal.SelectedIndex != 3) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = muestro; señal.construirSeñal(); } //Construir segunda señal si es necesario if (CbOperacion.SelectedIndex == 2) { switch (CbTipoSeñal_2.SelectedIndex) { case 0: //Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //Senoidal double amplitud = double.Parse( ((ConfiguracionSeñalSenoidal)(PanelConfiguracion_2.Children[0])).txtbox_amplitud.Text ); double fase = double.Parse( ((ConfiguracionSeñalSenoidal)(PanelConfiguracion_2.Children[0])).txtbox_fase.Text ); double frecuencia = double.Parse( ((ConfiguracionSeñalSenoidal)(PanelConfiguracion_2.Children[0])).txtbox_frecuencia.Text ); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: //Exponencial double alpha = double.Parse( ((ConfiguracionSeñalExponencial)(PanelConfiguracion_2.Children[0])).txt_alpha.Text ); señal = new SeñalExponencial(alpha); break; case 3: //Audio string rutaArchivo = ((ConfiguracionSeñalAudio)(PanelConfiguracion_2.Children[0])).txtRutaArchivo.Text; segundaSeñal = new SeñalAudio(rutaArchivo); txtbox_tiempoInicial.Text = señal.TiempoInicial.ToString(); txtbox_tiempoFinal.Text = señal.TiempoFinal.ToString(); txtbox_muestreo.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (CbTipoSeñal_2.SelectedIndex != 2 && segundaSeñal != null) { segundaSeñal.TiempoInicial = tiempoInicial; segundaSeñal.TiempoFinal = tiempoFinal; segundaSeñal.FrecuenciaMuestreo = muestro; segundaSeñal.construirSeñal(); } } switch (CbOperacion.SelectedIndex) { case 0: //Escala de amplitud double factorEscala = double.Parse( ((OperacionEscalaAmplitud)(PanelConfiguracionOperacion.Children[0])).txtFactorEscala.Text ); señalResultante = Señal.escalaAmplitud(señal, factorEscala); break; case 1: //Desplazamiento de amplitud double factorDesplazamiento = double.Parse( ((OperacionDesplazamientoAmplitud)(PanelConfiguracionOperacion.Children[0])).txtFactorDesplazamiento.Text ); señalResultante = Señal.desplazamientoAmplitud(señal, factorDesplazamiento); break; case 2: //Multiplicacion de señales señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: //Escala exponencial double exponente = double.Parse( ((OperacionEscalaExponencial)(PanelConfiguracionOperacion.Children[0])).txtExponente.Text); señalResultante = Señal.escalaExponencial(señal, exponente); break; default: señalResultante = null; break; } //Elige entre la 1ra y la resultante double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica_2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, tiempoFinal)); } //Elige entre la mas grande de la 1ra y resultante y la segunda amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } foreach (Muestra muestra in señal.Muestras) { plnGrafica.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } if (CbOperacion.SelectedIndex != -1) { foreach (Muestra muestra in señalResultante.Muestras) { plnGraficaResultante.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } } //original lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); //resultado lblLimiteInferiorResultante.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); //original 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)); //resultado 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 Graficar_Click(object sender, RoutedEventArgs e) { tiempoinicial = double.Parse(txtTiempo_Inicial.Text); tiempofinal = double.Parse(txtTiempo_Final.Text); frecuenciamuestreo = double.Parse(txtFrecuenciaMuestreo.Text); /* * senoidal = new SeñalSenoidal(amplitud, fase, frecuencia); */ Señal señal; Señal señalResultante; Señal segundaseñal = null; switch (CbTipoSeñal.SelectedIndex) { case 0: // Parabolica bolica señal = new SeñalParabolica(); break; case 1: //Senoidal amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtAmplitud.Text); fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtFase.Text); frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txtFrecuencia.Text); señal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txtAlpha.Text); señal = new SeñalExponencial(alpha); break; case 3: string rutaArchivo = ((ControlAudio)(panelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); txtTiempo_Inicial.Text = señal.TiempoInicial.ToString(); txtTiempo_Final.Text = señal.TiempoInicial.ToString(); txtFrecuenciaMuestreo.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (CbTipoSeñal.SelectedIndex != 3 && señal != null) { señal.TiempoInicial = tiempoinicial; señal.TiempoFinal = tiempofinal; señal.FrecuenciaMuestreo = frecuenciamuestreo; } señal.construirSeñal(); /* * SeñalSigno signo = new SeñalSigno(); */ if (cbOperacion.SelectedIndex == 2) { switch (CbTipoSeñal_2.SelectedIndex) { case 0: // Parabolica bolica segundaseñal = new SeñalParabolica(); break; case 1: //Senoidal amplitud = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtAmplitud.Text); fase = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFase.Text); frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_2.Children[0])).txtFrecuencia.Text); segundaseñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion_2.Children[0])).txtAlpha.Text); segundaseñal = new SeñalExponencial(alpha); break; case 3: string rutaArchivo = ((ControlAudio)(panelConfiguracion_2.Children[0])).txtRutaArchivo.Text; segundaseñal = new SeñalAudio(rutaArchivo); txtTiempo_Inicial.Text = segundaseñal.TiempoInicial.ToString(); txtTiempo_Final.Text = segundaseñal.TiempoInicial.ToString(); txtFrecuenciaMuestreo.Text = segundaseñal.FrecuenciaMuestreo.ToString(); break; default: segundaseñal = null; break; } if (CbTipoSeñal_2.SelectedIndex != 2 && 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 factorDesplaze = double.Parse(((OperacionDesplazamientoAmplitud)panelConfiguracionOperacion.Children[0]).txtDesplazamientoAmplitud.Text); señalResultante = Señal.desplazarAmplitud(señal, factorDesplaze); break; case 1: double factorEscala = double.Parse(((OperacionEscalaAmplitud)panelConfiguracionOperacion.Children[0]).txtFactorEscala.Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 2: señalResultante = Señal.multiplicarseñales(señal, segundaseñal); break; case 3: double factorExponencual = double.Parse(((OperacionEscalaExponencial)panelConfiguracionOperacion.Children[0]).txtFactorExponencial.Text); señalResultante = Señal.escalarExponencial(señal, factorExponencual); break; case 4: señalResultante = Señal.transformadaFourirer(señal); break; default: señalResultante = null; break; } //Elige entre la 1ra y la resultante. double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; //Elige entre la mas grande de la 1ra , resultante y la segunda. if (cbOperacion.SelectedIndex == 2) { amplitudMaxima = (amplitudMaxima > segundaseñal.AmplitudMaxima) ? amplitudMaxima : segundaseñal.AmplitudMaxima; } plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica_2.Points.Clear(); foreach (Muestra muestra1 in señal.Muestras) { plnGrafica.Points.Add(adaptarCoordenadas(muestra1.X, muestra1.Y, tiempoinicial, amplitudMaxima)); } foreach (Muestra muestra in señalResultante.Muestras) { plnGraficaResultante.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoinicial, amplitudMaxima)); } if (segundaseñal != null) { foreach (Muestra muestra in segundaseñal.Muestras) { plnGrafica_2.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoinicial, amplitudMaxima)); } } if (cbOperacion.SelectedIndex == 4) { int indicemaximo = 0; int indiceinicial = (int)((690.0f * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); int indicefinal = (int)((950.0f * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); for (int i = indiceinicial; i < indicefinal; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indicemaximo].Y) { indicemaximo = i; } } double frecuencia = (double)(indicemaximo * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHertz_Baja.Text = frecuencia.ToString("N") + "Hz"; // Obtener la frecuencia alta int indicemaximoalta = 0; int indiceinicialalta = (int)((1200.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); int indicefinalalta = (int)((1482.0 * (double)(señalResultante.Muestras.Count)) / señalResultante.FrecuenciaMuestreo); for (int i = indiceinicialalta; i < indicefinalalta; i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indicemaximoalta].Y) { indicemaximoalta = i; } } double frecuenciaAlta = (double)(indicemaximoalta * señalResultante.FrecuenciaMuestreo) / (double)señalResultante.Muestras.Count; lblHertz_Baja.Text = frecuencia.ToString("N") + "Hz"; } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteInferiorResultado.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultado.Text = amplitudMaxima.ToString("F"); pnlEjeX.Points.Clear(); pnlEjeX.Points.Add(adaptarCoordenadas(tiempoinicial, 0.0, tiempoinicial, amplitudMaxima)); pnlEjeX.Points.Add(adaptarCoordenadas(tiempofinal, 0.0, tiempoinicial, amplitudMaxima)); pnlEjeY.Points.Clear(); pnlEjeY.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoinicial, amplitudMaxima)); pnlEjeY.Points.Add(adaptarCoordenadas(0.0, -amplitudMaxima, tiempoinicial, amplitudMaxima)); pnlEjeXResultante.Points.Clear(); pnlEjeXResultante.Points.Add(adaptarCoordenadas(tiempoinicial, 0.0, tiempoinicial, amplitudMaxima)); pnlEjeXResultante.Points.Add(adaptarCoordenadas(tiempofinal, 0.0, tiempoinicial, amplitudMaxima)); pnlEjeYResultante.Points.Clear(); pnlEjeYResultante.Points.Add(adaptarCoordenadas(0.0, amplitudMaxima, tiempoinicial, amplitudMaxima)); pnlEjeYResultante.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)); }