Documente Academic
Documente Profesional
Documente Cultură
Ejemplo:
Promedio de la DFT de varias tramas sucesivas de 512 muestras.
Ejemplo:
Reconstrucción a partir de espectro promediado.
Sinusoide no coincidente
con base de la DFT:
Sinusoide coincidente con base de la DFT: un único punto en
frecuencia
Sinusoide no coincidente con base de la DFT: pico extendido a
componentes vecinos (derramamiento)
Alternativa: usar ventana de suavizado
Efecto de la ventana
Sinusoide enventanada
Espectro: espectro de la ventana centrado en la delta
Efecto:
ensanchamiento del pico
derramamiento espectral
Sinusoide enventanada
Espectro: espectro de la ventana centrado en la delta
Efecto:
ensanchamiento del pico
derramamiento espectral
Compromiso:
ancho lóbulo principal (resolución)
amplitud de lóbulos secundarios (derramamiento)
RELLENO DE CEROS
Considerar además de las muestras dadas por el enventanado,
una cierta
cantidad de muestras nulas Corresponde a un muestreo más
denso del espectro continuo. Equivale a una interpolación de
valores en frecuencia usando las muestras no nulas de la señal, ya
que las muestras nulas no intervienen en el cálculo de la DFT.
Asi en Matlab:
Mostrando la generación de la señal y el análisis de en audiorecorder.
Código en Matlab (Parte 1):
%parte 1
clc, close all, clear all
% Declaracion de valores de período y frecuencia
fmax=400;
duracion=2;
fs=10*fmax;
ts=1/fs;
tn=0:ts:duracion;
A=0.25;
nbits=24;
channels=1;
B=0.01;%REDUCIR EL VOLUMEN
%eje del tiempo o variable independiente
%Amplitud de la señal
yn=A*sin(2*pi*tn*100)+sin(2*pi*tn*200)+sin(2*pi*tn*300)+sin(2*pi*tn*40
0);
%visualización
subplot(1,4,1)
plot(tn,yn)
xlim([0 0.05])
N=length(yn);
nFFt=2;
while nFFt<N
nFFt=nFFt*16;
end
f=linspace(0,fs,nFFt);
Periodigrama=abs(fft(yn,nFFt));
subplot(1,4,2)
plot(f,Periodigrama)
axis([0 max(fs)/2 0 max(Periodigrama)])
%%%
while(1)
%generacion del sonido
sound(yn,fs)
%Iniciacion de la grabacion del audio
grabacion=audiorecorder(fs,nbits,channels);
%funcion de control de la grabacion
recordblocking(grabacion,duracion);
PARTE 2:
En esta parte con la ayuda del hadware Arduino y de su implementación, más el
sofware en Matlab, generamos la señal y lo graficamos mediante el periodograma
modificado, explicado en la teoría.
Código en Matlab:
clc, close all, clear all
% Declaracion de valores de período y frecuencia
A=0.25; %Amplitud de la señal
fmax=400;
duracion=5;
fs=192000;
ts=1/fs;
tn=0:ts:duracion;
%Parametros de grabacion
nbits=24;%frecuencia de muestreo calidad tipo CD
channels=1;%monofonico
%Generacion de la señal
yn=sin(2*pi*tn*100)+sin(2*pi*tn*200)+sin(2*pi*tn*300)+sin(2*pi*tn*400)
;
subplot(2,2,1)
plot(tn,yn)
title('Señal generada')
xlabel('tiempo(s)')
ylabel('amplitud')
xlim([0 0.5])
drawnow
N=length(yn);
nFFt=nbits;
while nFFt<N
nFFt=nFFt*nbits;
end
%Rango de la frecuencia
f=linspace(0,fs,nFFt);
%Periodigrama normal
Periodigrama=abs(fft(yn,nFFt));
subplot(2,2,2)
plot(f,Periodigrama)
title('Periodograma de la señal modoficada')
axis([0 fs/2 0 max(Periodigrama)])
drawnow
%%%%%
Sing=zeros(fs,1);
i=1;
while(1)
sound(yn,fs)
%salida del audio
S=0;
delete(instrfind({'port'},{'COM1'}));
puerto=serial('COM1');
puerto.BaudeRate=192000;
fopen(puerto);
while(i<=fs)
Sing=fscanf(puerto,'%d');
S(i)=Sing(1)*5/1024;
%%%%%
ta=linspace(0,duracion,length(5));
subplot(2,2,3)
plot(ta,S)
xlim([0 5])
drawnow
%%%periodograma modificado
N=length(S);
nFFt=2;
while nFFt<N
nFFt=nFFt*nbits;
end
%Definicion del rango de la frecuencia
f=linspace(0,fs,nFFt);
%Periodograma normal
Periodigrama=abs(fft(S,nFFt));
subplot(2,2,4)
plot(f,Periodigrama)
axis([0 max(f)/2 0 max(Periodigrama)])
drawnow
i;
i=i+1;
end
i=1;
S=0;
Periodigrama=0;
end
fclose(puerto);
delete(puerto);
PARTE 3:
Utilización del periodograma modificado y la teoría del enventanado.
El “Periodograma Modificado” usa una ventana no-rectangular y por lo tanto tiene que
ser escalado para dar cuenta de la perdida de potencia debido a la ventana. Este
escalamiento es requerido para hacer el Periodograma Modificado asintóticamente sin
desplazamiento: donde el factor de escalamiento es (U=1 para una ventana rectangular)
Como en el periodograma normal, la TF discreta es usada (FFT).
Asi en Matlab:
Así nos el periodograma modificado nos ayuda a visualizar de una mejor manera
como se van extendiendo la distorsión de la onda en una milésima escala de
afectación o movimiento.
%periodigrama modificado
N=length(yn);
nFFt=2;
while nFFt<N
nFFt=32*nFFt*2;
end
%periodigrama simple
P1=abs(fft(yn,nFFt));
f=linspace(0,fs,nFFt);
%periodigrama modificado
%generacion de ventanas
ventana1=blackmanharris(length(yn));
ventana2=hanning(length(yn));
%enventanado de la señal
yn1_env=yn.*ventana1';
yn2_env=yn.*ventana2';
%periodigrama simple vs modificado
p1_m=abs(fft(yn1_env,nFFt));
p2_m=abs(fft(yn2_env,nFFt));
figure
subplot(2,1,1)
plot(f,P1);
title('Periodograma simple')
subplot(2,1,2)
hold on
plot(f, 10*log10(p1_m),'b');
plot(f, 10*log10(p2_m),'g');
title('Periodigrama modificado')
xlabel('Frecuencia(Hz)');
ylabel('Potencia');
legend('Periodigrama modificado-Hanning','Periodograma-
modificado.BH4t')
axis([0 fs/2 0 max(10*log10(P1))]);
Bibliografía:
http://www.dicis.ugto.mx/profesores/arturogp/documentos/Analisis
%20Espectral/Lectura%205%20-%20Analisis%20Espectral.pdf
https://www.eumus.edu.uy/eme/ensenanza/electivas/dsp/presentaci
ones/clase06.pdf