Generando una onda sinusoidal realista en MATLAB

0

Estoy trabajando en una simulación en MATLAB y necesito una onda sinusoidal realista que tenga armónicos. Así que sé que habría armónicos en 2f , 3f ... pero no estoy seguro de cómo determinar su amplitud. Intenté utilizar la expansión de Fourier y Bessel, pero no estoy seguro de su implementación en MATLAB.

¿Qué puedo usar para ese propósito? Cualquier consejo apreciado.

    
pregunta Zed K.

1 respuesta

3

Tengo dos enfoques para hacerlo cuando trabajo en MATLAB.

El primero es generar una onda sinusoidal limpia y luego aplicar una función de distorsión. Por ejemplo, la aplicación de x * (1 + kx ^ 2) para k pequeña a su vector sinusoidal x proporcionaría pequeñas cantidades de armónicos uniformes. Use v ^ 3 para armónicos impares. k = 0 da el vector de señal original, aumente k para una mayor distorsión. Normalmente no calibro lo que hace k, solo lo hago y veo lo que me han dado, y lo adapto a gusto.

El segundo es invertir de forma cuadrada un vector que contiene su especificación de frecuencia. Así que crearías un vector como [dc_val, 1, second_level, tercer nivel, ...], y luego aplicarías ifft para convertirlo en un vector de tiempo. Tenga en cuenta que MATLAB es uno de los pocos idiomas que aún están bloqueados en las edades oscuras de BASIC y FORTRAN mediante el uso de matrices basadas en 1. Esto significa que el término dc es índice 1, término sinusoidal 2, segundo armónico 3, etc.

Tenga en cuenta que el vector de especificación de frecuencia es complejo, por lo que puede obtener una forma de onda de apariencia poco realista si usa coeficientes reales para todos sus armónicos, y todos se suman en la fase del estilo Gibbs. Si eso no es aceptable, el kludge es agregar una fase aleatoria a cada componente de frecuencia antes de la transformación.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas