Anda di halaman 1dari 16

GENERACION DE PULSOS Y TREN DE PULSOS

%% 1) Funcion pulso rectangular (rectpuls)


% Centrada en 5, de amplitud 2, y duracin 10
clc
clear
close all
D = 6; % cambiar luego a 10
C = 5;
x = linspace(-20, 20, 13000);
y = 2*rectpuls(x, D); % cambiar x --> x-C, despues de cambiar D
plot(x, y, 'Linewidth', 2);
ylim([-2 3])
grid on
%% 2) Funcion Pulso Rectangular (dos escalones)
% Centrada en 5, de amplitud 2, y duracion 10
clc
clear
close all
x = linspace(-20, 20, 13000);
y = 2*(heaviside(x) heaviside(x-10));
plot(x, y, 'r', 'Linewidth', 2);
ylim([-2 3])
grid on

%% 3) Funcion Pulso triangular (tripuls)
% Centrada en 5, duracion 10;
clc
clear
close all
D = 10;
C = 5;
x = linspace(-20, 20, 10000);
y = 2*tripuls(x-C,D,0); % el tercer parmetro varia entre -1 y 1
plot(x, y, 'Linewidth', 2);
ylim([-2 3])
grid on
%% 4) Tren de pulsos (pulstran)
% Periodo: 10, Duracion: 8, Numero de pulsos: 10;
clc
clear
close all
T = 10;
D = 5;
N = 10;
x = linspace(0, T*N, 10000);
d = [0:T:T*N];
y = pulstran(x, d,'rectpuls', D); % cambiar x x-D/2
plot(x, y, 'Linewidth', 2);
ylim([-1 2])
grid on
%% 5) Tren de pulsos (square)
% Periodo: 10, Duracion: 8, Numero de pulsos: 10;
clc
clear
close all
T = 10;
N = 10;
D = 8;
f = 1/T;
x = linspace(0, N*D, 10000);
d = [0:T:T*N];
y = square(2*pi*f*x, 50);
plot(x, y, 'LineWidth', 2);
ylim([-2 2])
grid on
%% 6) Funciones triangulares. Diente de sierra (sawtooth)
% Periodo: 10, Numero de pulsos: 10;
clc
clear
close all

T = 20;
N = 10;
f = 1/T;
x = linspace(0, T*N, 10000);
y = sawtooth(2*pi*f*x, 0); & el tercer parametro varia entre 0 y 1
plot(x, y, 'LineWidth', 2);
ylim([-2 2])
grid on
%% 7) Tren de Pulsos Triangulares (pulstran)
% Periodo: 10, Duracion: 5, Numero de pulsos: 10;
clc
clear
close all

T = 10;
D = 5;
N = 10;
x = linspace(0, T*N, 10000);
d = [0:T:T*N];
y = pulstran(x, d, 'tripuls', D, 0); % el ultimo parametro varia de -1 a 1
plot(x, y, 'LineWidth', 2);
ylim([-1 2])
grid on

%% Animacion (Mantener el Periodo, cambiando el ancho del pulso)
clc
clear
close all
x = linspace(-2, 2, 10000);
d = [-2 -1 0 1 2];
for i=0:0.01:1
y = pulstran(x, d, 'rectpuls', i);
plot(x, y, 'LineWidth', 2); grid on;
ylim([-1 2])
pause(0.005)
end

%% Animacion (Mantener el Periodo, cambiando el ancho del pulso)
clc
clear
close all
T = 10;
N = 10;
D = 8;
f = 1/T;
x = linspace(-2, 2, 10000);
for i=100:-2:0
y = square(2*pi*f*x, i); % Segundo parametro varia entre 0 1 100
% Porcentaje de tiempo en alto
plot(x, y, 'Linewidth', 2);
ylim([-2 2]);
grid on;
pause(0.1)
end

%% Animacion 2 (Mantener el Periodo, cambiando el ancho del pulso)
clc
clear
close all
T = 10;
D = 0.5;
N = 10;
x = linspace(-T*N/2, T*N/2, 10000);
for i=1:2: T*N/2
d = [-T*N/2:i:T*N/2]
y = pulstran(x, d, 'rectpuls', D);
plot(x, y, 'Linewidth', 2);
ylim([-1 2]);
grid on;
pause(0.1)
end

GENERACION DE SEALES SINGULARES
%% Graficas de Funciones Singulares

% Funcion Escalon
clc
clear
close all
t = linspace(-10, 10, 1000);
u1t = heaviside(t); % cambiarlo luego t t-3
plot(t, u1t, 'Linewidth', 2); grid on
title('\bfFUNCION ESCALON')
ylim([-5 5])

% Funcion RAMPA
clc
clear
close all
t = linspace(-10, 10, 1000);
u2t = t.*heaviside(t); % cambiar luego toda t t+4, luego t+4 -t+4
% luego cambiar a t 3*t, primero en las pendiente
plot(t, u2t, 'Linewidth', 2); grid on
title('\bfFUNCION RAMPA')
ylim([-10 10])

% Funcion Parabola
clc
clear
close all
t = linspace(-10, 10, 1000);
u2t = ((t).^2)/2 .*heaviside(t); % cambiarlo luego t t+4
plot(t, u3t, 'k', 'Linewidth', 2); grid on
title('\bfFUNCION PARABOLA')
ylim([-50 50])

%% Otra forma de dibujar estas funciones
clc
clear
close all
t = linspace(-10, 10, 1000);
ut = (t<=0).*0 + (t>0).*(1); % cambiar 0 4 solo en los terminos logicas
plot(t, ut, 'r','Linewidth', 2); grid on
title('\bfOTRA ALTERNATIVA')
ylim([-5 5])

%% Funcion Escalon por una sinusoidal
clc
clear
close all
t = linspace(-20, 20, 1000);
ut = heaviside(t).*sin(t); % cambiar todo t t+4
plot(t, ut, 'Linewidth', 2); grid on
title('\bfFUNCION ESCALON POR UNA SINUSOIDAL')
ylim([-2 2])


close all
clear
clc
t = linspace(0, 4, 100);
p1 = t.*heavislde(t);|
p2 = -(t-1).*heaviside(t-1);
p3 = 2*((t-3).^2)/2.*heaviside(t-3);
ft = p1 + p2 + p3;
plot(t,ft,'Linewidth', 2);
grid on





%%
close all
clear
clc
t = linspace(0, 2*pi, 100);
pi = 10*sin(t).*heaviside(t);
p2 = -10*sin(t).*heaviside(t-pi);
ft = p1 + p2:
plot(t, ft, 'Linewidth', 2);
grid on
ylim([-5 15])

%%
close all
clear
clc
t = linspace(0, 60, 10000);
p1 = 10*sin(t).*heaviside(t);
p2 = -10*sin(t).*heaviside(t-pi);
ft = p1 + p2:
plot(t, ft, 'Linewidth', 2);
grid on
ylim([-5 15])

http://www.youtube.com/watch?v=4W7-bkO8ehM






%%
close all
clear
clc
t = linspace(0, 60, 10000);
p1 = 200*heaviside(t);
p2 = -500*heaviside(t-20);
p3 = 10*heaviside(t-20).*(t-20);
p4 = -10*heaviside(t-20).*(t-40);
p5 = 100*heaviside(t-60);
ft = p1 + p2 + p3 + p4 + p5;
plot(t, ft, 'Linewidth', 2);
grid on
ylim([-400 300])

Series de Fourier en Matlab
http://www.youtube.com/watch?v=BTOr517673k

Calculo de los coeficientes de la serie de Fourier

Calcule los coeficientes de Fourier de la seal peridica indicada.

A
o
= 12
A
n
=
2(1)
n
2
n
2
n
2


B
n
= u.
close all
clc
syms t n
A = [0 1 2]; % despues cambiarlo a [0 1 2 3]
f = [t t+2]; % despues cambiarlo a [2 0 -2]; para graficar (++)
f = sym(f);
T = max(A) min(A);
wo = 2*pi/(T);
Ao = 0;
for i=1:length(f)
Ao = Ao + int(f(i), 't', A(i), A(i+1));
end
Ao = simple(Ao/T);
An = 0;
for i=1:length(f)
An = An + int(f(i)*cos(n*wo*t), A(i), A(i+1));
end
An = simple(2*An/T);

Bn = 0;
for i=1:length(f)
Bn = Bn + int(f(i)*sin(n*wo*t), A(i), A(i+1));
end
Bn = simple(2*Bn/T);
An = char(An);
Bn = char(Bn);
An = simple(sym(strrep(char(An), 'sin(pi*n)', '0')));
Bn = simple(sym(strrep(char(Bn), 'sin(pi*n)', '0')));

An = simple(sym(strrep(char(An), 'cos(pi*n)', '(-1)^n')));
Bn = simple(sym(strrep(char(Bn), 'cos(pi*n)', '(-1)^n')));

An = simple(sym(strrep(char(An), 'sin(2*pi*n)', '0')));
Bn = simple(sym(strrep(char(Bn), 'sin(2*pi*n)', '0')));

An = simple(sym(strrep(char(An), 'cos(2*pi*n)', '1')));
Bn = simple(sym(strrep(char(Bn), 'cos(2*pi*n)', '1')));

%
disp('Ao')
pretty(Ao)
disp('An')
pretty(An)
disp('Bn')
pretty(Bn)
x = linspace(min(A), max(A), 1000);
fx = 0;
for i=1:length(A)-1
if mod(i, 2) == 1 % VERIFICA PAR
fx = fx + ((x >= A(i))&(x <= A(i+l))).*subs(f(i),x);
else
fx = fx + ((x > A(i))&(x < A(i+l))).*subs(f(i),x);
end
end
plot(x, fx, 'Linewidth', 2); hold on
plot(x + max(x) - min(x), fx, 'Linewidth', 2)
plot(x - max(x) + min(x), fx, 'Linewidth', 2)
plot([max(x) max(x)],[fx(1) fx(end)], 'linewidth', 2)
plot([min(x) min(x)],[fx(end) fx(1)], 'linewidth', 2)
grid on
xlabel('\bfTIEMPO')
ylabel('\bfAMPLITUD')
title('\bfGRAFICA DE LA FUNCION')
Ejecutando el script

(++)

Para la grfica anterior, el resultado es:

COMO CALCULAR LA DFT DE UNA SEAL DISCRETA
Veremos cmo calcular la DFT de una seal en Matlab y analizar el efecto del ruido en la
seal y su transformada de Fourier.

%% Este proyecto muestra como aplicar la FFT auna seal
% y su significado fisico

fSampling = 10000; % frecuencia de muestreo
tSampling = 1/fSampling; % tiempo de muestreo
L = 10000; % Longitud de la seal
t = (0:L-1)*tSampling; % Vector de tiempo
F = 100; % Frecuencia de la seal

%% Seal sin ruido
xsig = sin(2*pi*F*t);
subplot(2,1,1)
plot(t, xsig);
grid on;
axis([0 0.1 -1.2 1.2]);
xlabel('\itEje de Tiempo \rightarrow');
ylabel('\itAmplitud \rightarrow');
title('\itxsig(t) de frecuencia = 100 Hz');
pause(2);
%% Transformada en frecuencia de la seal anterior
Subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
f1 = fSampling/2*(linspace(0,1,NFFT/2+1));
semilogy(f1,2*abs(Xsig(1:NFFT/2+1)),'r');
grid on;
axis([-50 500 1.0000e-005 1])
title('\itEspectro de Amplitud de un solo lado de xsig(t)');
xlabel('\itFrecuencia(Hz) \rightarrow');
ylabel('|Xsig(f)| \rightarrow');
pause(2);

%% Se agrega ruido a la seal cuando es transmitido
% en algun medio de transmision
xnoise = xsig +0.25*randn(size(t));
figure;
subplot(2,1,1)
plot(t,xnoise,'r');
grid on;
xlabel('\itEje de Tiempo \rightarrow');
ylabel('\itAmplitud \rightarrow');
title('\itxnoise(t) de Frecuencia = 100 Hz (Adicion de ruido)');
pause(2);

%%Transformacion en frecuencial de la seal ruidosa
subplot(2,1,2)
NFFT = 2^nextpow2(L);
XNoise = fft(xnoise,NFFT)/L;
f1 = fSampling/2*(linspace(0,1,NFFT/2+1));
semilogy(f1,2*abs(XNoise(1:NFFT/2+1)),'r');
grid on;
axis([-50 500 1.0000e-005 1])
title('\itEspectro de Amplitud de un solo lado de xnoise(t)');
xlabel('\itFrecuencia(Hz) \rightarrow');
ylabel('|XNoise(f)| \rightarrow');
pause(2);

%%Comparacion de ambos espectros
figure;
subplot(2,1,1)
semilogy(f1,2*abs(Xsig(1:NFFT/2+1)));
grid on;
axis([-50 500 1.0000e-005 1])
title('\itEspectro de Amplitud de un solo lado de xsig(t)');
xlabel('\itFrecuencia(Hz) \rightarrow');
ylabel('|Xsig(f)| \rightarrow');

subplot(2,1,2)
semilogy(f1,2*abs(XNoise(1:NFFT/2+1)),'r');
grid on;
axis([-50 500 1.0000e-005 1])
title('\itEspectro de Amplitud de un solo lado de xnoise(t)');
xlabel('\itFrecuencia(Hz) \rightarrow');
ylabel('|XNoise(f)| \rightarrow');
















Anlisis de Dominio de la Frecuencia
Una seal puede ser representada en dos dominios, el primero de ellos es el dominio del
tiempo y el otro es el dominio de la frecuencia. Le mostraremos las ventajas del anlisis en
el dominio de la frecuencia y presentaremos la DFT usando un algoritmo FFT utilizando
MATLAB, tambin vamos a separar el ruido de la seal con la ayuda de un filtro.
En primer lugar vamos a crear una seal sinusoidal con 100 Hz de frecuencia en MATLAB
como se ilustra en la figura y luego trazar la Transformada Discreta de Fourier (DFT) en
MATLAB utilizando el algoritmo FFT.

Despus de esto vamos a aadir ruido a la seal y luego de nuevo calcularemos la transformada
discreta de Fourier de la seal, ambas graficas se muestran a continuacin:



Ahora vamos a comparar las transformadas discretas de Fourier de ambas seales con ruido y sin ruido,
que se ilustran en las siguientes figuras:

Es evidente que a partir de la comparacin anterior el pico de la seale se encuentra en la frecuencia
de 100 Hz y la transformada con el ruido tiene amplitudes en rango de frecuencias de frecuencias ms
grande.
El cdigo con una ligera correccin en la pantalla, muestra lo siguiente:-

Cdigo en Matlab para el anlisis en el dominio de la frecuencia
%% Author:- Embedded Laboratory
%%This Project shows how to apply FFT on a signal and its physical
% significance.

fSampling = 10000; %Sampling Frequency
tSampling = 1/fSampling; %Sampling Time
L = 10000; %Length of Signal
t = (0:L-1)*tSampling; %Time Vector
F = 100; %Frequency of Signal

%% Signal Without Noise
xsig = sin(2*pi*F*t);
subplot(2,1,1)
plot(t,xsig);
grid on;
axis([0 0.1 -1.2 +1.2])
xlabel('\itTime Axis \rightarrow');
ylabel('\itAmplitude \rightarrow');
title('\itxsig(t) of Frequency = 100Hz');
pause(2);

%%Frequency Transform of above Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
f1 = fSampling/2*(linspace(0,1,NFFT/2+1));
semilogy(f1,2*abs(Xsig(1:NFFT/2+1)),'r');
grid on;
axis([-50 500 1.0000e-005 1])
title('\itSignle-Sided Amplitude Sepectrum of xsig(t)');
xlabel('\itFrequency(Hz) \rightarrow');
ylabel('|Xsig(f)| \rightarrow');
pause(2);

%% Addition of Noise in Signal when Signal is Transmitted over some
% transmission medium
xnoise = xsig +0.25*randn(size(t));
figure;
subplot(2,1,1)
plot(t,xnoise,'r');
grid on;
xlabel('\itTime Axis \rightarrow');
ylabel('\itAmplitude \rightarrow');
title('\itxnoise(t) of Frequency = 100Hz (Noise Addition)');
pause(2);

%%Frequency Transform of the Noisy Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
XNoise = fft(xnoise,NFFT)/L;
f1 = fSampling/2*(linspace(0,1,NFFT/2+1));
semilogy(f1,2*abs(XNoise(1:NFFT/2+1)),'r');
grid on;
axis([-50 500 1.0000e-005 1])
title('\itSignle-Sided Amplitude Sepectrum of xnoise(t)');
xlabel('\itFrequency(Hz) \rightarrow');
ylabel('|XNoise(f)| \rightarrow');
pause(2);

%%Comparision of both Spectrums
figure;
subplot(2,1,1)
semilogy(f1,2*abs(Xsig(1:NFFT/2+1)));
grid on;
axis([-50 500 1.0000e-005 1])
title('\itSignle-Sided Amplitude Sepectrum of xsig(t)');
xlabel('\itFrequency(Hz) \rightarrow');
ylabel('|Xsig(f)| \rightarrow');

subplot(2,1,2)
semilogy(f1,2*abs(XNoise(1:NFFT/2+1)),'r');
grid on;
axis([-50 500 1.0000e-005 1])
title('\itSignle-Sided Amplitude Sepectrum of xnoise(t)');
xlabel('\itFrequency(Hz) \rightarrow');
ylabel('|XNoise(f)| \rightarrow');

Para tener un mejor conocimiento, vea el video tutorial
Calculating Fourier Transform using MATLAB
Skype
embedded.laboratory

Anda mungkin juga menyukai