public static Señal Convolucionar(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; } } valorMuestra /= resultado.FrecuenciaMuestreo; Muestra muestra = new Muestra(instanteActual, valorMuestra); resultado.Muestras.Add(muestra); instanteActual += periodoMuestreo; } return(resultado); }
public static Señal sumar(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); }
//se hace abstracta para no necesitar crear instancias public static Señal sumar(Señal sumando1, Señal sumando2) { //construimos la señal resultado SeñalPersonalizada resultado = new SeñalPersonalizada(); //tomamos los valores de tiempo y muestreo resultado.TiempoInicial = sumando1.TiempoInicial; resultado.TiempoFinal = sumando1.TiempoFinal; resultado.FrecuenciaMuestreo = sumando1.FrecuenciaMuestreo; //sumamos muestra por muestra //recorremos 1 lista de muestras y a la 2 señal accedemos por un indice 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 correlacion(Señal operando1, Señal operando2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); resultado.TiempoInicial = operando1.TiempoInicial - (operando2.TiempoFinal - operando2.TiempoInicial); resultado.TiempoFinal = operando1.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 m = 0; m < operando2.Muestras.Count; m++) { if ((m + n) >= 0 && (m + n) < operando2.Muestras.Count) { valorMuestra += operando1.Muestras[m].Y * operando2.Muestras[m + n].Y; } } valorMuestra /= resultado.FrecuenciaMuestreo; Muestra muestra = new Muestra(instanteActual, valorMuestra); resultado.Muestras.Add(muestra); instanteActual += periodoMuestreo; } return(resultado); }
public static Señal correlacion(Señal señal1, Señal señal2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); resultado.tiempoInicial = señal1.tiempoInicial - (señal2.tiempoFinal - señal2.tiempoInicial); resultado.tiempoFinal = señal1.tiempoFinal; resultado.frecuenciaMuestreo = señal1.frecuenciaMuestreo; double periodoMuestreo = 1 / resultado.frecuenciaMuestreo; double cantidadMuestrasResultado = resultado.frecuenciaMuestreo * (resultado.tiempoFinal - resultado.tiempoInicial); double instanteActual = resultado.tiempoInicial; for (int n = 0; n < cantidadMuestrasResultado; n++) { double valorMuestra = 0; for (int k = 0; k < señal2.muestras.Count; k++) { if ((k + n) < señal2.muestras.Count) { valorMuestra += señal1.muestras[k].y * señal2.muestras[k + n].y; } } valorMuestra /= resultado.frecuenciaMuestreo; Muestra muestra = new Muestra(instanteActual, valorMuestra); resultado.muestras.Add(muestra); instanteActual += periodoMuestreo; } return(resultado); }
public static Señal transformar(Señal señal) { SeñalPersonalizada transformada = new SeñalPersonalizada(); transformada.TiempoInicial = señal.TiempoInicial; transformada.TiempoFinal = señal.TiempoFinal; transformada.FrecuenciaMuestreo = señal.FrecuenciaMuestreo; for (int k = 0; k < señal.Muestras.Count; k++) { Complex muestra = 0; for (int n = 0; n < señal.Muestras.Count; n++) { muestra += señal.Muestras[n].Y * Complex.Exp(-2 * Math.PI * Complex.ImaginaryOne * k * n / señal.Muestras.Count); } transformada.Muestras.Add( new Muestra(k, muestra.Magnitude) ); } return(transformada); }
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 multiplicar(Señal factor1, Señal factor2) { SeñalPersonalizada resultado = new SeñalPersonalizada(); resultado.TiempoInicial = factor1.TiempoInicial; resultado.TiempoFinal = factor1.TiempoFinal; resultado.FrecuenciaMuestreo = factor1.FrecuenciaMuestreo; int indice = 0; foreach (Muestra muestra in factor1.Muestras) { Muestra muestraResultado = new Muestra(); muestraResultado.X = muestra.X; muestraResultado.Y = muestra.Y * factor2.Muestras[indice].Y; indice++; resultado.Muestras.Add(muestraResultado); } return(resultado); }
public static Señal sumar(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; 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 transformar(Señal señal) { SeñalPersonalizada transformada = new SeñalPersonalizada(); transformada.TiempoInicial = señal.TiempoInicial; transformada.TiempoFinal = señal.TiempoFinal; transformada.FrecuenciaMuestreo = señal.FrecuenciaMuestreo; for (int k = 0; k < señal.Muestras.Count; k++) { Complex muestra = 0; for (int n = 0; n < señal.Muestras.Count; n++) { // Fórmula de la transformada de Fourier muestra += señal.Muestras[n].Y * Complex.Exp((-2 * Math.PI * Complex.ImaginaryOne * k * n) / señal.Muestras.Count); } // Magnitude permite acceder a un número imaginario como número real. transformada.Muestras.Add(new Muestra((double)k / (double)señal.Muestras.Count, muestra.Magnitude)); } return(transformada); }
public static Señal transformar(Señal señal) { SeñalPersonalizada transformada = new SeñalPersonalizada(); transformada.TiempoInicial = señal.TiempoInicial; transformada.TiempoFinal = señal.TiempoFinal; transformada.FrecuenciaMuestreo = señal.FrecuenciaMuestreo; for (int k = 0; k < señal.Muestras.Count; k++) { // si se pone solo la parte real la parte imaginaria se toma como 0 Complex muestra = 0; //sumatoria //imaginaryOne le pone 0 a la parte real y 1 a la parte imaginaria for (int n = 0; n < señal.Muestras.Count; n++) { muestra += señal.Muestras[n].Y * Complex.Exp(-2 * Math.PI * Complex.ImaginaryOne * k * n / señal.Muestras.Count); } // para obtener los numeros reales de un numero complejo se utiliza Magnitude transformada.Muestras.Add(new Muestra((double)k / (double)señal.Muestras.Count, muestra.Magnitude)); } return(transformada); }