GUI de Matlab para encontrar el punto de corte de dos funciones.

Dadas dos funciones, vamos a encontrar el punto de corte a través de una GUI de Matlab. La interfaz gráfica genera ambas funciones al presionar un botón. Luego, se calcula el punto de corte, se asigna su coordenada a un cuadro de texto estático. La siguiente gráfica muestra el entorno de esta GUI.
Programamos que el segundo botón esté desactivado cuando inicia a correr el programa. Esto lo hacemos en la parte correspondiente del archivo .m OpeningFcn.
% --- Executes just before corte_graficas is made visible.
function corte_graficas_OpeningFcn(hObject, eventdata, handles, varargin)
set(handles.pushbutton2,'Enable','off')
handles.output = hObject;
guidata(hObject, handles);
El código que se ejecuta el presionar el primer botón se muestra a continuación. Se generan dos funciones y se colocan sus valores en handles para poder exportar estos valores a otra función del archivo .m.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
x = 0:0.01:10;
y1 = x .^2 + 2;
y2 = x .^3 ;
handles.x=x;
handles.y1=y1;
handles.y2=y2;
handles.axes1;
plot(x, y1, x, y2);
ylim([0,10])
set(handles.pushbutton2,'Enable','on')
guidata(hObject, handles);
Finalmente, el botón etiquetado como Corte ejecuta el código que encuentra el punto de corte de las dos gráficas y presenta la coordenada en el cuadro estático de texto.
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
idx = find(handles.y1 - handles.y2 < eps, 1); %// Index of coordinate in array
px = handles.x(idx);
py = handles.y1(idx);
set(handles.text1,'String',['x= ',num2str(px),' y= ',num2str(py)])
handles.axes1;
hold on
plot(px, py, 'ro', 'MarkerSize', 18)
hold off

Cosenoidal con varias fases en Matlab.

Graficar en Matlab la señal z\left( t \right) = 8\cos \left( {2\pi t + \theta } \right) para valores de \theta = \left[ { - {\pi \over 2}, - \pi , - {{3\pi } \over 2}} \right] en el intervalo 0 \le t \le 8.
t=-1:1/100:1;
cc=['r','g','b'];
w0=2*pi;
desv_tmp=zeros(1,3);
for k=1:3
    theta=[-pi/2,-pi,-1.5*pi];
    desv_tmp(k)=theta(k)/w0;
    z=8*cos(2*pi*t + theta(k));
    plot(t,z,'LineWidth',2,'Color',cc(k))
    hold on
    grid on
end
hold off

Gráfica del seno y coseno con la identidad de Euler en Matlab.

Graficar en Matlab las siguientes señales:
x\left( t \right) = {e^{j4\pi t}} + {e^{ - j4\pi t}}
y\left( t \right) = {{\left( {{e^{j4\pi t}} - {e^{ - j4\pi t}}} \right)} \over j}
t=-1:1/100:1;
s1=2*cos(4*pi*t);
s2=2*sin(4*pi*t);
subplot(2,1,1)
plot(t,s1,'LineWidth',2),grid on
subplot(2,1,2)
plot(t,s2,'LineWidth',2),grid on

Errata del libro Señales y Sistemas de Oppenheim.

  • Ecuación 1.39 es exp(-j0.5t) (página 20).
  • Ecuación 1.123 es x[n].
  • Ecuación 2.14 (página 86).
  • Ecuación 2.21 (página 89).
  • Ecuación 2.30 el h lleva sombrero (página 96).
  • Ecuación 3.61 falta 't' en el exponente.
  • Ecuación 3.124. El argumentos de H es jkwo. No con la exponencial.
  • Problema 3.8. La señal x(t) es real e impar.
  • Página 305. Debe ser mayúscula la x.
  • Página 310, ejemplo 4.13: la última ecuación es -1, no -2.
  • Ecuación 4.45 (página 313) fata 1 sobre 2Pi.
  • Ec 4.49 exponente w0 falta.
  • Luego de la ecuación 4.83 el exponente de la segunda exponencial
  • Ejemplo 5.2. El menos de la seg exponencial
  • Ejemplo 5.7 Entre paréntesis va: y otros múltiplos impares de Pi.
  • Ecuación 5.47 (página 380) el límite inferior es -Inf.
  • Ejemplo 5.9. Para 0, “si n es impar”.
  • Figura 5.17. No es omega 0, es omega c.
  • Ecuación 9.90 es aR. 
  • Figura 9.24 es aR (ver etiqueta también), no R/a.
  • Página 687, luego de 9.94 “...poles at s=-1+-j3”.
  • Ecuación 7.18 es Xc mayúscula.
  • Página 916, ecuación A.53 no es A12, es A21.

Modulación AM.

#AM modulation
# Funcion SINC
import numpy as np
import pylab as plt
from scipy.fftpack import fft

N = 500 # number of sample points
dt = 1. / 1000 # sample spacing

npp=9
nN=N*npp
t = np.linspace(-N*dt, N*dt, nN)

y=np.sinc(150*t)*np.cos(2*np.pi*400*t)
#y=np.abs(np.sinc(t))
plt.figure(1)
plt.plot(t,y, linewidth=2)
plt.grid(True), plt.xlabel('Tiempo')
plt.title(u'x(t)=sinc(150t)*cos(2 $\pi$ (400)t)')
plt.xlim([-6./200,6./200])

# FFT
yf = fft(y)
tf = npp*np.linspace(-1./(4.*dt), 1./(4.*dt), nN)
spectrum = 1./nN * np.concatenate([np.abs(yf[nN/2:nN]), np.abs(yf[0:nN/2])])

#figure1 = plt.figure(4, (10, 5))
plt.figure(2)
plt.plot(tf, spectrum, linewidth=2)
plt.grid()
plt.xlim([-700,700])
plt.title(u'Espectro de magnitud |X(j$\omega$)|')
plt.xlabel('Frecuencia [Hz]')
plt.ylabel('Magnitud |X(j$\omega$)|')

Transformada de Fourier de la función Sinc.

import numpy as np
import pylab as plt
from scipy.fftpack import fft

N = 500 # number of sample points
dt = 1. / 1000 # sample spacing

npp=3
nN=N*npp
t = np.linspace(-N*dt, N*dt, nN)

y=np.sinc(200*t)
#y=np.abs(np.sinc(t))
plt.figure(1)
plt.plot(t,y)
plt.grid(True), plt.xlabel('Tiempo')
plt.title(u'Sinc(200t)')
plt.xlim([-6./200,6./200])

# FFT
yf = fft(y)
tf = npp*np.linspace(-1./(4.*dt), 1./(4.*dt), nN)
spectrum = 1./nN * np.concatenate([np.abs(yf[nN/2:nN]), np.abs(yf[0:nN/2])])

#figure1 = plt.figure(4, (10, 5))
plt.figure(2)
plt.plot(tf, spectrum, '-')
plt.grid()
plt.xlim([-300,300])
plt.title(u'Espectro de magnitud |X(j$\omega$)|')
plt.xlabel('Frecuencia [Hz]')
plt.ylabel('Magnitud |X(j$\omega$)|')

Espectro unilateral de un suma de senoides en Python.

import numpy as np
#from scipy import signal
from scipy.fftpack import fft
import matplotlib.pyplot as plt

N = 1000 # number of sample points
dt = 1. / 500 # sample spacing

frequency1 = 50.
frequency2 = 150.
nN=N*4
t = np.linspace(0.0, N*dt, nN)
s1 = 0.8*np.sin(2*np.pi * frequency1 * t)
s2 = 0.4* np.sin(2*np.pi * frequency2 * t)
y = s1 + s2

plt.figure(1)
plt.plot(t, s1)
plt.grid()
plt.title('Senoide de '+str(frequency1)+' Hz')
plt.ylabel('Amplitud')
plt.xlabel('Tiempo [s]')
plt.axis([0, 8/frequency2, -1.5, 1.5])

plt.figure(2)
plt.plot(t, s2)
plt.grid()
plt.title('Senoide de '+str(frequency2)+' Hz')
plt.ylabel('Amplitud')
plt.xlabel('Tiempo [s]')
plt.axis([0, 8/frequency2, -1.5, 1.5])


plt.figure(3)
plt.plot(t, s1+s2)
plt.grid()
plt.title('Suma de senoides de '+str(frequency1)+' Hz'+' y '+str(frequency2)+' Hz')
plt.ylabel('Amplitud')
plt.xlabel('Tiempo [s]')
plt.axis([0, 8/frequency2, -1.5, 1.5])
# FFT
yf = fft(y)
tf = np.linspace(.0, 1./(2.*dt), N/2)
spectrum = 2./nN * np.abs(yf[0:N/2])

#figure1 = plt.figure(4, (10, 5))
plt.figure(4)
plt.plot(tf, spectrum, '-')
plt.grid()
plt.title(u'Espectro de magnitud |X(j$\omega$)|')
plt.xlabel('Frequencia [Hz]')
plt.ylabel('Magnitud |X(j$\omega$)|')
Related Posts Plugin for WordPress, Blogger...