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