Demostrando el efecto de aliasing


7

¿Cómo se ve la señal cuando no usamos la velocidad de Nyquist para eliminar el alias de una señal durante el muestreo?

Supongamos que la señal es sinusoidal, con una frecuencia de 500 Hz y una amplitud de 2.

signal = 2*cos(2*pi*500*t)

Si lo muestreo (reemplazando t = nTs, Ts = período de muestreo yn representan el número de muestras) y graficando las señales muestreadas con un período de muestreo diferente usando el comando subplot en MATLAB, ¿cómo podría identificar el alias en una señal muestreada?

Aquí está el código de ejemplo que trazó dos señales, una a la velocidad de Nyquist y la otra a la velocidad de Nyquist:

A = 2;
Fmax = 10;
Fs = 2*Fmax;
n = 0:1/Fs:1;
Cont = A*sin(2*pi*(Fmax/Fs)*n);
Cont1 = A*sin(2*pi*(Fmax/18)*n);
subplot(2,1,1)
stem(n,Cont)
hold on
stem(n,Cont1)

y aquí está la forma de onda:

Ingrese la descripción de la imagen aquí

No pude identificar el aliasing. ¿Cómo afectó la señal cuando la tasa Nyquist no se usó?


Debido a un error, su ejemplo no era, de hecho, muestrear a menos de la mitad de la frecuencia de su señal de prueba. Intente muestrear una señal de 1 MHz a 1 Hz.
hotpaw2

Respuestas:


8

No se puede identificar el alias con una simple sinusoide a una frecuencia específica y de alguna manera ese es el objetivo de tratar de evitarlo. No puede saber si la sinusoide que está "mirando" esQ Hz o 2Fs-QHz.

Un solo componente sinusoidal con alias se parece a un sinusoide sin alias. Si desea experimentar aliasing, debe intentarlo con una forma de onda más compleja o una sinusoide que está cambiando en el tiempo.

Una forma de "experimentar alias" es submuestrear un chirrido de la siguiente manera:

Fs = 8000;t=0:(1./Fs):(5-1./Fs);p=2.*pi.*t; %Sampling Frequency, Time Vector, Phase Vector
y1 = chirp(t,0,5,Fs/2.0); %Create a chirp that goes from DC to Fs/2.0
spectrogram(y1); %Have a look at it through spectrogram, please pay attention at the axis labels. This is basically going to be a "line" increasing with time.
soundsc(y1,Fs); %Listen to it...It clearly "goes up" in frequency
y2 = chirp(t,0,5,Fs); %Now create a chirp that goes from DC to Fs
spectrogram(y2); %Have a look at it through spectrogram
soundsc(y2,Fs); %Listen to it...Do you "get" the folding of the spectrum?

En general, puede pensar en el muestreo como modulación porque esto es lo que está sucediendo efectivamente en el elemento de muestra y retención de un convertidor ADC.

Esto le permitirá comprender más fácilmente conceptos como el submuestreo, por ejemplo (y aplicaciones en las que está perfectamente bien muestrear a tasas más bajas que las de Nyquist). Pero también, puede cargar un archivo WAV en MATLAB (con 'wavread') que contenga alguna señal más compleja y antes de escucharlo con 'soundsc', simplemente multiplíquelo con una onda "cuadrada" * (es posible que desee buscar la función 'cuadrado') en alguna frecuencia inferior a la del archivo WAVFs. Esto introducirá efectivamente la característica clave (no deseada) del alias que es este plegamiento del espectro . El resultado no es muy agradable, por lo que es posible que desee mantener el volumen de sus altavoces bajo.

Espero que esto ayude.

* EDITAR: Obviamente, "cuadrado" devuelve un cuadrado con una amplitud en el intervalo [-1,1] por lo que antes de multiplicarlo con su señal sería mejor reescalarlo como:

aSquareWave = (square(100.*p)+1.0)/2.0 % Where p is the phase vector and here we are producing a square wave at 100Hz (given an Fs of 8kHz as above). aSquareWave's amplitude is now in the interval [0,1]

6

Tienes la idea correcta, pero un error clave fue arruinar tus resultados.

n=0:1/Fs:1;

Al hacer que el tiempo incremente 1 / Fs, implícitamente está haciendo que las unidades de tiempo sean segundos. En otras palabras, "0" es 0 segundos y "1" es 1 segundo.

Cont = A*sin(2*pi*(Fmax/Fs)*n);

Al normalizar la frecuencia sinusoide por Fs, está asumiendo implícitamente que la unidad de muestra es 1 / Fs segundos. Es por eso que estaba obteniendo muchas muestras para un solo ciclo sinusoide cuando tenía la intención de tener solo dos muestras por ciclo (la tasa de Nyquist). Por cierto, cualquiera de las unidades de muestra está bien (1 segundo o 1 / Fs segundo), solo necesita ser consistente.

Aquí está mi intento de lo que creo que pretendías.

A = 2;
Fmax = 10;
Fs = 2*Fmax;
n=0:1/Fs:1;
Cont = A*cos(2*pi*Fmax*n);
Cont1 = A*cos(2*pi*Fmax*(20/18)*n);
subplot(2,1,1)
stem(n,Cont)
subplot(2,1,2)
stem(n,Cont1)

Cambié el "pecado" a "cos" porque estaba alcanzando todos los puntos cero sinusoides en lugar de los picos. ingrese la descripción de la imagen aquí


0

Creo que necesita aumentar la frecuencia del tamaño o usar pasos mucho más grandes en el muestreo.

El alias no aparece si tiene una función muy suave. Por ejemplo, una función constante no produce alias cualquiera que sea el muestreo que utilice.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.