public static Senal correlacionar(Senal operando1, Senal operando2) { SenalPersonalizada resultado = new SenalPersonalizada(); resultado.TiempoInicial = operando1.TiempoInicial - operando2.TiempoFinal; resultado.TiempoFinal = operando1.TiempoFinal; resultado.FrecMuestreo = operando1.FrecMuestreo; double periodoMuestreo = 1 / resultado.FrecMuestreo; double duracionSenal = resultado.TiempoFinal - resultado.TiempoInicial; double cantidadMuestrasResultado = duracionSenal * resultado.FrecMuestreo; 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.FrecMuestreo; Muestra muestra = new Muestra(instanteActual, valorMuestra); resultado.Muestras.Add(muestra); instanteActual += periodoMuestreo; } return(resultado); }
public static Senal sumar(Senal suma1, Senal suma2) { //construimos la señal resultado SenalPersonalizada resultado = new SenalPersonalizada(); //sumamos muestra por muestra resultado.TiempoInicial = suma1.TiempoInicial; resultado.TiempoFinal = suma1.TiempoFinal; resultado.FrecMuestreo = suma1.FrecMuestreo; //recorremos 1 lista de muestras y a la 2 señal accedemos por un indice int indice = 0; foreach (Muestra muestra in suma1.Muestras) { Muestra muestraResultado = new Muestra(); muestraResultado.x = muestra.x; muestraResultado.y = muestra.y + suma2.Muestras[indice].y; indice++; resultado.Muestras.Add(muestraResultado); } return(resultado); }
public static Senal transformar(Senal senal) { SenalPersonalizada transformada = new SenalPersonalizada(); transformada.TiempoInicial = senal.TiempoInicial; transformada.TiempoFinal = senal.TiempoFinal; transformada.FrecMuestreo = senal.FrecMuestreo; for (int k = 0; k < senal.Muestras.Count; k++) { Complex muestra = 0; for (int n = 0; n < senal.Muestras.Count; n++) { muestra += senal.Muestras[n].y * Complex.Exp(-2 * Math.PI * Complex.ImaginaryOne * k * n / senal.Muestras.Count); } transformada.Muestras.Add(new Muestra((double)k / (double)senal.Muestras.Count, muestra.Magnitude)); } return(transformada); }