예제 #1
0
        private void btnRealizarOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado = null;
            switch (cbTipoOperaacion.SelectedIndex)
            {
            case 0:     //Suma
                señalResultado =
                    Señal.sumar(señal, segundaSeñal);

                break;

            case 1:     //Multiplicacion
                señalResultado = Señal.multiplicar(señal, segundaSeñal);
                break;

            case 2:
                señalResultado = Señal.convolucionar(señal, segundaSeñal);
                break;

            case 3:
                señalResultado = Señal.correlacion(señal, segundaSeñal);
                break;

            default:
                break;
            }

            señalResultado.actualizarAmplitudMaxima();
            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = señalResultado.AmplitudMaxima.ToString("F");
            lblAmplitudMazimaNegativaY_Resultado.Text = "-" + señalResultado.AmplitudMaxima.ToString("F");
            if (señalResultado != null)
            {
                foreach (Muestra muestra in señalResultado.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width,
                                                             (muestra.Y / señalResultado.AmplitudMaxima) * (((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2))
                                                   );
                }
            }



            //EJE X
            plnEjexResultado.Points.Clear();
            //Punto de Principio
            plnEjexResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto del fin
            plnEjexResultado.Points.Add(new Point((señalResultado.TiempoFinal - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (scrContenedor_Resultado.Height / 2)));
            //

            //EJE Y
            plnEjeyResultado.Points.Clear();
            //Punto de Principio
            plnEjeyResultado.Points.Add(new Point((0 - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, señalResultado.AmplitudMaxima * (((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto del fin
            plnEjeyResultado.Points.Add(new Point((0 - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, -señalResultado.AmplitudMaxima * (((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //
        }
예제 #2
0
        private void btnTransformadaFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = transformada.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (transformada != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y /
                                                                                                                                        transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) +
                                                             (scrContenedor_Resultado.Height / 2)));
                }
                double valorMaximo  = 0;
                int    indiceMaximo = 0;
                int    indiceActual = 0;

                foreach (Muestra muestra in transformada.Muestras)
                {
                    if (muestra.Y > valorMaximo)
                    {
                        valorMaximo  = muestra.Y;
                        indiceMaximo = indiceActual;
                    }
                    indiceActual++;
                    if (indiceActual > (double)transformada.Muestras.Count / 2.0)
                    {
                        break;
                    }
                }
                double frecuenciaFundamental = (double)indiceMaximo * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;

                lblFrecuenciaFundamental.Text = frecuenciaFundamental.ToString() + " Hz";
            }



            plnEjeXResultado.Points.Clear();
            //Punto del principio
            plnEjeXResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeXResultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width,
                                                  (scrContenedor_Resultado.Height / 2)));

            plnEjeYResultado.Points.Clear();
            //Punto del principio
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (-transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
        }
        private void btn_TransformadaDeFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();


            // Limpieza de polylines
            plnGrafica_Resultado.Points.Clear();

            // Impresión de la amplitud máxima en los labels de la ventana.
            lbl_AmplitudMaxima_Resultado.Text = transformada.AmplitudMaxima.ToString("F");
            lbl_AmplitudMinima_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            if (señal != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGrafica_Resultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y / transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2) - 30) * -1 + (scrContenedor_Resultado.Height / 2))));
                }
            }


            // Línea del Eje X
            plnEjeX_Resultado.Points.Clear();
            plnEjeX_Resultado.Points.Add(new Point(0, scrContenedor_Resultado.Height / 2));
            plnEjeX_Resultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height / 2));

            // Línea del Eje Y
            plnEjeY_Resultado.Points.Clear();
            plnEjeY_Resultado.Points.Add(new Point((-transformada.TiempoInicial) * scrContenedor_Resultado.Width, 0));
            plnEjeY_Resultado.Points.Add(new Point((-transformada.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height));
        }
        private void btnRealizarOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado = null;
            switch (cbTipoOperacion.SelectedIndex)
            {
            case 0:     //Suma
                señalResultado = Señal.sumar(señal, segundaSeñal);
                break;

            case 1:     //Multiplicacion
                señalResultado = Señal.multiplicar(señal, segundaSeñal);
                break;

            case 2:     //Convolcion
                señalResultado = Señal.convolucionar(señal, segundaSeñal);
                break;

            case 3:     //Convolcion
                señalResultado = Señal.convolucionados(señal, segundaSeñal);
                break;

            default:
                break;
            }

            señalResultado.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = señalResultado.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + señalResultado.AmplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (señalResultado != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in señalResultado.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y /
                                                                                                                                          señalResultado.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) +
                                                             (scrContenedor.Height / 2)));
                }
            }


            plnEjeXResultado.Points.Clear();
            //Punto del principio
            plnEjeXResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeXResultado.Points.Add(new Point((señalResultado.TiempoFinal - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width,
                                                  (scrContenedor_Resultado.Height / 2)));

            plnEjeYResultado.Points.Clear();
            //Punto del principio
            plnEjeYResultado.Points.Add(new Point((0 - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (señal.AmplitudMaxima *
                                                                                                                       ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto del final-
            plnEjeYResultado.Points.Add(new Point((0 - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (-señal.AmplitudMaxima *
                                                                                                                       ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
        }
        private void btnRealizarOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado = null;
            switch (cbTipoOperacion.SelectedIndex)
            {
            case 0:     //Suma
                //los metodos estaticos no necesitan una instancia
                señalResultado = Señal.sumar(señal, segundaSeñal);
                break;

            case 1:     //multiplicacion
                señalResultado = Señal.multiplicar(señal, segundaSeñal);
                break;

            case 2:     //convolucion
                señalResultado = Señal.convolucionar(señal, segundaSeñal);
                break;

            default:
                break;
            }

            //se actualiza la amplitud maxima del resultado
            señalResultado.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            //cambia los valores de la etiqueta
            //La F es que da el formato para redondear a 2 decimales, la funcion ToString puede recibir un parametro que es el que va a decidir en que formato va a estar,existen varios parametros
            lblAmplitudMaximaPositivaY_Resultado.Text = señalResultado.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + señalResultado.AmplitudMaxima.ToString("F");

            //hacerlo si la señal no es nula
            if (señalResultado != null)
            {
                //recorrer una coleccion o arreglo
                //muestra toma el valor de señal.muestra en cada recorrido del ciclo
                foreach (Muestra muestra in señalResultado.Muestras)
                {
                    //se evalua la señal, luego se ajusta y de ahi se agrega el punto
                    plnGraficaResultado.Points.Add(new Point((muestra.X - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y / señalResultado.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
                }
            }

            //Graficando el eje de X
            plnEjeXResultado.Points.Clear();
            //Punto de inicio.
            plnEjeXResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto de fin.
            plnEjeXResultado.Points.Add(new Point((señalResultado.TiempoFinal - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (scrContenedor_Resultado.Height / 2)));

            //Graficando el eje de Y
            plnEjeYResultado.Points.Clear();
            //Punto de inicio.
            plnEjeYResultado.Points.Add(new Point((0 - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto de fin.
            plnEjeYResultado.Points.Add(new Point((0 - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (-1 * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
        }
예제 #6
0
        private void btnRealizarOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado = null;
            switch (cbOperacion.SelectedIndex)
            {
            case 0:     //suma
                señalResultado = Señal.sumar(señal, segundaSeñal);
                break;

            case 1:     //Multiplicacion
                señalResultado = Señal.multiplicar(señal, segundaSeñal);
                break;

            case 2:     //Convolucion
                señalResultado = Señal.convolucionar(señal, segundaSeñal);
                break;

            case 3:     //Correlación
                señalResultado = Señal.correlacion(señal, segundaSeñal);
                break;

            default:
                break;
            }

            plnResultado.Points.Clear();

            //actualizar amplitud maxima
            señalResultado.actualizarAmplitudMaxima();

            if (señalResultado != null)
            {
                //recorrer una coleccion o arreglo
                foreach (Muestra muestra in señalResultado.muestras)
                {
                    plnResultado.Points.Add(new Point((muestra.x - señalResultado.tiempoInicial) * scrContenedorResultado.Width, (muestra.y / señalResultado.amplitudMaxima * ((scrContenedorResultado.Height / 2.0) - 30) * -1) + (scrContenedorResultado.Height / 2)));
                }
            }


            lblAmplitudMaximaY_Resultado.Text         = señalResultado.amplitudMaxima.ToString();
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + señalResultado.amplitudMaxima.ToString();



            plnEjeXResultado.Points.Clear();
            //punto del principio
            plnEjeXResultado.Points.Add(new Point(0, scrContenedor.Height / 2));
            //punto del fin
            plnEjeXResultado.Points.Add(new Point((señalResultado.tiempoFinal - señalResultado.tiempoInicial) * scrContenedorResultado.Width, scrContenedorResultado.Height / 2));

            plnEjeYResultado.Points.Clear();
            //punto del principio
            plnEjeYResultado.Points.Add(new Point((0 - señalResultado.tiempoInicial) * scrContenedorResultado.Width, (1 * ((scrContenedorResultado.Height / 2.0) - 30) * -1) + (scrContenedorResultado.Height / 2)));
            //punto del fin
            plnEjeYResultado.Points.Add(new Point((0 - señalResultado.tiempoInicial) * scrContenedorResultado.Width, (-1 * ((scrContenedorResultado.Height / 2.0) - 30) * -1) + (scrContenedorResultado.Height / 2)));
        }
        private void BotonOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado = null;
            switch (cb_TipoOperacion.SelectedIndex)
            {
            // Suma
            case 0:
                señalResultado = Señal.suma(señal, señal_2);
                break;

            // Multiplicación
            case 1:
                señalResultado = Señal.multiplicacion(señal, señal_2);
                break;

            // Convolución
            case 2:
                señalResultado = Señal.convolucion(señal, señal_2);
                break;

            // Correlación
            case 3:
                señalResultado = Señal.correlacion(señal, señal_2);
                break;

            default:
                break;
            }

            // Actualizar
            señalResultado.actualizarAmplitudMaxima();

            // Limpieza de polylines
            plnGrafica_Resultado.Points.Clear();

            // Impresión de la amplitud máxima en los labels de la ventana.
            lbl_AmplitudMaxima_Resultado.Text = señalResultado.AmplitudMaxima.ToString("F");
            lbl_AmplitudMinima_Resultado.Text = "-" + señalResultado.AmplitudMaxima.ToString("F");

            if (señalResultado != null)
            {
                foreach (Muestra muestra in señalResultado.Muestras)
                {
                    plnGrafica_Resultado.Points.Add(new Point((muestra.X - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y / señalResultado.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2) - 30) * -1 + (scrContenedor_Resultado.Height / 2))));
                }
            }

            // Línea del Eje X
            plnEjeX_Resultado.Points.Clear();
            plnEjeX_Resultado.Points.Add(new Point(0, scrContenedor_Resultado.Height / 2));
            plnEjeX_Resultado.Points.Add(new Point((señalResultado.TiempoFinal - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height / 2));

            // Línea del Eje Y
            plnEjeY_Resultado.Points.Clear();
            plnEjeY_Resultado.Points.Add(new Point((-señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, 0));
            plnEjeY_Resultado.Points.Add(new Point((-señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height));
        }
        private void BotonTransformadadeFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();

            // Limpieza de polylines
            plnGrafica_Resultado.Points.Clear();

            // Impresión de la amplitud máxima en los labels de la ventana.
            lbl_AmplitudMaxima_Resultado.Text = transformada.AmplitudMaxima.ToString("F");
            lbl_AmplitudMinima_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            if (transformada != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGrafica_Resultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y / transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2) - 30) * -1 + (scrContenedor_Resultado.Height / 2))));
                }
            }
            double valorMaximo  = 0;
            int    indiceMaximo = 0;
            int    indiceActual = 0;

            foreach (Muestra muestra in transformada.Muestras)
            {
                if (muestra.Y > valorMaximo)
                {
                    valorMaximo  = muestra.Y;
                    indiceMaximo = indiceActual;
                }

                indiceActual++;

                if (indiceActual > ((double)transformada.Muestras.Count / 2))
                {
                    break;
                }
            }

            double frecuenciaFundamental = ((double)indiceMaximo * señal.FrecuenciaMuestreo) / (double)transformada.Muestras.Count;

            lbl_Hz.Text = frecuenciaFundamental.ToString("F") + " HZ";

            // Línea del Eje X
            plnEjeX_Resultado.Points.Clear();
            plnEjeX_Resultado.Points.Add(new Point(0, scrContenedor_Resultado.Height / 2));
            plnEjeX_Resultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height / 2));

            // Línea del Eje Y
            plnEjeY_Resultado.Points.Clear();
            plnEjeY_Resultado.Points.Add(new Point((-transformada.TiempoInicial) * scrContenedor_Resultado.Width, 0));
            plnEjeY_Resultado.Points.Add(new Point((-transformada.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height));
        }
        private void btnRealizarOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado = null;
            switch (cbTipoOperacion.SelectedIndex)
            {
            case 0:    //suma
                señalResultado = Señal.sumar(señal, segundaSeñal);
                break;

            case 1:    //multiplicacion

                break;

            default:
                break;
            }

            // Actualizar
            señalResultado.actualizarAmplitudMaxima();
            plnGraficaResultado.Points.Clear();

            lbl_AmplitudMaxima_Resultado.Text = amplitudMaxima.ToString("F");
            lbl_AmplitudMinima_Resultado.Text = "-" + señalResultado.AmplitudMaxima.ToString("F");

            if (señalResultado != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in señalResultado.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - señalResultado.TiempoInicial) *
                                                             scrContenedor_Resultado.Width, (muestra.Y / señalResultado.AmplitudMaxima *
                                                                                             ((scrContenedor_Resultado.Height / 2) - 30) * -1 + (scrContenedor_Resultado.Height / 2))));
                }
            }

            // Línea del Eje X
            plnEjeXResultado.Points.Clear();
            plnEjeXResultado.Points.Add(new Point(0, scrContenedor.Height / 2));
            plnEjeXResultado.Points.Add(new Point((señalResultado.TiempoFinal - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height / 2));

            // Línea del Eje Y
            plnEjeYResultado.Points.Clear();
            plnEjeYResultado.Points.Add(new Point((-señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, 0));
            plnEjeYResultado.Points.Add(new Point((-señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height));
        }
        private void btnRealizarOperacion_Click(object sender, RoutedEventArgs e)
        {
            señalResultado.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = señalResultado.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + señalResultado.AmplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (señalResultado != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in señalResultado.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - señalResultado.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y /
                                                                                                                                          señalResultado.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) +
                                                             (scrContenedor.Height / 2)));
                }
            }

            double valorMaximo  = 0;
            int    indiceMaximo = 0;
            int    indiceActual = 0;

            foreach (Muestra muestra in señalResultado.Muestras)
            {
                if (muestra.Y > valorMaximo)
                {
                    valorMaximo  = muestra.Y;
                    indiceMaximo = indiceActual;
                }
                indiceActual++;
                if (indiceActual > señalResultado.Muestras.Count / 2.0)
                {
                    break;
                }
                double frecuenciaFundamental = (double)indiceMaximo * señal.FrecuenciaMuestreo / (double)señalResultado.Muestras.Count;
                lblFrecuencia_fundamental.Text = indiceMaximo.ToString() + "Hz";
            }
        }
        private void BotonGraficar_Click(object sender, RoutedEventArgs e)
        {
            var reader = new AudioFileReader(txt_RutaArchivo.Text);

            double tiempoInicial      = 0;
            double tiempoFinal        = reader.TotalTime.TotalSeconds;
            double frecuenciaMuestreo = reader.WaveFormat.SampleRate;

            txt_TiempoInicial.Text        = "0";
            txt_TiempoFinal.Text          = tiempoFinal.ToString();
            txt_FrecuenciaDeMuestreo.Text = frecuenciaMuestreo.ToString();

            señal = new SeñalPersonalizada();

            // Primer Señal
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            // Construir nuestra señal a trávés del archivo de audio
            var    bufferLectura    = new float[reader.WaveFormat.Channels];
            int    muestrasLeidas   = 1;
            double instanteActual   = 0;
            double intervaloMuestra = 1.0 / frecuenciaMuestreo;

            do
            {
                muestrasLeidas = reader.Read(bufferLectura, 0, reader.WaveFormat.Channels);
                if (muestrasLeidas > 0)
                {
                    double max = bufferLectura.Take(muestrasLeidas).Max();
                    señal.Muestras.Add(new Muestra(instanteActual, max));
                }
                instanteActual += intervaloMuestra;
            } while (muestrasLeidas > 0);

            // Actualizar
            señal.actualizarAmplitudMaxima();

            // Definición de la amplitud máxima en función de la señal de mayor amplitud
            amplitudMaxima = señal.AmplitudMaxima;

            // Limpieza de polylines
            plnGrafica.Points.Clear();

            // Impresión de la amplitud máxima en los labels de la ventana.
            lbl_AmplitudMaxima.Text = amplitudMaxima.ToString("F");
            lbl_AmplitudMinima.Text = "-" + amplitudMaxima.ToString("F");

            if (señal != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2) - 30) * -1 + (scrContenedor.Height / 2))));
                }
            }

            // Línea del Eje X
            plnEjeX.Points.Clear();
            plnEjeX.Points.Add(new Point(0, scrContenedor.Height / 2));
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, scrContenedor.Height / 2));

            // Línea del Eje Y
            plnEjeY.Points.Clear();
            plnEjeY.Points.Add(new Point((-tiempoInicial) * scrContenedor.Width, 0));
            plnEjeY.Points.Add(new Point((-tiempoInicial) * scrContenedor.Width, scrContenedor.Height));
        }
        private void btnGraficar_Click(object sender, RoutedEventArgs e)
        {
            var reader = new AudioFileReader(txtRutaArchivo.Text);

            double tiempoInicial      = 0;
            double tiempoFinal        = reader.TotalTime.TotalSeconds;
            double frecuenciaMuestreo = reader.WaveFormat.SampleRate;

            txtFrecuenciaMuestreo.Text = frecuenciaMuestreo.ToString();
            txtTiempoInicial.Text      = "0";
            txtTiempoFinal.Text        = tiempoFinal.ToString();



            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;
            señal.construirSeñalDigital();


            //Construir nuestra señal a traves del archivo audio

            var    bufferLectura    = new float[reader.WaveFormat.Channels];
            int    muestrasLeidas   = 1;
            double instanteActual   = 0;
            double intervaloMuestra = 1.0 / frecuenciaMuestreo;

            do
            {
                muestrasLeidas = reader.Read(bufferLectura, 0, reader.WaveFormat.Channels);
                if (muestrasLeidas > 0)
                {
                    double max = bufferLectura.Take(muestrasLeidas).Max();
                    señal.Muestras.Add(new Muestra(0, max));
                }
                instanteActual += intervaloMuestra;
            } while (muestrasLeidas > 0);

            señal.actualizarAmplitudMaxima();

            amplitudMaxima = señal.AmplitudMaxima;

            plnGrafica.Points.Clear();

            lblAmplitudMaximaY.Text         = amplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY.Text = "-" + amplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (señal != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y /
                                                                                                        amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) +
                                                    (scrContenedor.Height / 2)));
                }
            }

            plnEjeX.Points.Clear();
            //Punto del principio
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del final
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width,
                                         (scrContenedor.Height / 2)));

            plnEjeY.Points.Clear();
            //Punto del principio
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (señal.AmplitudMaxima *
                                                                                     ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //Punto del final
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (-señal.AmplitudMaxima *
                                                                                     ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
        }
        private void btnGraficar_Click(object sender, RoutedEventArgs e)
        {
            //para obtener el valor del text box se usa la propiedad .Text

            double tiempoInicial      = double.Parse(txtTiempoInicial.Text);
            double tiempoFinal        = double.Parse(txtTiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text);


            switch (cbTipoSeñal.SelectedIndex)
            {
            //señal senoidal
            case 0:
                //el primer hijo del panel configuracion es la configuracion senoidal y es de otro tipo (ui collection)asi que se hace un casting y asi se puede acceder a sus propiedades, ademas como txtamplitud es tipo texto se usa parse
                //nota: los hijos son los elementos de los contenedores
                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;

            //rampa
            case 1:
                señal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)panelConfiguracion.Children[0]).txtAlpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default:
                señal = null;
                break;
            }

            //Señal 2
            switch (cbTipoSeñal_SegundaSeñal.SelectedIndex)
            {
            //señal senoidal
            case 0:
                //el primer hijo del panel configuracion es la configuracion senoidal y es de otro tipo (ui collection)asi que se hace un casting y asi se puede acceder a sus propiedades, ademas como txtamplitud es tipo texto se usa parse
                //nota: los hijos son los elementos de los contenedores
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtFrecuencia.Text);

                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            //rampa
            case 1:
                segundaSeñal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)panelConfiguracion_SegundaSeñal.Children[0]).txtAlpha.Text);
                segundaSeñal = new SeñalExponencial(alpha);
                break;

            case 3:
                segundaSeñal = new SeñalRectangular();
                break;

            default:
                segundaSeñal = null;
                break;
            }

            //se establecen los valores para la funcion
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            segundaSeñal.TiempoInicial      = tiempoInicial;
            segundaSeñal.TiempoFinal        = tiempoFinal;
            segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo;


            //se ejecuta la funcion
            señal.construirSeñalDigital();
            segundaSeñal.construirSeñalDigital();

            if ((bool)cbAmplitud.IsChecked)
            {
                //Escalar
                double factorEscala = double.Parse(txtFactorEscalaAmplitud.Text);
                señal.escalar(factorEscala);
            }

            if ((bool)cbDesplazar.IsChecked)
            {
                //Desplazar
                double factorDesplazar = double.Parse(txtFactorDesplazamiento.Text);
                señal.desplazar(factorDesplazar);
            }

            if ((bool)cbTruncar_SegundaSeñal.IsChecked)
            {
                //Truncar
                double factorTruncar = double.Parse(txtFactorTruncar.Text);
                señal.truncar(factorTruncar);
            }

            //Segunda Señal
            if ((bool)cbAmplitud_SegundaSeñal.IsChecked)
            {
                //Escalar
                double factorEscala = double.Parse(txtFactorEscalaAmplitud_SegundaSeñal.Text);
                segundaSeñal.escalar(factorEscala);
            }

            if ((bool)cbDesplazar_SegundaSeñal.IsChecked)
            {
                //Desplazar
                double factorDesplazar = double.Parse(txtFactorDesplazamiento_SegundaSeñal.Text);
                segundaSeñal.desplazar(factorDesplazar);
            }

            if ((bool)cbTruncar_SegundaSeñal.IsChecked)
            {
                //Truncar
                double factorTruncar = double.Parse(txtFactorTruncar_SegundaSeñal.Text);
                segundaSeñal.truncar(factorTruncar);
            }

            //Aqui se toma la amplitud maxima de la señal para poder hacer que se tome el valor de la mayor para que se adapte el panel
            señal.actualizarAmplitudMaxima();
            segundaSeñal.actualizarAmplitudMaxima();
            amplitudMaxima = señal.AmplitudMaxima;

            if (segundaSeñal.AmplitudMaxima > amplitudMaxima)
            {
                amplitudMaxima = segundaSeñal.AmplitudMaxima;
            }

            //cambia los valores de la etiqueta
            //La F es que da el formato para redondear a 2 decimales, la funcion ToString puede recibir un parametro que es el que va a decidir en que formato va a estar,existen varios parametros
            lblAmplitudMaximaPositivaY.Text = amplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY.Text = "-" + amplitudMaxima.ToString("F");

            // limpiar la grafica
            plnGrafica.Points.Clear();
            plnGraficaDos.Points.Clear();

            //hacerlo si la señal no es nula
            if (señal != null)
            {
                //recorrer una coleccion o arreglo
                //muestra toma el valor de señal.muestra en cada recorrido del ciclo
                foreach (Muestra muestra in señal.Muestras)
                {
                    //se evalua la señal, luego se ajusta y de ahi se agrega el punto
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2) - 30) * -1) + (scrContenedor.Height / 2)));
                }
            }
            // hacerlo si la Segunda señal no es nula
            if (segundaSeñal != null)
            {
                //recorrer una coleccion o arreglo
                //muestra toma el valor de señal.muestra en cada recorrido del ciclo
                foreach (Muestra muestra in segundaSeñal.Muestras)
                {
                    //se evalua la señal, luego se ajusta y de ahi se agrega el punto
                    plnGraficaDos.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2) - 30) * -1) + (scrContenedor.Height / 2)));
                }
            }

            //Graficando el eje de X
            plnEjeX.Points.Clear();
            //Punto de inicio.
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto de fin.
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, (scrContenedor.Height / 2)));

            //Graficando el eje de Y
            plnEjeY.Points.Clear();
            //Punto de inicio.
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height));
            //Punto de fin.
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height * -1));
        }
        private void BotonTransformadadeFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();

            // Limpieza de polylines
            plnGrafica_Resultado.Points.Clear();

            // Impresión de la amplitud máxima en los labels de la ventana.
            lbl_AmplitudMaxima_Resultado.Text = transformada.AmplitudMaxima.ToString("F");
            lbl_AmplitudMinima_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            if (transformada != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGrafica_Resultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y / transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2) - 30) * -1 + (scrContenedor_Resultado.Height / 2))));
                }
            }

            int indiceFrecuenciaBaja1 = 0;
            int indiceFrecuenciaBaja2 = 0;
            int indiceFrecuenciaAlta1 = 0;
            int indiceFrecuenciaAlta2 = 0;

            indiceFrecuenciaBaja1 = 680 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
            indiceFrecuenciaBaja2 = 1000 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
            indiceFrecuenciaAlta1 = 1200 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
            indiceFrecuenciaAlta2 = 1500 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;

            double valorMaximoFrecuenciaBaja  = 0;
            int    indiceMaximoFrecuenciaBaja = 0;

            for (int indiceActual = indiceFrecuenciaBaja1; indiceActual < indiceFrecuenciaBaja2; indiceActual++)
            {
                if (transformada.Muestras[indiceActual].Y > valorMaximoFrecuenciaBaja)
                {
                    valorMaximoFrecuenciaBaja  = transformada.Muestras[indiceActual].Y;
                    indiceMaximoFrecuenciaBaja = indiceActual;
                }
            }

            double valorMaximoFrecuenciaAlta  = 0;
            int    indiceMaximoFrecuenciaAlta = 0;

            for (int indiceActual = indiceFrecuenciaAlta1; indiceActual < indiceFrecuenciaAlta2; indiceActual++)
            {
                if (transformada.Muestras[indiceActual].Y > valorMaximoFrecuenciaAlta)
                {
                    valorMaximoFrecuenciaAlta  = transformada.Muestras[indiceActual].Y;
                    indiceMaximoFrecuenciaAlta = indiceActual;
                }
            }

            double frecuenciaFundamentalBaja = (double)indiceMaximoFrecuenciaBaja * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;
            double frecuenciaFundamentalAlta = (double)indiceMaximoFrecuenciaAlta * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;

            if (frecuenciaFundamentalBaja > 695 && frecuenciaFundamentalBaja < 699)
            {
                if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                {
                    lbl_PadNumerico.Text = "Tecla 1";
                }
                else
                if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                {
                    lbl_PadNumerico.Text = "Tecla 2";
                }
                else
                if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                {
                    lbl_PadNumerico.Text = "Tecla 3";
                }
            }
            else
            if (frecuenciaFundamentalBaja > 768 && frecuenciaFundamentalBaja < 772)
            {
                if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                {
                    lbl_PadNumerico.Text = "Tecla 4";
                }
                else
                if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                {
                    lbl_PadNumerico.Text = "Tecla 5";
                }
                else
                if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                {
                    lbl_PadNumerico.Text = "Tecla 6";
                }
            }
            else
            if (frecuenciaFundamentalBaja > 850 && frecuenciaFundamentalBaja < 854)
            {
                if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                {
                    lbl_PadNumerico.Text = "Tecla 7";
                }
                else
                if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                {
                    lbl_PadNumerico.Text = "Tecla 8";
                }
                else
                if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                {
                    lbl_PadNumerico.Text = "Tecla 9";
                }
            }
            else
            if (frecuenciaFundamentalBaja > 939 && frecuenciaFundamentalBaja < 943)
            {
                if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                {
                    lbl_PadNumerico.Text = "Tecla *";
                }
                else
                if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                {
                    lbl_PadNumerico.Text = "Tecla 0";
                }
                else
                if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                {
                    lbl_PadNumerico.Text = "Tecla #";
                }
            }


            // Línea del Eje X
            plnEjeX_Resultado.Points.Clear();
            plnEjeX_Resultado.Points.Add(new Point(0, scrContenedor_Resultado.Height / 2));
            plnEjeX_Resultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height / 2));

            // Línea del Eje Y
            plnEjeY_Resultado.Points.Clear();
            plnEjeY_Resultado.Points.Add(new Point((-transformada.TiempoInicial) * scrContenedor_Resultado.Width, 0));
            plnEjeY_Resultado.Points.Add(new Point((-transformada.TiempoInicial) * scrContenedor_Resultado.Width, scrContenedor_Resultado.Height));
        }
예제 #15
0
        private void btnTransformadaFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = transformada.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (transformada != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y /
                                                                                                                                        transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) +
                                                             (scrContenedor_Resultado.Height / 2)));
                }
                double valorMaximo  = 0;
                int    indiceMaximo = 0;
                int    indiceActual = 0;

                foreach (Muestra muestra in transformada.Muestras)
                {
                    if (muestra.Y > valorMaximo)
                    {
                        valorMaximo  = muestra.Y;
                        indiceMaximo = indiceActual;
                    }
                    indiceActual++;
                    if (indiceActual > (double)transformada.Muestras.Count / 2.0)
                    {
                        break;
                    }
                }
                double frecuenciaFundamental =
                    (double)indiceMaximo * señal.FrecuenciaMuestreo
                    / (double)transformada.Muestras.Count;

                lblFrecuenciaFundamental.Text =
                    frecuenciaFundamental.ToString() + " Hz";

                if (frecuenciaFundamental >= 326.63 && frecuenciaFundamental <= 332.63)
                {
                    lblNota.Text = "E/F one lined";
                }

                if (frecuenciaFundamental >= 308.13 && frecuenciaFundamental <= 314.13)
                {
                    lblNota.Text = "D#/E one lined";
                }

                if (frecuenciaFundamental >= 290.66 && frecuenciaFundamental <= 296.66)
                {
                    lblNota.Text = "D one lined";
                }

                if (frecuenciaFundamental >= 274.18 && frecuenciaFundamental <= 280.18)
                {
                    lblNota.Text = "C#/D one lined";
                }

                if (frecuenciaFundamental >= 258.63 && frecuenciaFundamental <= 264.63)
                {
                    lblNota.Text = "B#/C one lined";
                }

                if (frecuenciaFundamental >= 243.94 && frecuenciaFundamental <= 249.94)
                {
                    lblNota.Text = "B/C Small";
                }

                if (frecuenciaFundamental >= 230.08 && frecuenciaFundamental <= 236.08)
                {
                    lblNota.Text = "A#/B Small";
                }

                if (frecuenciaFundamental >= 217.00 && frecuenciaFundamental <= 223.00)
                {
                    lblNota.Text = "A Small";
                }

                if (frecuenciaFundamental >= 204.65 && frecuenciaFundamental <= 210.65)
                {
                    lblNota.Text = "G#/A Small";
                }

                if (frecuenciaFundamental >= 193.00 && frecuenciaFundamental <= 199.00)
                {
                    lblNota.Text = "G Small";
                }

                if (frecuenciaFundamental >= 182.00 && frecuenciaFundamental <= 188.00)
                {
                    lblNota.Text = "F#/G Small";
                }

                if (frecuenciaFundamental >= 171.61 && frecuenciaFundamental <= 177.61)
                {
                    lblNota.Text = "E#/F Small";
                }

                if (frecuenciaFundamental >= 161.81 && frecuenciaFundamental <= 167.81)
                {
                    lblNota.Text = "E/F Small";
                }
            }



            plnEjeXResultado.Points.Clear();
            //Punto del principio
            plnEjeXResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeXResultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width,
                                                  (scrContenedor_Resultado.Height / 2)));

            plnEjeYResultado.Points.Clear();
            //Punto del principio
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (-transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
        }
예제 #16
0
        private void btnTransformadaFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = transformada.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (transformada != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y /
                                                                                                                                        transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) +
                                                             (scrContenedor_Resultado.Height / 2)));
                }

                /*
                 * int indiceMinimoFrecuenciasBajas = 0;
                 * int indiceMaximoFrecuenciasBajas = 0;
                 * int indiceMinimoFrecuenciasAltas = 0;
                 * int indiceMaximoFrecuenciasAltas = 0;
                 *
                 * indiceMinimoFrecuenciasBajas = 680 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                 * indiceMaximoFrecuenciasBajas = 1000 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                 * indiceMinimoFrecuenciasAltas = 1200 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                 * indiceMaximoFrecuenciasAltas = 1500 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                 *
                 * double valorMaximoBajo = 0;
                 * int indiceMaximoBajo = 0;
                 *
                 * for (int indiceActual = indiceMinimoFrecuenciasBajas; indiceActual < indiceMaximoFrecuenciasBajas; indiceActual++)
                 * {
                 *      if (transformada.Muestras[indiceActual].Y > valorMaximoBajo)
                 *      {
                 *              valorMaximoBajo = transformada.Muestras[indiceActual].Y;
                 *              indiceMaximoBajo = indiceActual;
                 *      }
                 * }
                 *
                 * double valorMaximoAlto = 0;
                 * int indiceMaximoAlto = 0;
                 *
                 * for (int indiceActual = indiceMinimoFrecuenciasAltas; indiceActual < indiceMaximoFrecuenciasAltas; indiceActual++)
                 * {
                 *      if (transformada.Muestras[indiceActual].Y > valorMaximoAlto)
                 *      {
                 *              valorMaximoAlto = transformada.Muestras[indiceActual].Y;
                 *              indiceMaximoAlto = indiceActual;
                 *      }
                 * }
                 *
                 */

                double valorMaximo  = 0;
                int    indiceActual = 0;
                int    indiceMaximo = 0;

                foreach (Muestra muestra in transformada.Muestras)
                {
                    if (muestra.Y > valorMaximo)
                    {
                        valorMaximo  = muestra.Y;
                        indiceMaximo = indiceActual;
                    }
                    indiceActual++;
                    if (indiceActual > (double)transformada.Muestras.Count / 2.0)
                    {
                        break;
                    }
                }

                double frecuenciaFundamental = (double)indiceMaximo * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;
                Hertz.Text = frecuenciaFundamental.ToString();

                if (frecuenciaFundamental > 100 && frecuenciaFundamental < 120)
                {
                    Hertz.Text = "A";
                }
                else
                if (frecuenciaFundamental > 136 && frecuenciaFundamental < 156)
                {
                    Hertz.Text = "D";
                }
                else
                if (frecuenciaFundamental > 156 && frecuenciaFundamental < 166)
                {
                    Hertz.Text = "E";
                }
                else
                if (frecuenciaFundamental > 320 && frecuenciaFundamental < 340)
                {
                    Hertz.Text = "E";
                }
                else
                if (frecuenciaFundamental > 186 && frecuenciaFundamental < 206)
                {
                    Hertz.Text = "G";
                }
                else
                if (frecuenciaFundamental > 236 && frecuenciaFundamental < 256)
                {
                    Hertz.Text = "B";
                }

                /*
                 * double frecuenciaFundamentalBaja = (double)indiceMaximoBajo * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;
                 *
                 * double frecuenciaFundamentalAlta = (double)indiceMaximoAlto * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;
                 *
                 *
                 * if (frecuenciaFundamentalBaja > 694 && frecuenciaFundamentalBaja < 700)
                 * {
                 *      if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                 *      {
                 *              Hertz.Text = "1";
                 *      } else
                 *      if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                 *      {
                 *              Hertz.Text = "2";
                 *      } else
                 *      if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                 *      {
                 *              Hertz.Text = "3";
                 *      }
                 * } else
                 * if (frecuenciaFundamentalBaja > 765 && frecuenciaFundamentalBaja < 780)
                 * {
                 *      if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                 *      {
                 *              Hertz.Text = "4";
                 *      }
                 *      else
                 *      if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                 *      {
                 *              Hertz.Text = "5";
                 *      }
                 *      else
                 *      if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                 *      {
                 *              Hertz.Text = "6";
                 *      }
                 * } else
                 * if (frecuenciaFundamentalBaja > 845 && frecuenciaFundamentalBaja < 855)
                 * {
                 *      if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                 *      {
                 *              Hertz.Text = "7";
                 *      }
                 *      else
                 *      if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                 *      {
                 *              Hertz.Text = "8";
                 *      }
                 *      else
                 *      if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                 *      {
                 *              Hertz.Text = "9";
                 *      }
                 * } else
                 * if (frecuenciaFundamentalBaja > 935 && frecuenciaFundamentalBaja < 945)
                 * {
                 *      if (frecuenciaFundamentalAlta > 1206 && frecuenciaFundamentalAlta < 1215)
                 *      {
                 *              Hertz.Text = "*";
                 *      }
                 *      else
                 *      if (frecuenciaFundamentalAlta > 1330 && frecuenciaFundamentalAlta < 1340)
                 *      {
                 *              Hertz.Text = "0";
                 *      }
                 *      else
                 *      if (frecuenciaFundamentalAlta > 1470 && frecuenciaFundamentalAlta < 1480)
                 *      {
                 *              Hertz.Text = "#";
                 *      }
                 * }
                 */
            }



            plnEjeXResultado.Points.Clear();
            //Punto del principio
            plnEjeXResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeXResultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width,
                                                  (scrContenedor_Resultado.Height / 2)));

            plnEjeYResultado.Points.Clear();
            //Punto del principio
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (-transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
        }
예제 #17
0
        private void graficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial      = double.Parse(txtTiempoInicial.Text);
            double tiempoFinal        = double.Parse(txtTiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text);

            switch (cbTipoSeñal.SelectedIndex)
            {
            //Seniodal
            case 0:
                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;

            //Rampa
            case 1: señal = new Rampa();
                break;

            // Exponencial
            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)panelConfiguracion.Children[0]).txtAlpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            case 3:     //rectangular
                señal = new SeñalRectangular();
                break;

            default: señal = null;
                break;
            }

            switch (cbTipoSeñal_segundaSeñal.SelectedIndex)
            {
            //Seniodal
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_segundaSeñal.Children[0]).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_segundaSeñal.Children[0]).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_segundaSeñal.Children[0]).txtFrecuencia.Text);
                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            //Rampa
            case 1:
                segundaSeñal = new Rampa();
                break;

            // Exponencial
            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)panelConfiguracion_segundaSeñal.Children[0]).txtAlpha.Text);
                segundaSeñal = new SeñalExponencial(alpha);
                break;

            case 3:     //rectangular
                segundaSeñal = new SeñalRectangular();
                break;

            default:
                segundaSeñal = null;
                break;
            }



            plnGrafica.Points.Clear();
            plnGrafica2.Points.Clear();



            if (señal != null)
            {
                señal.tiempoFinal               = tiempoFinal;
                señal.tiempoInicial             = tiempoInicial;
                señal.frecuenciaMuestreo        = frecuenciaMuestreo;
                segundaSeñal.tiempoFinal        = tiempoFinal;
                segundaSeñal.tiempoInicial      = tiempoInicial;
                segundaSeñal.frecuenciaMuestreo = frecuenciaMuestreo;

                //contruir señal
                señal.construirSeñalDigital();
                segundaSeñal.construirSeñalDigital();

                //ecalar
                if ((bool)chbEscala.IsChecked)
                {
                    double factorEscala = double.Parse(txtEscalaAmplitud.Text);
                    señal.escalar(factorEscala);
                }
                if ((bool)chbEscala_segundaSeñal.IsChecked)
                {
                    double factorEscala = double.Parse(txtEscalaAmplitud_segundaSeñal.Text);
                    segundaSeñal.escalar(factorEscala);
                }
                //desplazamiento
                if ((bool)chbDesplazamiento.IsChecked)
                {
                    double desplazamiento = double.Parse(txtDesplazamientoY.Text);
                    señal.desplazarY(desplazamiento);
                }
                if ((bool)chbDesplazamiento_segundaSeñal.IsChecked)
                {
                    double desplazamiento = double.Parse(txtDesplazamientoY_segundaSeñal.Text);
                    segundaSeñal.desplazarY(desplazamiento);
                }
                //Truncar
                if ((bool)chbTruncar.IsChecked)
                {
                    double umbral = double.Parse(txtTruncar.Text);
                    señal.truncar(umbral);
                }
                if ((bool)chbTruncar_segundaSeñal.IsChecked)
                {
                    double umbral = double.Parse(txtTruncar_segundaSeñal.Text);
                    segundaSeñal.truncar(umbral);
                }

                //actualizar amplitud maxima
                señal.actualizarAmplitudMaxima();
                segundaSeñal.actualizarAmplitudMaxima();

                amplitudMaxima = señal.amplitudMaxima;
                if (amplitudMaxima < segundaSeñal.amplitudMaxima)
                {
                    amplitudMaxima = segundaSeñal.amplitudMaxima;
                }


                //recorrer una coleccion o arreglo
                foreach (Muestra muestra in señal.muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.x - tiempoInicial) * scrContenedor.Width, (muestra.y / amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
                }
                foreach (Muestra muestra in segundaSeñal.muestras)
                {
                    plnGrafica2.Points.Add(new Point((muestra.x - tiempoInicial) * scrContenedor.Width, (muestra.y / amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
                }

                lblAmplitudMaximaY.Text         = amplitudMaxima.ToString();
                lblAmplitudMaximaNegativaY.Text = "-" + amplitudMaxima.ToString();
            }



            plnEjeX.Points.Clear();
            //punto del principio
            plnEjeX.Points.Add(new Point(0, scrContenedor.Height / 2));
            //punto del fin
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, scrContenedor.Height / 2));

            plnEjeY.Points.Clear();
            //punto del principio
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (1 * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //punto del fin
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (-1 * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
        }
예제 #18
0
        private void BotonGraficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial      = double.Parse(txtTiempoInicial.Text);
            double tiempoFinal        = double.Parse(txtTiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txtFrecuenciadeMuestreo.Text);



            switch (cbTipoSeñal.SelectedIndex)
            {
            case 0:
                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 1:
                señal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)panelConfiguracion.Children[0]).txtAlpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default: señal = null; break;
            }

            switch (cbTipoSeñal_SegundaSeñal.SelectedIndex)
            {
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtFrecuencia.Text);

                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            case 1:
                segundaSeñal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)panelConfiguracion_SegundaSeñal.Children[0]).txtAlpha.Text);
                segundaSeñal = new SeñalExponencial(alpha);
                break;

            case 3:
                segundaSeñal = new SeñalRectangular();
                break;

            default:
                segundaSeñal = null; break;
            }

            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            //segunda señal
            segundaSeñal.TiempoInicial      = tiempoInicial;
            segundaSeñal.TiempoFinal        = tiempoFinal;
            segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo;



            señal.construirSeñalDigital();
            segundaSeñal.construirSeñalDigital();

            //Escalar
            double factorEscala = double.Parse(txtEscalaAmplitud.Text);

            señal.escalar(factorEscala);
            señal.actualizarAmplitudMaxima();

            //Truncar
            if ((bool)cb_Umbral.IsChecked)
            {
                double factorTruncar = double.Parse(txtUmbral.Text);
                señal.truncar(factorTruncar);
            }

            //segunda Señal

            //Escalar
            double factorEscala2 = double.Parse(txtEscalaAmplitud.Text);

            segundaSeñal.escalar(factorEscala2);
            segundaSeñal.actualizarAmplitudMaxima();

            //Truncar
            if ((bool)cb_Umbral_SegundaSeñal.IsChecked)
            {
                double factorTruncar2 = double.Parse(txtUmbral_SegundaSeñal.Text);
                segundaSeñal.truncar(factorTruncar2);
            }

            señal.actualizarAmplitudMaxima();
            segundaSeñal.actualizarAmplitudMaxima();

            amplitudMaxima = señal.AmplitudMaxima;
            if (segundaSeñal.AmplitudMaxima > amplitudMaxima)
            {
                amplitudMaxima = segundaSeñal.AmplitudMaxima;
            }


            plnGrafica.Points.Clear();
            plnGraficaDos.Points.Clear();


            lblmplitudMaximaPositivaY.Text  = amplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY.Text = "-" + amplitudMaxima.ToString("F");



            if (señal != null)
            {
                //Recorre una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
                }
            }

            //Segunda señal
            if (segundaSeñal != null)
            {
                //Recorre una coleccion o arreglo
                foreach (Muestra muestra in segundaSeñal.Muestras)
                {
                    plnGraficaDos.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
                }
            }

            //Recorre una coleccion o arreglo

            plnEjeX.Points.Clear();
            //Punto del principio
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, (scrContenedor.Height / 2)));



            plnEjeY.Points.Clear();
            //Punto del principio
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (señal.AmplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (-señal.AmplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
        }
        private void BotonGraficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial      = double.Parse(txt_TiempoInicial.Text);
            double tiempoFinal        = double.Parse(txt_TiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txt_FrecuenciaDeMuestreo.Text);

            switch (cb_TipoSeñal.SelectedIndex)
            {
            // Señal Senoidal
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txt_Amplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txt_Fase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txt_Frecuencia.Text);

                señal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            // Señal Rampa
            case 1:
                señal = new SeñalRampa();
                break;

            // Señal Exponencial
            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txt_Alpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            // Señal Rectangular
            case 3:
                señal = new SeñalRectangular();
                break;

            default:
                señal = null;
                break;
            }



            // Primer Señal
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            // Segunda Señal
            señal_2.TiempoInicial      = tiempoInicial;
            señal_2.TiempoFinal        = tiempoFinal;
            señal_2.FrecuenciaMuestreo = frecuenciaMuestreo;

            señal.construirSeñalDigital();
            señal_2.construirSeñalDigital();

            // Truncar
            if ((bool)ckb_Truncado.IsChecked)
            {
                double n = double.Parse(txt_Truncado.Text);
                señal.truncar(n);
            }



            // Desplazar
            if ((bool)ckb_Desplazamiento.IsChecked)
            {
                double factorDesplazamiento = double.Parse(txt_Desplazamiento.Text);
                señal.desplazar(factorDesplazamiento);
            }


            // Actualizar
            señal.actualizarAmplitudMaxima();

            amplitudMaxima = señal.AmplitudMaxima;



            // Limpieza de polylines
            plnGrafica.Points.Clear();


            // Impresión de la amplitud máxima en los labels de la ventana.
            lbl_AmplitudMaxima.Text = amplitudMaxima.ToString("F");
            lbl_AmplitudMinima.Text = "-" + amplitudMaxima.ToString("F");

            if (señal != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2) - 30) * -1 + (scrContenedor.Height / 2))));
                }
            }


            // Línea del Eje X
            plnEjeX.Points.Clear();
            plnEjeX.Points.Add(new Point(0, scrContenedor.Height / 2));
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, scrContenedor.Height / 2));

            // Línea del Eje Y
            plnEjeY.Points.Clear();
            plnEjeY.Points.Add(new Point((-tiempoInicial) * scrContenedor.Width, 0));
            plnEjeY.Points.Add(new Point((-tiempoInicial) * scrContenedor.Width, scrContenedor.Height));
        }
예제 #20
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);



            switch (cbTipoSeñal.SelectedIndex)
            {
            //Senoidal
            case 0:
                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;

            //Rampa
            case 1:
                señal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(
                    ((ConfiguracionSeñalExponencial)panelConfiguracion.Children[0]).txtAlpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default:
                señal = null;
                break;
            }


            //Establacer los valores que va usar la clase antes de que la llame.
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;



            señal.construirSeñalDigital();
            señal.actualizarAmplitudMaxima();
            amplitudMaxima = señal.AmplitudMaxima;
            plnGrafica.Points.Clear();



            //Escalar
            double factorEscala = double.Parse(txtfactorEscalaAmplitud.Text);

            if (checkboxEscalaAmplitud.IsChecked == true)
            {
                señal.escalar(factorEscala);
            }
            else if (checkboxEscalaAmplitud.IsChecked == false)
            {
                factorEscala = 1;
                señal.escalar(factorEscala);
            }

            //Desplazar
            double desplazamientoValor = double.Parse(txtDesplazamientoEnY.Text);

            if (checkboxDesplazamientoY.IsChecked == true)
            {
                señal.desplazar(desplazamientoValor);
            }
            else if (checkboxDesplazamientoY.IsChecked == false)
            {
                desplazamientoValor = 0;
                señal.desplazar(desplazamientoValor);
            }

            //Truncar
            if (checkboxUmbral.IsChecked == true)
            {
                double umbralValor = double.Parse(txtUmbral.Text);
                señal.truncar(umbralValor);
            }



            lblAmplitudMaximaY.Text         = amplitudMaxima.ToString("F");
            lblAmplitudMazimaNegativaY.Text = "-" + amplitudMaxima.ToString("F");

            //EJE X
            plnEjex.Points.Clear();
            //Punto de Principio
            plnEjex.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjex.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, (scrContenedor.Height / 2)));
            //

            //EJE Y
            plnEjey.Points.Clear();
            //Punto de Principio
            plnEjey.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, señal.AmplitudMaxima * (((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjey.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, -señal.AmplitudMaxima * (((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //
        }
예제 #21
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);



            switch (cbTipoSeñal.SelectedIndex)
            {
            //Senoidal
            case 0:
                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;

            //Rampa
            case 1:
                señal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(
                    ((ConfiguracionSeñalExponencial)panelConfiguracion.Children[0]).txtAlpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default:
                señal = null;
                break;
            }

            //Segunda señal
            switch (cbTipoSeñal_Segunda.SelectedIndex)
            {
            //Senoidal
            case 0:
                double amplitud = double.Parse(
                    ((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtAmplitud.Text);
                double fase = double.Parse(
                    ((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtFase.Text);
                double frecuencia = double.Parse(
                    ((ConfiguracionSeñalSenoidal)panelConfiguracion_SegundaSeñal.Children[0]).txtFrecuencia.Text);
                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia);

                break;

            //Rampa
            case 1:
                segundaSeñal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(
                    ((ConfiguracionSeñalExponencial)panelConfiguracion_SegundaSeñal.Children[0]).txtAlpha.Text);
                segundaSeñal = new SeñalExponencial(alpha);
                break;

            case 3:    //Rentagular
                señal = new SeñalRectangular();
                break;

            default:
                segundaSeñal = null;
                break;
            }

            //Establacer los valores que va usar la clase antes de que la llame.
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            //Segunda señal
            segundaSeñal.TiempoInicial      = tiempoInicial;
            segundaSeñal.TiempoFinal        = tiempoFinal;
            segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo;


            señal.construirSeñalDigital();
            segundaSeñal.construirSeñalDigital();
            plnGrafica.Points.Clear();
            plnGraficaDos.Points.Clear();



            //Escalar
            double factorEscala = double.Parse(txtfactorEscalaAmplitud.Text);

            if (checkboxEscalaAmplitud.IsChecked == true)
            {
                señal.escalar(factorEscala);
            }
            else if (checkboxEscalaAmplitud.IsChecked == false)
            {
                factorEscala = 1;
                señal.escalar(factorEscala);
            }

            //Desplazar
            double desplazamientoValor = double.Parse(txtDesplazamientoEnY.Text);

            if (checkboxDesplazamientoY.IsChecked == true)
            {
                señal.desplazar(desplazamientoValor);
            }
            else if (checkboxDesplazamientoY.IsChecked == false)
            {
                desplazamientoValor = 0;
                señal.desplazar(desplazamientoValor);
            }

            //Truncar
            if (checkboxUmbral.IsChecked == true)
            {
                double umbralValor = double.Parse(txtUmbral.Text);
                señal.truncar(umbralValor);
            }



            //Señal2
            //Señal senoidal
            double factorEscala2 = double.Parse(txtfactorEscalaAmplitud_SegundaSeñal.Text);

            if (checkboxEscalaAmplitud_SegundaSeñal.IsChecked == true)
            {
                segundaSeñal.escalar(factorEscala2);
            }
            else if (checkboxEscalaAmplitud_SegundaSeñal.IsChecked == false)
            {
                factorEscala2 = 1;
                segundaSeñal.escalar(factorEscala2);
            }

            //Desplazar
            double desplazamientoValor2 = double.Parse(txtDesplazamientoEnY_SegundaSeñal.Text);

            if (checkboxDesplazamientoY_SegundaSeñal.IsChecked == true)
            {
                segundaSeñal.desplazar(desplazamientoValor2);
            }
            else if (checkboxDesplazamientoY_SegundaSeñal.IsChecked == false)
            {
                desplazamientoValor2 = 0;
                segundaSeñal.desplazar(desplazamientoValor2);
            }
            //Truncar
            if (checkboxUmbral_SegundaSeñal.IsChecked == true)
            {
                double umbralValor2 = double.Parse(txtUmbral_SegundaSeñal.Text);
                segundaSeñal.truncar(umbralValor2);
            }

            //Amplitud
            //Amplitud
            señal.actualizarAmplitudMaxima();
            segundaSeñal.actualizarAmplitudMaxima();
            amplitudMaxima = señal.AmplitudMaxima;
            if (segundaSeñal.AmplitudMaxima > amplitudMaxima)
            {
                amplitudMaxima = segundaSeñal.AmplitudMaxima;
            }

            if (señal != null)
            {
                //Recorrer una coleccion o arreglo, solo sirve cuando quieres recorrer todos los elementos.
                //Por cada iteracion se guardara un elemento conforme a la coleccion. (FOREACH)
                //Declarar la variable del tipo de dato que va recorrer
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width,
                                                    (muestra.Y / amplitudMaxima) * (((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2))
                                          );
                }
            }
            if (segundaSeñal != null)
            {
                //Recorrer una coleccion o arreglo, solo sirve cuando quieres recorrer todos los elementos.
                //Por cada iteracion se guardara un elemento conforme a la coleccion. (FOREACH)
                //Declarar la variable del tipo de dato que va recorrer
                foreach (Muestra muestra in segundaSeñal.Muestras)
                {
                    plnGraficaDos.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width,
                                                       (muestra.Y / amplitudMaxima) * (((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2))
                                             );
                }
            }
            lblAmplitudMaximaY.Text         = amplitudMaxima.ToString("F");
            lblAmplitudMazimaNegativaY.Text = "-" + amplitudMaxima.ToString("F");

            //EJE X
            plnEjex.Points.Clear();
            //Punto de Principio
            plnEjex.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjex.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, (scrContenedor.Height / 2)));
            //

            //EJE Y
            plnEjey.Points.Clear();
            //Punto de Principio
            plnEjey.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, señal.AmplitudMaxima * (((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjey.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, -señal.AmplitudMaxima * (((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //
        }
예제 #22
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);


            double umbral = double.Parse(txtUmbral.Text);
            double umbral_segundaSeñal = double.Parse(txtUmbral_SegundaSeñal.Text);

            //PRIMERA SEÑAL
            switch (cbTipoSeñal.SelectedIndex)
            {
            //Señal Senoidal
            case 0:
                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, umbral);     //constructor

                break;

            //Rampa
            case 1: señal = new SeñalRampa();

                break;

            //Exponencial
            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)
                                             panelConfiguracion.Children[0]).txtAlpha.Text);

                señal = new SeñalExponencial(alpha, umbral);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default:

                señal = null;

                break;
            }

            //SEGUNDA SEÑAL
            switch (cbTipoSeñal_SegundaSeñal.SelectedIndex)
            {
            //Señal Senoidal
            case 0:
                double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)
                                                panelConfiguracion_SegundaSeñal.Children[0]).txtAmplitud.Text);

                double fase = double.Parse(((ConfiguracionSeñalSenoidal)
                                            panelConfiguracion_SegundaSeñal.Children[0]).txtFase.Text);

                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)
                                                  panelConfiguracion_SegundaSeñal.Children[0]).txtFrecuencia.Text);

                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia, umbral);     //constructor

                break;

            //Rampa
            case 1:
                segundaSeñal = new SeñalRampa();

                break;

            //Exponencial
            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)
                                             panelConfiguracion_SegundaSeñal.Children[0]).txtAlpha.Text);

                segundaSeñal = new SeñalExponencial(alpha, umbral);
                break;

            case 3:
                segundaSeñal = new SeñalRectangular();
                break;

            default:

                segundaSeñal = null;

                break;
            }


            //---------------------------------PRIMERA SEÑAL------------------------------------------------------//
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;
            señal.construirSeñalDigital();

            //Escalar
            double factorEscala = double.Parse(txtFactorEscalaAmplitud.Text);

            señal.escalar(factorEscala);

            //Desplazamiento
            double desplazar = double.Parse(txtDesplazamientoY.Text);

            señal.desplazarY(desplazar);

            //Truncar
            //señal.truncar(umbral);



            //------------------------------------SEGUNDA SEÑAL--------------------------------------------------//
            segundaSeñal.TiempoInicial      = tiempoInicial;
            segundaSeñal.TiempoFinal        = tiempoFinal;
            segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo;
            segundaSeñal.construirSeñalDigital();

            //Escalar
            double factorEscala_segundaSeñal = double.Parse(txtFactorEscalaAmplitud_SegundaSeñal.Text);

            segundaSeñal.escalar(factorEscala_segundaSeñal);

            //Desplazamiento
            double desplazar_segundaSeñal = double.Parse(txtDesplazamientoY_SegundaSeñal.Text);

            segundaSeñal.desplazarY(desplazar_segundaSeñal);

            //Truncar
            //segundaSeñal.truncar(umbral_segundaSeñal);



            señal.actualizarAmplitudMaxima();
            segundaSeñal.actualizarAmplitudMaxima();

            amplitudMaxima = señal.AmplitudMaxima;
            if (segundaSeñal.AmplitudMaxima > amplitudMaxima)
            {
                amplitudMaxima = segundaSeñal.AmplitudMaxima;
            }

            plnGrafica.Points.Clear();
            plnGrafica2.Points.Clear();

            lblAmplitudMaximaY.Text         = amplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY.Text = "-" + amplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (señal != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y /
                                                                                                        amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) +
                                                    (scrContenedor.Height / 2)));
                }
            }

            //SEGUNDA SEÑAL
            if (segundaSeñal != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in segundaSeñal.Muestras)
                {
                    plnGrafica2.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y /
                                                                                                         amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) +
                                                     (scrContenedor.Height / 2)));
                }
            }

            plnEjeX.Points.Clear();
            //Punto del principio
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del final
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width,
                                         (scrContenedor.Height / 2)));

            plnEjeY.Points.Clear();
            //Punto del principio
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (señal.AmplitudMaxima *
                                                                                     ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //Punto del final
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (-señal.AmplitudMaxima *
                                                                                     ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
        }
예제 #23
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);



            switch (cbTipoSeñal.SelectedIndex)
            {
            //Senoidal
            case 0:
                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;

            //Rampa
            case 1:
                señal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txtAlpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default:
                señal = null;
                break;
            }
            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;



            switch (cbTipoSeñal_Segunda.SelectedIndex)
            {
            //Senoidal
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_Segunda.Children[0])).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_Segunda.Children[0])).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion_Segunda.Children[0])).txtFrecuencia.Text);
                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            //Rampa
            case 1:
                segundaSeñal = new SeñalRampa();
                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txtAlpha.Text);
                segundaSeñal = new SeñalExponencial(alpha);
                break;

            case 3:
                segundaSeñal = new SeñalRectangular();
                break;

            default:
                segundaSeñal = null;
                break;
            }
            segundaSeñal.TiempoInicial      = tiempoInicial;
            segundaSeñal.TiempoFinal        = tiempoFinal;
            segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo;

            señal.construirSeñalDigital();
            segundaSeñal.construirSeñalDigital();

            //Escalar
            if ((bool)chEscalaAmplitud.IsChecked)
            {
                double FactorEscala = double.Parse(txtEscalaAmplitud.Text);
                señal.escalar(FactorEscala);
            }
            if ((bool)chDesplazarY.IsChecked)
            {
                double FactorDesplazarY = double.Parse(txtDesplazarY.Text);
                señal.desplazarY(FactorDesplazarY);
                //
            }
            if ((bool)chTruncar.IsChecked)
            {
                //truncar
                float FactorUmbral = float.Parse(txtUmbral.Text);
                señal.truncar(FactorUmbral);
            }
            //

            if ((bool)chEscalaAmplitud_Segunda.IsChecked)
            {
                double FactorEscala = double.Parse(txtEscalaAmplitud_Segunda.Text);
                segundaSeñal.escalar(FactorEscala);
            }
            if ((bool)chDesplazarY_Segunda.IsChecked)
            {
                double FactorDesplazarY = double.Parse(txtDesplazarY_Segunda.Text);
                segundaSeñal.desplazarY(FactorDesplazarY);
                //
            }
            if ((bool)chTruncar_Segunda.IsChecked)
            {
                //truncar
                float FactorUmbral = float.Parse(txtUmbral_Segunda.Text);
                segundaSeñal.truncar(FactorUmbral);
            }
            //

            segundaSeñal.actualizarAmplitudMaxima();
            señal.actualizarAmplitudMaxima();

            if (segundaSeñal.AmplitudMaxima > segundaSeñal.AmplitudMaxima)
            {
                amplitudMaxima = señal.AmplitudMaxima;
            }
            plnGrafica.Points.Clear();
            plnGraficaDos.Points.Clear();

            lblAmplitudMaximaY.Text         = señal.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY.Text = "-" + amplitudMaxima.ToString("F");
            if (señal != null)
            {
                //Recorrer una  coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, ((muestra.Y / amplitudMaxima) * ((scrContenedor.Height / 2.0) - 30) * -1)
                                                    + (scrContenedor.Height / 2)));
                }
            }
            if (segundaSeñal != null)
            {
                //Recorrer una  coleccion o arreglo
                foreach (Muestra muestra in segundaSeñal.Muestras)
                {
                    plnGraficaDos.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, ((muestra.Y / amplitudMaxima) * ((scrContenedor.Height / 2.0) - 30) * -1)
                                                       + (scrContenedor.Height / 2)));
                }
            }

            plnEjeX.Points.Clear();
            //Punto del Principio
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del Fin
            plnEjeX.Points.Add(new Point(((tiempoFinal - tiempoInicial) * scrContenedor.Width), (scrContenedor.Height / 2)));

            //Punto del Principio
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height));
            //Punto del Fin
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height * -1));
        }
        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);



            switch (cbTipoSeñal.SelectedIndex)
            {
            //Senoidal
            case 0:
                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;

            //Rampa
            case 1:
                señal = new SeñalRampa();
                break;

            case 2:
                double alpha =
                    double.Parse(
                        ((ConfiguracionSeñalExponencial)panelConfiguracion.Children[0]).txtAlpha.Text);
                señal =
                    new SeñalExponencial(alpha);
                break;

            case 3:
                señal = new SeñalRectangular();
                break;

            default:
                señal = null;
                break;
            }



            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;



            señal.construirSeñalDigital();


            if ((bool)cbEscalar.IsChecked)
            {
                señal.escalar(float.Parse(txtFactorEscala.Text));
            }
            if ((bool)cbDesplazar.IsChecked)
            {
                señal.desplazar(float.Parse(txtMagnitudDesplazamiento.Text));
            }
            if ((bool)cbTruncar.IsChecked)
            {
                señal.truncar(float.Parse(txtUmbral.Text));
            }



            señal.actualizarAmplitudMaxima();

            amplitudMaxima = señal.AmplitudMaxima;


            plnGrafica.Points.Clear();


            lblAmplitudMaximaY.Text =
                amplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY.Text =
                "-" + amplitudMaxima.ToString("F");

            if (señal != null)
            {
                //Recorrer una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(
                        new Point((muestra.X - tiempoInicial) * scrContenedor.Width
                                  , (muestra.Y / amplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1)
                                  + (scrContenedor.Height / 2))
                        );
                }
            }


            plnEjeX.Points.Clear();
            //Punto del principio
            plnEjeX.Points.Add(
                new Point(0,                            //Coordenada X punto inicial
                          (scrContenedor.Height / 2))); //Coordenada Y punto inicial
            //Punto del fin
            plnEjeX.Points.Add(
                new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width,
                                                        // x final
                          (scrContenedor.Height / 2))); // y final

            plnEjeY.Points.Clear();
            //Punto del principio
            plnEjeY.Points.Add(
                new Point((0 - tiempoInicial) * scrContenedor.Width, //Coordenada X punto inicial

                          (                                          //Coordenada Y punto inicial
                              ((scrContenedor.Height / 2.0) - 30) * -1)
                          + (scrContenedor.Height / 2)));
            //Punto del fin
            plnEjeY.Points.Add(
                new Point((0 - tiempoInicial) * scrContenedor.Width,      //x final
                          (-1 * ((scrContenedor.Height / 2.0) - 30) * -1) //y final
                          + (scrContenedor.Height / 2)));
        }
예제 #25
0
        private void btnTransformadaFourier_Click(object sender, RoutedEventArgs e)
        {
            Señal transformada = Señal.transformar(señal);

            transformada.actualizarAmplitudMaxima();

            plnGraficaResultado.Points.Clear();

            lblAmplitudMaximaY_Resultado.Text         = transformada.AmplitudMaxima.ToString("F");
            lblAmplitudMaximaNegativaY_Resultado.Text = "-" + transformada.AmplitudMaxima.ToString("F");

            //PRIMERA SEÑAL
            if (transformada != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in transformada.Muestras)
                {
                    plnGraficaResultado.Points.Add(new Point((muestra.X - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (muestra.Y /
                                                                                                                                        transformada.AmplitudMaxima * ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) +
                                                             (scrContenedor_Resultado.Height / 2)));
                }

                int indiceMinimoFrecuenciasBajas = 0;
                int indiceMaximoFrecuenciasBajas = 0;
                int indiceMinimoFrecuenciasAltas = 0;
                int indiceMaximoFrecuenciasAltas = 0;

                indiceMinimoFrecuenciasBajas = 680 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                indiceMaximoFrecuenciasBajas = 1000 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                indiceMinimoFrecuenciasAltas = 1200 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;
                indiceMaximoFrecuenciasAltas = 1500 * transformada.Muestras.Count / (int)señal.FrecuenciaMuestreo;

                double valorMaximo  = 0;
                int    indiceMaximo = 0;
                int    indiceActual = 0;

                double valorMaximo2  = 0;
                int    indiceMaximo2 = 0;
                int    indiceActual2 = 0;


                for (indiceActual2 = indiceMinimoFrecuenciasAltas; indiceActual2 < indiceMaximoFrecuenciasAltas; indiceActual2++)
                {
                    if (transformada.Muestras[indiceActual2].Y > valorMaximo2)
                    {
                        valorMaximo2  = transformada.Muestras[indiceActual2].Y;
                        indiceMaximo2 = indiceActual2;
                    }
                }



                for (indiceActual = indiceMinimoFrecuenciasBajas; indiceActual < indiceMaximoFrecuenciasBajas; indiceActual++)
                {
                    if (transformada.Muestras[indiceActual].Y > valorMaximo)
                    {
                        valorMaximo  = transformada.Muestras[indiceActual].Y;
                        indiceMaximo = indiceActual;
                    }
                }



                double frecuenciaFundamental = (double)indiceMaximo * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;
                Hertz.Text = frecuenciaFundamental.ToString() + "Hz";

                double frecuenciaFundamental2 = (double)indiceMaximo2 * señal.FrecuenciaMuestreo / (double)transformada.Muestras.Count;
                Hertz2.Text = frecuenciaFundamental2.ToString() + "Hz";


                if (frecuenciaFundamental >= 937 && frecuenciaFundamental <= 945)
                {
                    if (frecuenciaFundamental2 >= 1206 && frecuenciaFundamental2 <= 1212)
                    {
                        tecla.Text = "Es la tecla *.";
                    }

                    if (frecuenciaFundamental2 >= 1333 && frecuenciaFundamental2 <= 1339)
                    {
                        tecla.Text = "Es la tecla 0.";
                    }
                    if (frecuenciaFundamental2 >= 1444 && frecuenciaFundamental2 <= 1480)
                    {
                        tecla.Text = "Es la tecla #.";
                    }
                }

                if (frecuenciaFundamental >= 849 && frecuenciaFundamental <= 855)
                {
                    if (frecuenciaFundamental2 >= 1206 && frecuenciaFundamental2 <= 1212)
                    {
                        tecla.Text = "Es la tecla 7.";
                    }

                    if (frecuenciaFundamental2 >= 1333 && frecuenciaFundamental2 <= 1339)
                    {
                        tecla.Text = "Es la tecla 8.";
                    }
                    if (frecuenciaFundamental2 >= 1444 && frecuenciaFundamental2 <= 1480)
                    {
                        tecla.Text = "Es la tecla 9.";
                    }
                }

                if (frecuenciaFundamental >= 767 && frecuenciaFundamental <= 773)
                {
                    if (frecuenciaFundamental2 >= 1206 && frecuenciaFundamental2 <= 1212)
                    {
                        tecla.Text = "Es la tecla 4.";
                    }

                    if (frecuenciaFundamental2 >= 1333 && frecuenciaFundamental2 <= 1339)
                    {
                        tecla.Text = "Es la tecla 5.";
                    }
                    if (frecuenciaFundamental2 >= 1444 && frecuenciaFundamental2 <= 1480)
                    {
                        tecla.Text = "Es la tecla 6.";
                    }
                }

                if (frecuenciaFundamental >= 694 && frecuenciaFundamental <= 700)
                {
                    if (frecuenciaFundamental2 >= 1206 && frecuenciaFundamental2 <= 1212)
                    {
                        tecla.Text = "Es la tecla 1.";
                    }

                    if (frecuenciaFundamental2 >= 1333 && frecuenciaFundamental2 <= 1339)
                    {
                        tecla.Text = "Es la tecla 2.";
                    }
                    if (frecuenciaFundamental2 >= 1444 && frecuenciaFundamental2 <= 1480)
                    {
                        tecla.Text = "Es la tecla 3.";
                    }
                }
            }


            plnEjeXResultado.Points.Clear();
            //Punto del principio
            plnEjeXResultado.Points.Add(new Point(0, (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeXResultado.Points.Add(new Point((transformada.TiempoFinal - transformada.TiempoInicial) * scrContenedor_Resultado.Width,
                                                  (scrContenedor_Resultado.Height / 2)));

            plnEjeYResultado.Points.Clear();
            //Punto del principio
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
            //Punto del final
            plnEjeYResultado.Points.Add(new Point((0 - transformada.TiempoInicial) * scrContenedor_Resultado.Width, (-transformada.AmplitudMaxima *
                                                                                                                     ((scrContenedor_Resultado.Height / 2.0) - 30) * -1) + (scrContenedor_Resultado.Height / 2)));
        }