SEÑALES 1. SEÑALES EN TIEMPO CONTINUO. Una señal en tiempo continuo es aquella que puede tomar cualquier valor en cualquier instante de tiempo, donde la variable independiente tiempo puede ser cualquier instante desde - infinito a + infinito. Como ejemplo de este tipo de señales está cualquier función matemática que dependa del tiempo, como v(t) ═ Vp*cos(2*π*f*t) , dónde t es la variable independiente y v(t), la variable dependiente. En este caso particular tenemos una función que se repite periódicamente en el tiempo y f indica la rata de repetición, normalmente f tiene unidades de Hertz o ciclos/seg. El inverso de f es el periodo T o el tiempo de duración de un ciclo. En la figura 1 tenemos un ciclo de la señal v(t), para vp = 10voltios y f = 100hz.
10 V O L T I O S
8 6 4 2 0 -2 -4 -6 -8 -10
0
0.001
0.002
0.003
0.004
S E G UNDO S
0.005
0.006
0.007
0.008
0.009
0.01
F IG URA 1
GENERACIÓN DE SEÑALES EN TIEMPO CONTINUOCON MATLAB ONDA SENO.- Para generar la onda seno vamos a suponer que es de 100Hz, para esto necesitamos un vector de tiempo que lo vamos a generar así: t = (0:0.001:1) lo cual significa que es un vector de 1001 elementos intervalos de 1 milisegundo.
de cero a 1 segundo en
Posteriormente se genera la onda seno con el comando: y = sin(2*pi*100*t) el cual nos produce también un vector de 1001 elementos, de tal forma que si queremos graficar los primeros 50 elementos solamente, entonces se ejecuta el comando: plot(t(1:50),y(1:50)) resumiendo el programa en Matlab sería: t = (0:0.001:1); y = sin(2*pi*100*t); plot(t(1:50);y(1:50)); La grafica producida por este programa se muestra en la figura 1-2.
1 0.8 0.6 0.4
V O LTIO S
0.2 0 -0.2 -0.4 -0.6 -0.8 -1
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
0.045
0.05
S E G UNDO S - FIG 1-2
Si ahora a la onda de la figura 1-2, le queremos agregar un ruido blanco uniformemente distribuido, esto lo logramos adicionado el comando: 0.5*randn(size(t)); a la segunda línea del programa anterior. Lo cual nos produce la señal contaminada de la fig 1-3 2
2.5 V O L T I O S
2
O NDA S E NO + RUIDO
1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
0.045
0.05
S E G UNDO S FIG 1-3
ONDA DIENTE DE SIERRA.- Matlab posee la función sawtooth, que nos sirve para generar onda diente de sierra, con un pico de +/-1 y un periodo de 2*pi. A manera de ejemplo supóngase que se quiere generar una onda diente de sierra de 100Hz, con frecuencia de muestreo de 10Khz y graficar 0.2 segundos de la onda generada. Este problema se resuelve a través del siguiente programa en Matlab, cuya gráfica obtenida se muestra en la figura 1-4: Fs = 10.000; t = 0:1/fs:2; x = sawtooth(2*pi*100*t); plot(t,x), axis([0 0.2 –1 1]);
3
O NDA TRIA NG ULA R G E NE RA DA CO N S A W TO O TH 1 V O L T I O S
0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
0.16
0.18
0.2
S E G UNDO S FIG 1-4
ONDA CUADRADA.- Con la función square de Matlab podemos generar onda cuadrada con un periodo 2*pi y ciclo útil, especificado a través de un parámetro. Ejemplo 1-1. Utilizando la función square de Matlab generar una onda cuadrada de 50 Hz con una frecuencia de muestreo de 1000 m/s y graficar hasta 0.08 segundos de la señal, con un ciclo útil de a)50%. b) 70%. Solución: a) fm = 1000; t = 0:1/fm:1; x = square(2*pi*50*t); plot(t,x), axis([0 0.08 –2 2]); En la fig 1-5 se muestra la señal correspondiente. b) En la solución anterior cambiamos la tercera línea del programa por: x = square(2*pi*50*t,70); el resultado lo observamos en la figura 1-6.
4
O NDA CUA DRA DA CO N CICLO UTIL DE L 50% 2
1.5
1
V O LTIO S
0.5
0
-0.5
-1
-1.5
-2
0
0.01
0.02
0.03
0.04 S E G UNDO S
0.05
0.06
0.07
0.08
0.07
0.08
FIG 1-5
O NDA CUA DRA DA CO N CICLO UTIL DE L 70%
2 V 1.5 O L 1 T I O 0.5 S 0
-0.5
-1
-1.5
-2
0
0.01
0.02 0.03 S E G UNDO S
0.04
0.05
0.06
FIG 1-6
5
2. SEÑALES EN TIEMPO DISCRETO Una señal en tiempo discreto, solo esta definida para cierto valores del tiempo. Supóngase que empezando de cero tomamos muestras de la señal analógica de la figura 1 (onda seno) y que estas muestras las tomamos cada 0.001 segundos (período de muestreo). Según esto, de la señal anterior en el período se tomaron 10 muestras, definimos la frecuencia de muestreo como el numero de muestras por segundo que es el inverso del periodo de muestreo o sea Fm = 1/T = 1/0.001 = 1000 muestras/segundo. En la figura 1-7 se observa la señal en tiempo discreto.
10 V O L T I O S
8 6 4 2 0 -2 -4 -6 -8 -10
0
1
2
3
4
5
M UE S TRA S
Figura 1-7
6
7
8
9
10
FIG URA 2
Nótese que la señal en tiempo discreto se obtuvo de tomar muestra cada n*T instantes de tiempo donde n es un numero entero y T el periodo de muestreo, o sea que la señal en tiempo discreto es: v(n) = 10*cos(2*π*(100/1000)*n), esta ecuación la podemos escribir de esta forma: v(n) = 10*cos(2*π*F*n), la cual se parece mucho a la ecuación de la señal en tiempo continuo, donde F tiene un significado sutilmente distinto al caso de tiempo continuo. En tiempo continuo f es la frecuencia en Hertz ( ciclos/segundo) y en tiempo discreto F es la relación entre la 6
frecuencia f y la frecuencia de muestreo F = f/Fm, donde evidentemente, la unidades de F son Ciclos/muestras , esta F es la frecuencia en el dominio digital. Veamos algunas propiedades del coseno en tiempo discreto: •
Un coseno en tiempo discreto es periódico si su frecuencia F es un numero racional.
Para probar esto partamos del hecho que una señal en tiempo discreto es periódica sí y solo sí x(n) = x(n + N), dónde N es el numero de muestras que hay que tomar para que la señal comience a repetirse, (el numero N más pequeño es el periodo fundamental) lo cual implica para el coseno: Vp*cos(2*π*F*n) = Vp*cos[2*π*F(n +N)] , lo cual es correcto si F = K/N , dónde K y N son enteros, de tal forma que si F, no se puede expresar como la relación de dos enteros entonces el coseno en tiempo discreto no es periódico. Esta es una diferencia fundamental con la señal correspondiente en tiempo continuo, donde el valor de f no tiene ninguna restricción para que sea periódica. El periodo fundamental N se obtiene al simplificar a la mínima expresión la relación F = K / N y tomando el valor del denominador. Ejemplo1-2. Determinar si la señal en tiempo discreto v(n) = 5*cos(200*π*n), es periódica y si lo es, cuál es su período fundamental. Solución: 5*cos(200*π*n) = 5*cos(2*π*F*n) , de donde se desprende que: 200* π*n = 2* π*F*n , de donde, F = 1/100, como F se pudo expresar como la relación de dos enteros , entonces 5*cos(200*π*n) es periódica. Y el período fundamental es100 ya que 1/100 esta reducido a la más mínima expresión. •
Las cosenosoides en tiempo discreto que estén separadas por un múltiplo entero de 2*π, son idénticas.
Sea la cosenosoide vp*cos(w*n), dónde w es la frecuencia digital en radianes/muestra, si lo anterior es cierto entonces vp*cos(w*n) = vp*cos[(w+2*π)*n], lo cual si se satisface ya que: Vp*cos[w+ 2*π)*n] = vp*[cos(w*n)*cos(2*π*n) – seno(w*n)*seno(2*π*n) y como cos(2*π*n) = 1 y seno(2*π*n) = 0, por ser n entero. Entonces: vp*cos[w+2*π)*n] = vp*cos(w*n). 7
Ejemplo1-2. Encuentre una frecuencia digital distinta de 1/10, de tal forma que la señal en tiempo discreto 10*cos(2*π*100/1000*n), resulte idéntica con esta nueva frecuencia. Solución: Como, F = 1/10 y w = 2*π*F = 2*π*1/10 , entonces por la propiedad anterior (w + 2*π = wo = w), 2*π*1/10 + 2*π = wo, debe ser una frecuencia idéntica a w. Y wo = 2*π*(1/10+10/10) = 2*π*11/10, luego la frecuencia digital F = 1/10 es idéntica a la frecuencia digital Fo = 11/10, lo cual significa que digitalmente la señal 10*cos(2*π*100/1000*n) es idéntica a 10*cos(2*π*11/10*n), lo cual puede comprobarse calculado los 10 primeros valores de las dos señales. Nótese que lo anterior significa que digitalmente es lo mismo si tomamos la señal 10*cos(2*π*100*t) o 10*cos(2*π*1100*t) y la muestreamos a 1000 muestras segundos, esta conclusión es de suprema importancia ya que es factible que tengamos dos señales analógicas distintas que al muestrearse con una determinadas frecuencia resulten digitalmente idénticas, es decir puede haber un problema de ambigüedad en el ámbito digital, mas adelante indicaremos que hay que hacer para que esto no suceda. •
Digitalmente la mayor frecuencia que puede alcanzarse es w = π (ó w = -π) o análogamente F = ½ (o F = -1/2).
GENERACIÓN DE SEÑALES EN TIEMPO DISCRETO CON MATLAB IMPULSO UNITARIO.- Esta señal es de suprema importancia en el análisis de sistemas lineales con Matlab. El siguiente programa nos permite generarla, nótese que la forma de graficar una señal en tiempo discreto es usando la función stem en lugar de plot. Ver fig 1-8. n = -10:10; imp= zeros(1,21); imp(11) = 1; stem(n,imp)
% generando 21 elementos % generando un vector con 21 ceros(matriz de 1 fila) % colocando imp(0) = 1 en la grafica.
8
IM P ULS O UNITA RIO P A RA 21 M UE S TRA S U(n)
1 V O L T I O S
0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -10
-8
-6
-4
-2
M UE S TRA S
0
2
4
6
8
10
F IG 1-8
EXPONENCIAL DECRECIENTE-.El siguiente programa genera y grafica una exponencial decreciente . ver figura 1-9 Fm = 20 ; % fm es 20 muestras /segundo n = 0:50; %se van a graficar 51 muestras v = 5*exp(-n/(Fm*0.5)); stem(n,v);
9
E XP O NE NCIA L E N TIE M P O DIS CRE TO 5
V O L T
4.5 4 3.5 3 2.5 2 1.5 1 0.5 0
0
5
10
15
20
25
M UE S TRA S
30
35
40
45
50
F IG 1-9
3. GENERACIÓN DE SEÑALES CON MICROCONTROLADOR PIC Aquí se pretende diseñar el hardware y el software necesario para producir una onda seno con un microcontrolador PIC16F84 de Microchip y un conversor digital / análogo DAC0808 de National Semiconductor, como se ve en la figura 1-10.
Figura 1-10. 10
Dado que con el conversor DAC0808 no es posible producir voltajes negativos vamos a producir la onda seno montada sobre un nivel DC de dos voltios, dicha onda se generará con una frecuencia de 100 Hz, con una frecuencia de muestreo de 10.000 muestras/segundo. La amplitud de la onda seno será de 2 voltios de tal forma que la ecuación analítica será: V(n) = 2*sin(2*pi*100*n/10000) + 2 de donde la frecuencia digital será f = 100/10000 = 1/100 de donde el periodo mínimo de esta seno es N = 100. Es decir, necesitamos generar una tabla de 100 valores los cuales pueden ser obtenidos con el siguiente programa en Matlab: n = 0:99 v = 2*sin(2*pi*n/100)+2 %estos 100 valores se muestran en tabla 1-1
2 3.1756 3.9021 3.9021 3.1756 2.0000 0.8244 0.0979 0.0979 0.8244
2.1256 3.2748 3.9372 3.8596 3.0717 1.8744 0.7252 0.0628 0.1404 0.9283
2.2507 3.3691 3.9646 3.8097 2.9635 1.7493 0.6309 0.0354 0.1903 1.0365
2.3748 3.4579 3.9842 3.7526 2.8516 1.6252 0.5421 0.0158 0.2474 1.1484
2.4974 3.5410 3.9961 3.6887 2.7362 1.5026 0.4590 0.0039 0.3113 1.2638
2.6180 3.6180 4.0000 3.6180 2.6180 1.3820 0.3820 0 0.3820 1.3820
2.7362 3.6887 3.9961 3.5410 2.4974 1.2638 0.3113 0.0039 0.4590 1.5026
2.8516 3.7526 3.9842 3.4579 2.3748 1.1484 0.2474 0.0158 0.5421 1.6252
2.9635 3.8097 3.9646 3.3691 2.2507 1.0365 0.1903 0.0354 0.6309 1.7493
3.0717 3.8596 3.9372 3.2748 2.1256 0.9283 0.1404 0.0628 0.7252 1.8744
TABLA 1-1 DATOS ALMACENADOS EN ORDEN POR FILAS Como se puede ver en la figura 1, el voltaje de referencia del conversor es 5.1 voltios, por lo tanto la resolución es: Resolución = 5.1/(2exp(8) –1) = 5.1/(256 –1) voltios/pasos = 0.02 voltios/paso Luego el equivalente digital de los valores de la tabla 1-1 , se calculan tomando el entero mas cercano de la división entre el valor correspondiente de la tabla 1-1 y la resolución. 11
De tal forma que si el valor es 2 entonces el equivalente digital es: Valor digital = 2/resolución = 2/ 0.02 = 100 y así para todos los valores, obteniéndose los valores de la tabla 1-2.Estos valores son los que deben entregarse al DAC0808. 100 159 195 195 157 100 41 5 5 41
106 164 197 193 154 94 36 3 7 46
113 119 125 131 137 143 168 173 177 181 184 188 198 199 200 200 200 199 190 188 184 181 177 173 148 143 137 131 125 119 87 81 75 69 63 57 32 27 23 19 16 12 2 1 0 0 0 1 10 12 16 19 23 27 52 57 63 69 75 81 TABLA 1-2 VALOR DIGITAL DE la tabla 1-1
148 190 198 168 113 52 10 2 32 87
154 193 197 164 106 46 7 3 36 94
Lo que nos queda ahora es escribir un programa en microcontrolador PIC, que entregue los datos de la tabla 1-2, a una rata de 10.000 muestras/segundo. Para esto vamos a generar una interrupción de sobreflujo del timer cada 100 microsegundos, que es el tiempo de muestreo a esta velocidad. Supóngase que el cristal opera a 4 MHz, o sea que la frecuencia básica de operación es 1 MHz. Si los bits PS2, PS1 y PS0 del registro OPTION se cargan con 001 respectivamente y se escoge el modo de preescala para el TMR0, éste se va a incrementar cada 4 microsegundos, o sea que se necesitaría 25 cuentas del timer para temporizar 100 microsegundos. Como la interrupción del timer de 8 bits ocurre en la cuenta 256, entonces la carga inicial del timer debe ser 256 – 25 = 231. El registro INTCON del PIC debe cargarse con 0A0h para habilitar la interrupción de sobreflujo del timer. El programa siguiente especifica el código detallado para obtener el objetivo propuesto. ;****************************************************************************************** ;EL SIGUIENTE PROGRAMA GENERA UNA ONDA SENOIDAL DE 100 HZ ;DE 2 VOLTIOS PICOS MONTADA SOBRE UN NIVEL DC DE 2 VOLTIOS ;CON UNA FRECUENCIA DE MUESTREO DE 10.000 M/S UTILIZANDO ;INTERRUPCIONES, PARA EL HARDWARE DE LA FIG 1. ;****************************************************************************************** TMR0 EQU 1 PCL EQU 2 APUNT EQU 0 ;APUNTA EL ENCABEZADO DE LA TABLA 1-2 INTCON EQU 0BH ;REGISTRO QUE CONFIGURA INTERRUPCIONES. STATUS EQU 03H 12
PTOA PTOB RP0
EQU EQU EQU
5H 6H 5
;AQUI SE CONECTA LAS ENTRADAS DEL DAC0808.
list p=16f84A CP_ON CP_OFF PWRTE_ON PWRTE_OFF WDT_ON WDT_OFF LP_OSC XT_OSC HS_OSC RC_OSC
EQU H'000F' EQU H'3FFF' EQU H'3FF7' EQU H'3FFF' EQU H'3FFF' EQU H'3FFB' EQU H'3FFC' EQU H'3FFD' EQU H'3FFE' EQU H'3FFF'
__CONFIG CP_OFF & WDT_OFF & XT_OSC & PWRTE_ON ORG 0 GOTO INICIO ORG 4 ;********************************************************************************* ;LA SIGUIENTE ES LA RUTINA DE SERVICIO DE INTERRUPCIONES ;********************************************************************************** INTERRUP: MOVLW .231 ; INICIALIZANDO TIMER MOVWF TMR0 MOVF APUNT,0 CALL TABLA ;SACA EL SIGUIENTE DATO MOVWF PTOB ;Y LO LLEVA AL DAC0808 INCF APUNT ;APUNTA SIGUIENTE DATO MOVLW .100 ;ES EL ULTIMO DATO DE TABLA? XORWF APUNT,0 BTFSS STATUS,2 GOTO FINAL BCF INTCON,2 CLRF APUNT ;VUELVE A EMPEZAR LA TABLA. RETFIE FINAL:
BCF INTCON,2 RETFIE
13
;******************************************************************************* ;EL SIGUIENTE CODIGO ARMA LOS DATOS DE LA TABLA 1-2 ;******************************************************************************** TABLA ADDWF PCL,1 RETLW .100 RETLW .106 RETLW .113 RETLW .119 RETLW .125 RETLW .131 RETLW .137 RETLW .143 RETLW .148 RETLW .154 RETLW .159 RETLW .164 RETLW .168 RETLW .173 RETLW .177 RETLW .181 RETLW .184 RETLW .188 RETLW .190 RETLW .193 RETLW .195 RETLW .197 RETLW .198 RETLW .199 RETLW .200 RETLW .200 RETLW .200 RETLW .199 RETLW .198 RETLW .197 RETLW .195 RETLW .193 RETLW .190 RETLW .188 RETLW .184 RETLW .181 RETLW .177 RETLW .173 RETLW .168 RETLW .164 RETLW .159 RETLW .154 RETLW .148 RETLW .143 RETLW .137 14
RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW
.131 .125 .119 .113 .106 .100 .94 .87 .81 .75 .69
RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW
.63 .57 .52 .46 .41 .36 .32 .27 .23 .19 .16 .12 .10 .7 .5 .3 .2 .1 .0 .0 .0 .1 .2 .3 .5 .7 .10 .12 .16 .19 .23 .27 .32 .36 .41 .46 .52 15
INICIO:
RETLW RETLW RETLW RETLW RETLW RETLW RETLW
.57 .63 .69 .75 .81 .87 .94
MOVLW MOVWF BSF MOVLW MOVWF CLRF BCF MOVLW MOVWF CLRF
0A0H INTCON STATUS,RP0 1 TMR0 PTOB STATUS,RP0 .231 TMR0 APUNT
ESPERE: NOP NOP NOP GOTO END
; INICIALIZANDO INTERRUPCIONES ; CAMBIANDO PAGINA1 ; TIMER 1:4 ; PTOS SALIDA ;INICIALIZANDO TIMER ;APUNTA INICIO TABLA ;ESPERANDO 100 MICROSEG.
ESPERE
********************************** EJERCICIOS: 1) Escribir un programa en Matlab para generar y graficar las siguientes señales escalón unitario desplazados: u(n-5) ,u(n-15), u(n+10) y u(n-2) , con 41 puntos. 2) Escribir un programa en Matlab para graficar 3 periodos de la señal de la fig 1-9 3) Escribir un programa en Matlab de tal forma que contenga una grafica y 3 botones rotulados SENO, TRIANGULAR y CUADRADA, de tal forma que al oprimir el botón respectivo aparezca en la grafica un período de la señal correspondiente. 4) Indicar cuál de las siguientes señales en tiempo discreto es periódica, y de la que sea periódica indicar el periodo. Explique su respuesta: a. 3cos(5t +pi/6) b. cos(n/8)cos(pi*n/8) c. cos(pi*n/2) - sen(pi*n/8) + 3cos(pi*n/4 +pi/3) 5) Considere la siguiente señal sinusoidal analógica: x(t) = 3sen(100*pi*t). a. Dibuje la señal x(t) para 0 ≤ t ≥ 30 ms (en Matlab) b. La señal x(t) se muestrea con una tasa Fs = 300 muestras/s. Determine la frecuencia de la señal en tiempo discreto y demuestre que es periódica. c. Calcule los valores de las muestras de un periodo de x(n). Dibuje x(n) en el mismo diagrama de x(t). (En Matlab) 16
6) Por un enlace de comunicaciones digitales se transmiten palabras codificadas en binario que representan muestras de la señal de entrada: x(t)=3cos600*pi*t+2cos1800*pi*t. El enlace trabaja a 10.000 bits/seg y cada muestra de entrada es cuantificada con 1024 niveles de tensión diferentes. a) Cuál es la frecuencia de muestreo y la máxima que no produce ambigüedad al recuperar la señal original? b) Cuál es la tasa de Nyquist para la señal x(t)? c) Cuáles son las frecuencias de la señal resultante en tiempo discreto x(n)? d) Cuál es la resolución? 7) Modificar el programa, escrito en ensamblador para PIC, de la sesión 3, conjuntamente con el hardware de la fig 1-10 para producir simultáneamente 2 ondas seno con la misma frecuencia y las siguientes diferencias de fase al oprimir las teclas 1,2,3 (de un teclado que debe adicionársele al hardware): a) 30 grados (al oprimir tecla 1) b) 45 grados (al oprimir tecla 2) c) 60 grados (al oprimir tecla 3) Nota: El programa solo debe contener una única tabla de valores.
17