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));
        }
Exemplo n.º 5
0
        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)
                );
        }
Exemplo n.º 6
0
        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)
                );
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 10
0
        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));
        }