Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        //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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }