You are on page 1of 9

PROGRAMA DE INGENIERÍA MECATRÓNICA

UNIVERSIDAD AUTONOMA DE BUCARAMANGA - UNAB


LABORATORIO DE SEÑALES 4

1). Determine la Transformada en tiempo discreto de Fourier (DTFT) de ( )


( ) ( ), Como la secuencia X(n) es absolutamente sumable, entonces su
transformada discreta de Fourier existe.

Puesto que ( ) es una función compleja, tendremos que dibujar su magnitud y


su ángulo ( o su parte real e imaginaria) con respecto de w separadamente para
visualizar ( ). Ahora w es una variable real entre - y + , lo cual significa
que solo podemos dibujar parte de la función ( ) utilizando Matlab, Utilizando
dos propiedades importantes de la transformada discreta de Fourier, podemos
reducir el dominio de w a [0,π]. Si x(n) es de duración finita, entonces Matlab no
puede ser usada directamente para computar ( ) desde x(n), sin embargo
podemos utilizarla para evaluar la expresión ( ) sobre [0,π] Frecuencias y
después dibujar su magnitud y su ángulo ( o parte real e imaginaria).
Implicaciones: Para dibujar ( ) ahora necesitamos considerar únicamente
medio periodo de ( ) Generalmente este periodo es escogido para ser w entre
[0,π]. Evalué ( ) a 501 puntos equiespaciados entre [0,π], dibuje su
magnitud, ángulo, parte real y parte imaginaria.
1-a) Copiar en Matlab el siguiente código y describir con sus palabras que está
realizándose en cada fila del script. Explicar con sus propias palabras que
procedimiento se está realizando en el punto 1-a)?.
w=[0:1:500]*pi/500; % Eje dividido en 501 puntos
X = exp(j*w)./(exp(j*w)-0.5*ones (1,501));
magX=abs(X); angX=angle(X);
realX=real(X) ; imagX =imag(X);
subplot(2,2,1); plot (w/pi,magX) ;grid
xlabel('frecuencia en unidades de pi'); title ('magnitud parte real'); ylabel
('Magnitud')
subplot(2,2,3); plot (w/pi,angX) ;grid
xlabel('frecuencia en unidades de pi'); title ('Angulo'); ylabel ('radianes')
subplot(2,2,2); plot (w/pi,realX); grid
xlabel('frecuencia en unidades de pi'); title ('Parte Real'); ylabel ('Real')
subplot(2,2,4); plot (w/pi,imagX); grid
xlabel('frecuencia en unidades de pi'); title ('Parte Imaginaria'); ylabel ('Imaginaria')

2) Determine la transformada de Fourier de la siguiente secuencia de duración


finita.
X(n)={1,2,3,4,5} para n = -1 : 3

Si x(n) es de duración finita, entonces Matlab puede ser usada para computar
( ) numéricamente a cualquier frecuencia w. Entonces ( ) se evalúa a
frecuencias equiespaciadas entre [0,π], siendo implementadas como una
operación de multiplicación vectorial. Para entender esto asumamos que la
secuencia x(n) tiene N muestras entre n1 ≤n≤nN (no es necesario que este
siempre entre [0, N-1] y si deseamos evaluar ( ) a (M+1 ) equiespaciadas
frecuencias entre [0,π],

En Matlab representamos las secuencias e índices como vectores fila,


consecuentemente tomando la transpuesta, obtenemos.

En Matlab se escribe entonces.


K=[0:M]; n=[n1:n2]
X=x*(exp(-j*pi/M)).^(n’*k);
1-b) Compute numéricamente la transformada de Fourier en tiempo discreto de la
secuencia X(n)={1,2,3,4,5} para n = [-1 : 3] , con M= 501 frecuencias
equiespaciadas entre [0,π].
Dibuje su Magnitud, ángulo, parte real, parte imaginaria.

3) Sea ( ) ( ( ) ), 0≤n≤10. Determine ( ) e investigue su


periocidad.
Puesto que x(n) es complejo, se satisface la periocidad, consecuentemente es
únicamente definida sobre un periodo de 2π , ( 0 π, frecuencias positivas, π 2
π, frecuencias negativas). Sin embargo nosotros vamos a evaluarla y dibujarlo a
401 frecuencias sobre dos periodos entre [-2 π y 2 π], para observar su
periocidad.
3-a) Grafique x(n), copie el siguiente script de Matlab y ejecútelo.
3-b) Explique paso por paso cada línea de código
3-c) Sea ( ) ( ( ) ), para , 0≤n≤20, evalué y grafique la magnitud y
la fase en un intervalo entre [-2 π y 2 π], a 501 frecuencias. Observe su
periocidad y concluya.

clear all,clc
n=0:10; x=(0.9*exp(j*pi/3)).^(n);
k=-200:200 ; w =(pi/100)*k;
X=x*(exp(-j*pi/100)).^(n'*k);
magX=abs(X); angX=angle(X);
subplot(2,1,1);plot(w/pi,magX);grid
xlabel('frecuencia en unidades de pi'); ylabel ('Magnitud de X')
title ('Magnitud')
subplot(2,1,2);plot(w/pi,angX/pi);grid
xlabel('Frecuencia en unidades de pi'); ylabel ('radianes/pi')
title ('Parte Angular')

4) En este ejemplo verificaremos la propiedad de linealidad utilizando una


secuencia de duracion finita. Dejemos a x1(n) y x2(n) que sean dos secuencias
randomicasa uniformemente distribuidas entre [0 y 1], con 0<n<10.
clear all,clc
x1=rand(1,11); x2=rand(1,11); n=0:10;
alpha=2; beta=3;
k=0:500; w=(pi/500)*k;
X1=x1*(exp(-j*pi/500)).^(n'*k); % DTF de x1
X2=x2*(exp(-j*pi/500)).^(n'*k); % DTF de x2
x=alpha*x1 + beta*x2;
X=x*(exp(-j*pi/500)).^(n'*k); %DTF de x
%Verificación
X_check=alpha*X1 + beta*X2 %combinación lineal de X1 y X2
Error=max(abs(X- X_check)) %Diferencia

Puesto que el error absoluto entre dos transformadas de Fourier es menor que
10-14, los dos arreglos son los mismos.

4-a) Sea ( ) ( ) ,y ( ) ( ( ) ) , para 0<n<10.


Utilizando el ejemplo anterior compruebe la propiedad de la linealidad para la
transformada de Fourier de manera manual y mediante un script. Computar el
error.

SERIE DISCRETA DE FOURIER

5) Vamos a crear una función para computar la serie discreta de Fourier,


consultar en Matlab como se puede crear una función y adicionarla al Path de
Matlab, para que pueda ser ejecutado en un script.

function [Xk]=dfs(xn,N)

%computa los coeficientes de la serie de Fourier discreta


%[Xk]=dfs(xn,N)
%Xk= computa la serie de Fourier discreta sobre un arreglo 0<= k <= N-1
%xn= un periodo o señal periódica sobre 0<=n<=N-1
%N= Periodo fundamental of xn

n=[0:1:N-1]; %vector fila para n


k=[0:1:N-1]; % Vector fila para k
WN=exp(-j*2*pi/N); % factor Wn
nk=n'*k;
WNnk=WN.^nk; %Matrix DFS
Xk=xn*WNnk;

end

Fin de la función

Ahora se va a computar los coeficientes de la serie de Fourier de Xn [0,1,2,3]


(figura1), donde es una señal periódica (N=4).
3

2.5

1.5

0.5

0
-12 -10 -8 -6 -4 -2 0 2 4 6 8

Figura 1

5-a) Encontrar manualmente los coeficientes de la serie de Fourier y compararlos


con la respuesta en Matlab.
1) Xn=[0,1,2,3] ; N=4
XK=dfs (xn,N)
5-b) Encontrar los coeficientes de Fourier de 5-b1, 5-b2, 5-b3, 5-b4 y 5-b5 (utilizar
figura 2) y graficar su respuesta en Matlab.

Figura 2
Explicar en la gráfica que efecto se puede observar al aumentar el periodo de
la señal?
5-b1) N1 =4 ; N =10;
5-b2) N1 =4 ; N =20
5-b3)N1 =4 ; N =30
5-b4)N1 =4 ; N =40
5-b5)N1 =4 ; N =5000.
Nota: Recuerde que la función dfs solo está definida para para valores de x(n) con
n=>0.

7) En el comand Window de Matlab escriba Doc fft, lea detenidamente el ejemplo


propuesto y explique cada una de las líneas de código que acción se está
generando.

Examples

A common use of Fourier transforms is to find the frequency components of a


signal buried in a noisy time domain signal. Consider data sampled at 1000 Hz.
Form a signal containing a 50 Hz sinusoid of amplitude 0.7 and 120 Hz sinusoid of
amplitude 1 and corrupt it with some zero-mean random noise:

Fs = 1000; % Sampling frequency


T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t)); % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
It is difficult to identify the frequency components by looking at the original signal.
Converting to the frequency domain, the discrete Fourier transform of the noisy
signal y is found by taking the fast Fourier transform (FFT):

NFFT = 2^nextpow2(L); % Next power of 2 from length of y


Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.


plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
The main reason the amplitudes are not exactly at 0.7 and 1 is because of the
noise. Several executions of this code (including recomputation of y) will produce
different approximations to 0.7 and 1. The other reason is that you have a finite
length signal. Increasing L from 1000 to 10000 in the example above will produce
much better approximations on average.

The main reason the amplitudes are not exactly at 0.7 and 1 is because of the
noise. Several executions of this code (including recomputation of y) will produce
different approximations to 0.7 and 1. The other reason is that you have a finite
length signal. Increasing L from 1000 to 10000 in the example above will produce
much better approximations on average.
8). con las siguientes lineas de commando en Matlab se realiza la adquisición de
una señal de audio, explicar cada línea de código que acción realiza.

%% Determinación de la frecuencia y reprodución de la muestra


Fs = 44100; % Frecuencia de muestreo, frecuencias pre-asignadas en MATLAB
Audio = audiorecorder(2*Fs,16, 1);%Proceso de reconocimiento o grabado del
audio
disp('Iinicio del audio...')
recordblocking(Audio,1);%Duración del audio
disp('Finalizacion del audio...')
Sonido = getaudiodata(Audio);%Proceso de guardado
Nombre = 'VOZ.wav';%Nombre de mi señal entrante
play(Audio);%Reproduce mi señal entrante
%plot(Sonido);
audiowrite(Nombre,Sonido,2*Fs)%Guarda mi señal entrante con los parametros
ingresados

9). Con los conocimientos adquiridos en el punto 7 y 8, realice la adquisición de


dos archivos de voz, correspondiente al primer apellido de cada uno de los
integrantes del laboratorio, dibuje las dos señales de audio, encuentre el espectro
de cada señal y dibújelo.

You might also like