SEÑALES 1. SEÑALES EN TIEMPO CONTINUO. Una señal en

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