Пример #1
0
        public static Señal multiplicarSeñales(Señal señal1, Señal señal2)
        {
            SeñalResultante resultado = new SeñalResultante();

            resultado.TiempoInicial      = señal1.TiempoInicial;
            resultado.TiempoFinal        = señal1.TiempoFinal;
            resultado.FrecuenciaMuestreo = señal1.FrecuenciaMuestreo;

            int indice = 0;

            foreach (var muestra in señal1.Muestras)
            {
                double nuevoValor = muestra.Y * señal2.Muestras[indice].Y;
                resultado.Muestras.Add(new Muestra(
                                           muestra.X,
                                           nuevoValor
                                           ));

                if (Math.Abs(nuevoValor) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima = Math.Abs(nuevoValor);
                }

                indice++;
            }

            return(resultado);
        }
Пример #2
0
        public static Señal escalaExponencial(
            Señal señalOrginal, double exponente)
        {
            SeñalResultante resultado =
                new SeñalResultante();

            resultado.TiempoInicial =
                señalOrginal.TiempoInicial;
            resultado.TiempoFinal =
                señalOrginal.TiempoFinal;
            resultado.FrecuenciaMuestreo =
                señalOrginal.FrecuenciaMuestreo;

            foreach (var muestra in señalOrginal.Muestras)
            {
                double nuevoValor =
                    Math.Pow(muestra.Y,
                             exponente);
                resultado.Muestras.Add(
                    new Muestra(muestra.X,
                                nuevoValor));
                if (Math.Abs(nuevoValor) >
                    resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima =
                        Math.Abs(nuevoValor);
                }
            }
            return(resultado);
        }
Пример #3
0
        public static Señal transformadaFourier(Señal señal)
        {
            SeñalResultante resultado = new SeñalResultante();

            resultado.TiempoInicial        = señal.TiempoInicial;
            resultado.TiempoFinal          = señal.TiempoFinal;
            resultado.FrecuenciaDeMuestreo = señal.FrecuenciaDeMuestreo;

            for (int k = 0; k < señal.Muestras.Count; k++)
            {
                Complex muestra = 0; // 0 + 0i
                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);
                }
                resultado.Muestras.Add(new Muestra(
                                           señal.Muestras[k].X,
                                           muestra.Magnitude
                                           ));
                if (Math.Abs(muestra.Magnitude) > señal.AmplitudMaxima)
                {
                    señal.AmplitudMaxima = Math.Abs(muestra.Magnitude);
                }
            }

            return(resultado);
        }
Пример #4
0
        public static Señal desplazarAmplitud(
            Señal señalOriginal, double cantidadDesplazamiento)
        {
            SeñalResultante resultado =
                new SeñalResultante();

            resultado.TiempoInicial      = señalOriginal.TiempoInicial;
            resultado.TiempoFinal        = señalOriginal.TiempoFinal;
            resultado.FrecuenciaMuestreo =
                señalOriginal.FrecuenciaMuestreo;

            foreach (var muestra in señalOriginal.Muestras)
            {
                double nuevoValor = muestra.Y + cantidadDesplazamiento;
                resultado.Muestras.Add(
                    new Muestra(
                        muestra.X,
                        nuevoValor)
                    );
                if (Math.Abs(nuevoValor) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima =
                        Math.Abs(nuevoValor);
                }
            }

            return(resultado);
        }
Пример #5
0
        public static Señal limiteInferior(
            Señal señal1, Señal señal2)
        {
            SeñalResultante resultado =
                new SeñalResultante();

            resultado.TiempoInicial =
                señal1.TiempoInicial;
            resultado.TiempoFinal =
                señal1.TiempoFinal;
            resultado.FrecuenciaMuestreo =
                señal1.FrecuenciaMuestreo;

            int indice = 0;

            foreach (var muestra in señal1.Muestras)
            {
                //Si f(x) <= g(x), entonces y(x) = f(x)
                if (muestra.Y <= señal2.Muestras[indice].Y)
                {
                    double nuevoValor = muestra.Y;
                }
                //Si f(x) > g(x), entonces y(x) = g(x)
                else
                {
                    double nuevoValor = señal2.Muestras[indice].Y;
                }

                indice++;
            }
            return(resultado);
        }
Пример #6
0
        public static Señal limiteSuperior(Señal señal1, Señal señal2)
        {
            SeñalResultante resultado = new SeñalResultante();

            resultado.TiempoInicial        = señal1.TiempoInicial;
            resultado.TiempoFinal          = señal1.TiempoFinal;
            resultado.FrecuenciaDeMuestreo = señal1.FrecuenciaDeMuestreo;

            int    indice = 0;
            double nuevoValor;

            foreach (var muestra in señal1.Muestras)
            {
                if (muestra.Y >= señal2.Muestras[indice].Y)
                {
                    nuevoValor = muestra.Y;
                }
                else
                {
                    nuevoValor = señal2.Muestras[indice].Y;
                }

                resultado.Muestras.Add(new Muestra(muestra.X, nuevoValor));

                if (Math.Abs(nuevoValor) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima = Math.Abs(nuevoValor);
                }

                indice++;
            }

            return(resultado);
        }
Пример #7
0
        public static Señal escalarAmplitud(Señal señalOriginal, double factorEscala)
        {
            SeñalResultante resultado = new SeñalResultante();

            resultado.TiempoInicial        = señalOriginal.TiempoInicial;
            resultado.TiempoFinal          = señalOriginal.TiempoFinal;
            resultado.FrecuenciaDeMuestreo = señalOriginal.FrecuenciaDeMuestreo;

            foreach (var muestra in señalOriginal.Muestras)
            {
                double nuevoValor = muestra.Y * factorEscala;
                resultado.Muestras.Add(new Muestra(muestra.X, nuevoValor));

                if (Math.Abs(nuevoValor) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima = Math.Abs(nuevoValor);
                }
            }

            return(resultado);
        }
Пример #8
0
        public static Señal transformadaFourier(Señal señal)
        {
            SeñalResultante resultado = new SeñalResultante();

            resultado.TiempoInicial      = señal.TiempoInicial;
            resultado.TiempoFinal        = señal.TiempoFinal;
            resultado.FrecuenciaMuestreo = señal.FrecuenciaMuestreo;
            resultado.FrecuenciasHz      = new List <double>();

            double indiceFourier = 0.0;

            for (int k = 0; k < señal.Muestras.Count; k++)
            {
                Complex muestra = 0; // 0 + 0i
                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);
                }

                resultado.Muestras.Add(new Muestra(señal.Muestras[k].X, muestra.Magnitude));
                if (Math.Abs(muestra.Magnitude) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima = Math.Abs(muestra.Magnitude);
                }

                if (k <= (señal.Muestras.Count / 2))
                {
                    double yMuestra = resultado.Muestras[k].Y;
                    if (yMuestra > indiceFourier)
                    {
                        indiceFourier = k;
                        double frecuenciaHz = (indiceFourier * resultado.FrecuenciaMuestreo) / señal.Muestras.Count;
                        resultado.FrecuenciasHz.Add(frecuenciaHz);
                    }
                }
            }

            double primeraFrecuencia = 0.0;
            double segundaFrecuencia = 0.0;

            foreach (double frecuenciaHz in resultado.FrecuenciasHz)
            {
                if (frecuenciaHz < 1000)
                {
                    if (primeraFrecuencia < frecuenciaHz)
                    {
                        primeraFrecuencia = frecuenciaHz;
                    }
                }
                else
                {
                    if (segundaFrecuencia < frecuenciaHz)
                    {
                        segundaFrecuencia = frecuenciaHz;
                    }
                }
            }

            resultado.FrecuenciasHz.Clear();
            resultado.FrecuenciasHz.Add(primeraFrecuencia);
            resultado.FrecuenciasHz.Add(segundaFrecuencia);

            return(resultado);
        }