Generar Señales en Matlab
Short Description
Download Generar Señales en Matlab...
Description
GENERACION DE PULSOS Y TREN DE PULSOS %% 1) Funcion pulso rectangular (rectpuls) % Centrada en 5, de amplitud 2, y duración 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 parámetro 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 SEÑALES 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 = (t0).*(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).*si n(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 señal periódica indicada.
= 1/2
=
2(−1) − 2
= 0.
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))&(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 gráfica anterior, el resultado es:
COMO CALCULAR LA DFT DE UNA SEÑAL DISCRETA Veremos cómo calcular la DFT de una señal en Matlab y analizar el efecto del ruido en la señal y su transformada de Fourier. %% Este proyecto muestra como aplicar la FFT auna señal % y su significado fisico fSampling = 10000;
% frecuencia de muestreo
tSampling = 1/fSampling;
% tiempo de muestreo
L = 10000;
% Longitud de la señal
t = (0:L-1)*tSamplin g;
% Vector de tiempo
F = 100;
% Frecuencia de la señal
%% Señal 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 señal 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 señal 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 señal 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');
Análisis de Dominio de la Frecuencia Una señal 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 análisis en el dominio de la frecuencia y presentaremos la DFT usando un algoritmo FFT utilizando MATLAB, también vamos a separar el ruido de la señal con la ayuda de un filtro. En primer lugar vamos a crear una señal 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.
Después de esto vamos a añadir ruido a la señal y luego d e nuevo calcularemos la transformada discreta de Fourier de la señal, ambas gra ficas se muestran a continuación:
Ahora vamos a comparar las transformadas discretas de Fourier de ambas señales con ruido y sin ruido, que se ilustran en las siguientes figuras:
Es evidente que a partir de la comparación anterior el pico de la señal e se encuentra en la frecuencia de 100 Hz y la transformada con el ruido tiene amplitudes en rango de frecuencias de frecuencias más grande. El código con una ligera c orrección en la pantalla, muestra lo siguiente:-
Código en Matlab para el análisis en el dominio de la f recuencia %% 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)*tSampli ng;
%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 us ing MATLAB Skype embedded.laboratory
View more...
Comments