示例#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 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;


            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);
        }
示例#3
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);
        }
示例#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);
        }
        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.FrecuenciaMuestreo =
                señal1.FrecuenciaMuestreo;

            int indice = 0;

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

                else
                {
                    double nuevoValor = señal2.Muestras[indice].Y;
                }

                indice++;
            }
            return(resultado);
        }
        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;
            //Integral

            for (int k = 0; k < señal.Muestras.Count; k++)
            {
                //Xk
                Complex muestra = 0; // 0 + 01
                for (int n = 0; n < señal.Muestras.Count; n++)
                {                    //Sumatoria n= 0 + acumulados
                    muestra +=       //Xn       * (e^-2Pi*i*k*n)/N
                               señal.Muestras[n].Y * Complex.Exp((-2 * Math.PI * Complex.ImaginaryOne * k * n) / señal.Muestras.Count);
                }
                //Para graficar num complejos se camia el valor complejo a valor absoluto o magnitud
                resultado.Muestras.Add(new Muestra(señal.Muestras[k].X, muestra.Magnitude));
                //Estoy bien mareada :( </3
                if (Math.Abs(muestra.Magnitude) > señal.AmplitudMaxima)
                {
                    señal.AmplitudMaxima = Math.Abs(muestra.Magnitude);
                }
                // ( i * fm)/ N (num de muestras)indice de Fourier a Hz
            }
            return(resultado);
        }
示例#7
0
        public static Señal limiteSuperior(Señal señal1, Señal señal2)
        {
            SeñalResultante resultado = new SeñalResultante();

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

            int indice = 0;

            foreach (var muestra in señal1.Muestras)
            {
                double nuevoValor = 0;

                if (muestra.Y >= señal2.Muestras[indice].Y)
                {
                    nuevoValor = muestra.Y;
                }
                else if (muestra.Y < señal2.Muestras[indice].Y)
                {
                    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);
                 * }*/

                //double efedeequis = muestra.Y * señal1.Muestras[indice].Y;
                //double gedeequis = muestra.Y * señal2.Muestras[indice].Y;

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

                /*resultado.Muestras.Add(new Muestra(muestra.X, gedeequis));
                 *
                 * if (efedeequis >= gedeequis)
                 * {
                 *  resultado.AmplitudMaxima = efedeequis;
                 * }
                 *
                 * if (efedeequis < gedeequis)
                 * {
                 *  resultado.AmplitudMaxima = gedeequis;
                 * }*/

                indice++;
            }
            return(resultado);
        }
示例#8
0
        public static Señal desplazamientoAmplitud(Señal señalOriginal, double factorDesplazamiento)
        {
            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)
            {
                resultado.Muestras.Add(new Muestra(muestra.X, muestra.Y + factorDesplazamiento));
            }

            return(resultado);
        }
示例#9
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)
            {
                double valor1     = muestra.Y;
                double valor2     = señal2.Muestras[indice].Y;
                double nuevoValor =
                    (muestra.Y +
                     señal2.Muestras[indice].Y) / 2.0;
                if (valor1 < valor2)
                {
                    nuevoValor = valor1;
                }
                else
                {
                    nuevoValor = valor2;
                }


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

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

                indice++;
            }
            return(resultado);
        }
示例#10
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.FrecuenciaMuestreo = señalOriginal.FrecuenciaMuestreo;

            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);
        }
示例#11
0
        public static Señal desplazamientoAmplitud(Señal señalDesplazamiento, double cantidadDesplazamiento)
        {
            SeñalResultante resultado = new SeñalResultante();

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

            foreach (var muestra in señalDesplazamiento.Muestras)
            {
                double nuevoValor = muestra.Y + cantidadDesplazamiento;
                resultado.Muestras.Add(new Muestra(muestra.X, nuevoValor)); //El valor se cambia con todos los datos ingresados

                if (Math.Abs(nuevoValor) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima = Math.Abs(nuevoValor);
                }
            }
            return(resultado);
        }
示例#12
0
        public static Señal desplazarAmplitud(Señal señalOriginal, double factorDesplaze)
        {
            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 + factorDesplaze;
                resultado.Muestras.Add(new Muestra(muestra.X, NuevoValor));
                if (Math.Abs((NuevoValor)) > resultado.AmplitudMaxima)
                {
                    resultado.AmplitudMaxima = Math.Abs(NuevoValor);
                }
                ;
            }
            return(resultado);
        }
示例#13
0
        public static Señal limiteSuperior(Señal señal1, Señal señal2)
        {
            SeñalResultante resultado = new SeñalResultante();

            /*SeñalResultante resultado1 = new SeñalResultante();
            *  SeñalResultante resultado2 = new SeñalResultante();*/

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

            /*resultado1.TiempoInicial = señal1.TiempoInicial;
             * resultado1.TiempoFinal = señal1.TiempoFinal;
             * resultado1.FrecuenciaMuestreo = señal1.FrecuenciaMuestreo;
             * resultado2.TiempoInicial = señal2.TiempoInicial;
             * resultado2.TiempoFinal = señal2.TiempoFinal;
             * resultado2.FrecuenciaMuestreo = señal2.FrecuenciaMuestreo;*/
            int indice = 0;

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

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


            /*foreach (var muestra in señal1.Muestras)
             * {
             *  resultado1.Muestras.Add(new Muestra(muestra.X, muestra.Y));
             *
             *  if (Math.Abs(muestra.Y) > resultado1.AmplitudMaxima)
             *  {
             *      resultado1.AmplitudMaxima  = Math.Abs(muestra.Y);
             *  }
             * }
             * foreach(var muestra in señal2.Muestras)
             * {
             *  double nuevoValor = muestra.Y;
             *  resultado2.Muestras.Add(new Muestra(muestra.X, nuevoValor));
             *
             *  if (Math.Abs(nuevoValor) > resultado2.AmplitudMaxima)
             *  {
             *      resultado2.AmplitudMaxima = Math.Abs(nuevoValor);
             *  }
             * }
             * if(resultado1.AmplitudMaxima >= resultado2.AmplitudMaxima)
             *  return resultado1;
             * else
             *  return resultado2;*/
            return(resultado);
        }