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); }
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); }
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); }
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 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); }
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); }
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); }
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); }