miércoles, 10 de abril de 2013

Programa en Matlab para Series de Fourier


   Este es un programa en Matlab que permite hacer una aproximación a una señal cuadrada (con límites en “y” max= 1, min= -1) por medio de las series de Fourier. Los valores de los coeficientes  son:A0 = 0, debido al valor medio de la función.B(n) = 4/n*pi, obtenido analíticamente.A(n) = 0, debido a la forma de la señal.

Programa en Matlab
%   Pablo Alejandro Arreola Galván 98482
%   Febrero, 2013
%   Este programa grafica una función escalón y sobre ella
%   una aproximación hecha con la serie de Fourier
%Introducción al programa y limpia de pantalla
clc
clear all
disp('******************************')
disp('Serie de Fourier')

%   Aquí declaramos varias cosas, en primer lugar una variable N la cual es el número de armónicos que %   incluirá nuestra aproximación, mientras mayor sea el número, más fiel será la gráfica obtenida a la
%   original.
%   También se declara el intervalo (x) de nuestra función, que va de –pi hasta pi.
%   Por último inicializamos la variable SUM a cero. 
N= input('Número de muestras deseadas (N):');
x=-pi:0.001:pi;
sum=0;

%   En este ciclo for está contenida la magia, inicializa en 1 y termina en N, el incremento es de 2, para %   así tener una serie de números impares (1,3,5,7,9…). Los valores pares de (n) se omiten ya que el
%   resultado es cero para todos ellos, no sumarán nada a la variable (sum).
%   b(n) fue obtenida analíticamente

for n = 1: 2: N
    b(n) = 4/(n*pi);
    sum = sum + b(n) * sin(n*x);
end

%   Para tener el resultado aproximado de la señal, se suma a0/2, este término fue obtenido a partir de   %   el valor promedio del área bajo la curva de -pi a pi, como es una función simétrica, el valor es 0,        %   esto podría omitirse, pero para se incluye para ver más claramente la fórmula de la serie. 
sum = sum + 0;

%     Esta es una manera de generar la función escalón (f), diciendo que toda (x) inferior a 0 valdrá- 1, y %     toda (x) mayor a 0 valdrá 1. Esto sólo es válido para el intervalo de –pi a pi, donde se ve una señal %    cuadrada, si se amplían los límites se verá la gráfica de valores constantes.

f=(x<0).*(-1)+(x>=0).*1; 
%    En esta sección se encuentran los comandos para graficar y fin del programa.
plot(x,f); hold on
plot(x,sum)
grid
title(‘Serie de Fourier')
xlabel('Tiempo')
ylabel('Voltaje')
disp('Programa ejecutado exitosamente')
disp('******************************')

Algunos resultados son:
Aproximación con N=3



Aproximación con N=30



viernes, 15 de marzo de 2013

Piano con PIC16F84A

La práctica número 6 de mi clase de sistemas digitales, es un pequeño teclado de 8 notas. Requiere un transistor 2n 2222, una bocina (la usada en este caso es de 8 ohms) y 8 push buttons, las resistencias puden omitirse utilizando las resistencias "pull up" incorporadas en el PIC. Aquí está el código en Ensamblador. Es extenso, pero funciona.
Además incluyo el archivo.hex y la librería de retardo utilizada
Piano.hex
Librería de retardos