Contents

No leakage

close all
Fs=32e3;    %Freq. muestreo
Nsamp=64;   %No puntos de DFT
t=0:1/Fs:(1/Fs)*(Nsamp-1);
f_tone=2e3;     %tone frequency
x=sin(2*pi*t*f_tone);
X=fft(x);
stem(0:(Nsamp/2)-1,abs(X(1:Nsamp/2)))
title('DFT')
xlabel('Frecuencias discretas')

%Todos los tonos cuya frecuencia sea m*Fs/Nsamp con m=0,1,...Nsamp-1
%tendrán un número de periodos entero y por lo tanto no tendrán leakage.
%Esos tonos son:

tonos=(0:Nsamp-1)*Fs/Nsamp

% Representando la señal temporal se puede ver cómo efectivamente
% entran un número de ciclos entero:

Fcont=1e6;  %Frecuencia muy alta para simular las señales contínuas
tcont=0:1/Fcont:(1/Fs)*(Nsamp-1);
xcont=sin(2*pi*tcont*f_tone);
figure,plot(tcont*1e3,xcont)
hold on
stem(t*1e3,x,'g')
legend('Señal continua','Señal muestreada')
title('Simulacion del muestreo')
xlabel('Time [ms]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
tonos =

  Columns 1 through 7

           0         500        1000        1500        2000        2500        3000

  Columns 8 through 14

        3500        4000        4500        5000        5500        6000        6500

  Columns 15 through 21

        7000        7500        8000        8500        9000        9500       10000

  Columns 22 through 28

       10500       11000       11500       12000       12500       13000       13500

  Columns 29 through 35

       14000       14500       15000       15500       16000       16500       17000

  Columns 36 through 42

       17500       18000       18500       19000       19500       20000       20500

  Columns 43 through 49

       21000       21500       22000       22500       23000       23500       24000

  Columns 50 through 56

       24500       25000       25500       26000       26500       27000       27500

  Columns 57 through 63

       28000       28500       29000       29500       30000       30500       31000

  Column 64

       31500


PowerFreq =

    0.5000


PowerTime =

    0.5079

Leakage

f_tone=2.25e3;     %tone frequency
x=sin(2*pi*t*f_tone);
X=fft(x);
figure,stem(0:(Nsamp/2)-1,abs(X(1:Nsamp/2)))
title('DFT')
xlabel('Frecuencias discretas')

%Al intentar representar un tono que no sea multiplo entero de Fs/Nsamp,
%vemos como se produce el "goteo"

% Representando la señal temporal se puede ver cómo efectivamente
% entran un número de ciclos entero:

Fcont=1e6;  %Frecuencia muy alta para simular las señales contínuas
tcont=0:1/Fcont:(1/Fs)*(Nsamp-1);
xcont=sin(2*pi*tcont*f_tone);
figure,plot(tcont*1e3,xcont)
hold on
stem(t*1e3,x,'g')
legend('Señal continua','Señal muestreada')
title('Simulacion del muestreo')
xlabel('Time [ms]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
PowerFreq =

    0.5000


PowerTime =

    0.5030

Muestreo en Frecuencia SIN Leakage

Veamos ahora cómo se produce el muestreo en frequencia

f_tone=2.5e3;     %tone frequency a una frecuencia válida

x=sin(2*pi*t*f_tone); %Genero la señal temporal
Nsampcont=2^20;         %numero de muestras alto para simular una TF continua
Xcont=fft(x,Nsampcont); %Genero la TF continua
X=fft(x);               %Genero la TF discreta

fcont=(0:Nsampcont-1)*Fs/Nsampcont; %Frecuencias para represetar la TF continua
figure,
plot(1e-3*fcont(1:length(fcont)/2),abs(Xcont(1:Nsampcont/2))) %Dibujo espectro positivo de TF continua
f=(0:Nsamp-1)*Fs/Nsamp;         %Calculo frecuencas para la TF discreta
hold on
stem(1e-3*f(1:Nsamp/2),abs(X(1:Nsamp/2)),'g')    %Dibujo espectro positivo de TF discreta

title('Muestro en frecuencia con Leakage')
legend('Espectro continuo','Espectro muestreado')
xlabel('Freq. [kHz]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
PowerFreq =

    0.5000


PowerTime =

    0.5079

Muestreo en Frecuencia CON Leakage

Veamos ahora cómo se produce el muestreo en frequencia

f_tone=2.25e3;     %tone frequency a una frecuencia NO válida

x=sin(2*pi*t*f_tone); %Genero la señal temporal
Nsampcont=2^20;         %numero de muestras alto para simular una TF continua
Xcont=fft(x,Nsampcont); %Genero la TF continua
X=fft(x);               %Genero la TF discreta

fcont=(0:Nsampcont-1)*Fs/Nsampcont; %Frecuencias para represetar la TF continua
figure,
plot(1e-3*fcont(1:length(fcont)/2),abs(Xcont(1:Nsampcont/2))) %Dibujo espectro positivo de TF continua
f=(0:Nsamp-1)*Fs/Nsamp;         %Calculo frecuencas para la TF discreta
hold on
stem(1e-3*f(1:Nsamp/2),abs(X(1:Nsamp/2)),'g')    %Dibujo espectro positivo de TF discreta

title('Muestro en frecuencia sin Leakage')
legend('Espectro continuo','Espectro muestreado')
xlabel('Freq. [kHz]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
PowerFreq =

    0.5000


PowerTime =

    0.5030

Doble de puntos de muestreo

Si únicamente doblo el número de muestras, estas me caerán no solo en los nulos de los lóbulos secundarios sino también en los máximos, pues estoy metiendo el doble de puntos en el mismo espectro

f_tone=2.5e3;     %tone frequency a una frecuencia válida
Nsamp2=2*Nsamp;

t=0:1/Fs:(1/Fs)*(Nsamp2-1);

x=sin(2*pi*t*f_tone); %Genero la señal temporal
Nsampcont=2^20;         %numero de muestras alto para simular una TF continua
Xcont=fft(x,Nsampcont); %Genero la TF continua
X=fft(x,Nsamp2);               %Genero la TF discreta con el doble de puntos

fcont=(0:Nsampcont-1)*Fs/Nsampcont; %Frecuencias para represetar la TF continua
figure,
plot(1e-3*fcont(1:length(fcont)/2),abs(Xcont(1:Nsampcont/2))) %Dibujo espectro positivo de TF continua
f=(0:Nsamp2-1)*Fs/Nsamp2;         %Calculo frecuencas para la TF discreta
hold on
stem(1e-3*f(1:Nsamp2/2),abs(X(1:Nsamp2/2)),'g')    %Dibujo espectro positivo de TF discreta

title('Muestro en frecuencia con 2*Nsamp --> Leakage')
legend('Espectro continuo','Espectro muestreado')
xlabel('Freq. [kHz]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
PowerFreq =

    0.5000


PowerTime =

    0.5039

Doble de puntos de muestreo y doble Fs

Al doblar tamibén la frecuencia de muestreo obligo a "estirar" el doble los lóbulso secundarios, de manera que ahora todas las muestras caen en nulos (excepto la del tono)

f_tone=2.5e3;     %tone frequency a una frecuencia válida
Nsamp2=2*Nsamp;
Fs2=2*Fs;

t=0:1/Fs2:(1/Fs2)*(Nsamp2-1);

x=sin(2*pi*t*f_tone); %Genero la señal temporal
Nsampcont=2^20;         %numero de muestras alto para simular una TF continua
Xcont=fft(x,Nsampcont); %Genero la TF continua
X=fft(x,Nsamp2);               %Genero la TF discreta con el doble de puntos

fcont=(0:Nsampcont-1)*Fs/Nsampcont; %Frecuencias para represetar la TF continua
figure,
plot(1e-3*fcont(1:length(fcont)/2),abs(Xcont(1:Nsampcont/2))) %Dibujo espectro positivo de TF continua
f=(0:Nsamp2-1)*Fs/Nsamp2;         %Calculo frecuencas para la TF discreta
hold on
stem(1e-3*f(1:Nsamp2/2),abs(X(1:Nsamp2/2)),'g')    %Dibujo espectro positivo de TF discreta

title('Muestro en frecuencia con 2*Nsamp y 2*Fs--> No Leakage')
legend('Espectro continuo','Espectro muestreado')
xlabel('Freq. [kHz]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
PowerFreq =

    0.5000


PowerTime =

    0.5039

Doble de puntos de muestreo y doble Fs con dos tonos

Metamos ahora dos tonos para ver que todo sigue funcionando

f_tone1=2.5e3;     %tone frequency a una frecuencia válida
f_tone2=12.5e3;     %tone frequency a una frecuencia válida
Nsamp2=2*Nsamp;
Fs2=2*Fs;

t=0:1/Fs2:(1/Fs2)*(Nsamp2-1);

x=sin(2*pi*t*f_tone1)+sin(2*pi*t*f_tone2); %Genero la señal temporal
Nsampcont=2^20;         %numero de muestras alto para simular una TF continua
Xcont=fft(x,Nsampcont); %Genero la TF continua
X=fft(x,Nsamp2);               %Genero la TF discreta con el doble de puntos

fcont=(0:Nsampcont-1)*Fs/Nsampcont; %Frecuencias para represetar la TF continua
figure,
plot(1e-3*fcont(1:length(fcont)/2),abs(Xcont(1:Nsampcont/2))) %Dibujo espectro positivo de TF continua
f=(0:Nsamp2-1)*Fs/Nsamp2;         %Calculo frecuencas para la TF discreta
hold on
stem(1e-3*f(1:Nsamp2/2),abs(X(1:Nsamp2/2)),'g')    %Dibujo espectro positivo de TF discreta

title('Muestro en frecuencia con 2*Nsamp --> NO Leakage [Dos tonos]')
legend('Espectro continuo','Espectro muestreado')
xlabel('Freq. [kHz]')

PowerFreq=sum(abs(X).^2)/length(X)^2
PowerTime=var(x)
PowerFreq =

    1.0000


PowerTime =

    1.0079