public static Señal suma(Señal sumando1, Señal sumando2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); resultado.TiempoInicial = sumando1.TiempoInicial; resultado.TiempoFinal = sumando1.TiempoFinal; resultado.FrecuenciaMuestreo = sumando1.FrecuenciaMuestreo; int indice = 0; foreach (Muestra muestra in sumando1.Muestras) { Muestra muestraResultado = new Muestra(); muestraResultado.X = muestra.X; muestraResultado.Y = muestra.Y + sumando2.Muestras[indice].Y; indice++; resultado.Muestras.Add(muestraResultado); } return(resultado); }
public static Señal multiplicacion(Señal multiplicando1, Señal multiplicando2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); // Multiplicandos de la Señal 1 resultado.TiempoInicial = multiplicando1.TiempoInicial; resultado.TiempoFinal = multiplicando1.TiempoFinal; resultado.FrecuenciaMuestreo = multiplicando1.FrecuenciaMuestreo; int indice = 0; foreach (Muestra muestra in multiplicando1.Muestras) { Muestra muestraResultado = new Muestra(); muestraResultado.X = muestra.X; muestraResultado.Y = muestra.Y * multiplicando2.Muestras[indice].Y; indice++; resultado.Muestras.Add(muestraResultado); } return(resultado); }
public static Señal convolucionar(Señal operando1, Señal operando2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); //asi se deteminan los limites de una convolucion, es la suma de los limites interiores y la suma de los limites superiores resultado.TiempoInicial = operando1.TiempoInicial + operando2.TiempoInicial; resultado.TiempoFinal = operando1.TiempoFinal + operando2.TiempoFinal; resultado.FrecuenciaMuestreo = operando1.FrecuenciaMuestreo; double periodoMuestreo = 1 / resultado.FrecuenciaMuestreo; double duracionSeñal = resultado.TiempoFinal - resultado.TiempoInicial; double cantidadMuestrasResultado = duracionSeñal * resultado.FrecuenciaMuestreo; double instanteActual = resultado.TiempoInicial; for (int n = 0; n < cantidadMuestrasResultado; n++) { double valorMuestraY = 0; for (int k = 0; k < operando2.Muestras.Count; k++) { // el .count es una propiedad que permite contar el numero de valores que tiene una lista if ((n - k) >= 0 && (n - k) < operando2.Muestras.Count) { valorMuestraY += operando1.Muestras[k].Y * operando2.Muestras[n - k].Y; } } valorMuestraY /= resultado.FrecuenciaMuestreo; Muestra muestra = new Muestra(instanteActual, valorMuestraY); resultado.Muestras.Add(muestra); instanteActual += periodoMuestreo; } return(resultado); }
public static Señal convulcionar(Señal operando1, Señal operando2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); resultado.TiempoInicial = operando1.TiempoInicial + operando2.TiempoInicial; resultado.TiempoFinal = operando1.TiempoFinal + operando2.TiempoFinal; resultado.FrecuenciaMuestreo = operando1.FrecuenciaMuestreo; double periodoMuestreo = 1 / resultado.FrecuenciaMuestreo; double duracionSeñal = resultado.TiempoFinal - resultado.TiempoInicial; double cantidadMuestrasResultado = duracionSeñal * resultado.FrecuenciaMuestreo; double InstanteActual = resultado.TiempoInicial; for (int n = 0; n < cantidadMuestrasResultado; n++) { double ValorMuestra = 0; for (int k = 0; k < operando2.Muestras.Count; k++) { if ((n - k) >= 0 && (n - k) < operando2.Muestras.Count) { ValorMuestra += operando1.Muestras[k].Y * operando2.Muestras[n - k].Y; } } Muestra muestra = new Muestra(InstanteActual, ValorMuestra); resultado.Muestras.Add(muestra); InstanteActual += periodoMuestreo; } return(resultado); }
private void BtnGraficar_Click(object sender, RoutedEventArgs e) { double amplitud = double.Parse(txtAmplitud.Text); double fase = double.Parse(txtFase.Text); double frecuencia = double.Parse(txtFrecuencia.Text); double tiempoInicial = double.Parse(txtTiempoInicial.Text); double tiempoFinal = double.Parse(txtTiempoFinal.Text); double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text); /*SeñalSenoidal señal = * new SeñalSenoidal(amplitud, * fase, frecuencia);*/ /*SeñalParabolica señal = * new SeñalParabolica();*/ SeñalRampa señal = new SeñalRampa(); double periodoMuestreo = 1.0 / frecuenciaMuestreo; double amplitudMaxima = 0.0; plnGrafica.Points.Clear(); for (double i = tiempoInicial; i <= tiempoFinal; i += periodoMuestreo) { double valorMuestra = señal.evaluar(i); if (Math.Abs(valorMuestra) > amplitudMaxima) { amplitudMaxima = Math.Abs(valorMuestra); } Muestra muestra = new Muestra(i, valorMuestra); señal.Muestras.Add(muestra); } foreach (Muestra muestra in señal.Muestras) { plnGrafica.Points.Add( adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima) ); } lblLimiteSuperior.Text = amplitudMaxima.ToString(); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString(); plnEjeX.Points.Clear(); plnEjeX.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima) ); plnEjeX.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima) ); plnEjeY.Points.Clear(); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add( adaptarCoordenadas(0.0, -amplitudMaxima, tiempoInicial, amplitudMaxima)); }