Está en la página 1de 17

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
8
O
L
T 6
I
O 4
S
2

-2

-4

-6

-8

-10
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
S E G UNDO S 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 de cero a 1 segundo en


intervalos de 1 milisegundo.
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.

0.8

0.6

0.4

0.2
V O LTIO S

-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 2
O NDA S E NO + RUIDO
O
L 1.5
T
I
1
O
S
0.5

-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 0.8
O
L 0.6
T
I
0.4
O
S
0.2

-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

0.5
V O LTIO S

-0.5

-1

-1.5

-2
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08
S E G UNDO S
FIG 1-5

O NDA CUA DRA DA CO N CICLO UTIL DE L 70%


2

V 1.5
O
L
T 1
I
O
0.5
S

-0.5

-1

-1.5

-2
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08
S E G UNDO S
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
8
O
L
T 6
I
O 4
S
2

-2

-4

-6

-8

-10
0 1 2 3 4 5 6 7 8 9 10

M UE S TRA S FIG URA 2


Figura 1-7

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; % generando 21 elementos


imp= zeros(1,21); % generando un vector con 21 ceros(matriz de 1 fila)
imp(11) = 1; % colocando imp(0) = 1 en la grafica.
stem(n,imp)

8
IM P ULS O UNITA RIO P A RA 21 M UE S TRA S U(n)
1
V
O 0.9
L
T 0.8
I
O 0.7
S
0.6

0.5

0.4

0.3

0.2

0.1

0
-10 -8 -6 -4 -2 0 2 4 6 8 10
M UE S TRA S
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

4.5
V
O
4
L
T
3.5

2.5

1.5

0.5

0
0 5 10 15 20 25 30 35 40 45 50
M UE S TRA S 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 2.1256 2.2507 2.3748 2.4974 2.6180 2.7362 2.8516 2.9635 3.0717


3.1756 3.2748 3.3691 3.4579 3.5410 3.6180 3.6887 3.7526 3.8097 3.8596
3.9021 3.9372 3.9646 3.9842 3.9961 4.0000 3.9961 3.9842 3.9646 3.9372
3.9021 3.8596 3.8097 3.7526 3.6887 3.6180 3.5410 3.4579 3.3691 3.2748
3.1756 3.0717 2.9635 2.8516 2.7362 2.6180 2.4974 2.3748 2.2507 2.1256
2.0000 1.8744 1.7493 1.6252 1.5026 1.3820 1.2638 1.1484 1.0365 0.9283
0.8244 0.7252 0.6309 0.5421 0.4590 0.3820 0.3113 0.2474 0.1903 0.1404
0.0979 0.0628 0.0354 0.0158 0.0039 0 0.0039 0.0158 0.0354 0.0628
0.0979 0.1404 0.1903 0.2474 0.3113 0.3820 0.4590 0.5421 0.6309 0.7252
0.8244 0.9283 1.0365 1.1484 1.2638 1.3820 1.5026 1.6252 1.7493 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 106 113 119 125 131 137 143 148 154
159 164 168 173 177 181 184 188 190 193
195 197 198 199 200 200 200 199 198 197
195 193 190 188 184 181 177 173 168 164
157 154 148 143 137 131 125 119 113 106
100 94 87 81 75 69 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 57 63 69 75 81 87 94
TABLA 1-2 VALOR DIGITAL DE la tabla 1-1

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 EQU 5H ;AQUI SE CONECTA LAS ENTRADAS DEL DAC0808.
PTOB EQU 6H
RP0 EQU 5

list p=16f84A

CP_ON EQU H'000F'


CP_OFF EQU H'3FFF'
PWRTE_ON EQU H'3FF7'
PWRTE_OFF EQU H'3FFF'
WDT_ON EQU H'3FFF'
WDT_OFF EQU H'3FFB'
LP_OSC EQU H'3FFC'
XT_OSC EQU H'3FFD'
HS_OSC EQU H'3FFE'
RC_OSC 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 .131
RETLW .125
RETLW .119
RETLW .113
RETLW .106
RETLW .100
RETLW .94
RETLW .87
RETLW .81
RETLW .75
RETLW .69

RETLW .63
RETLW .57
RETLW .52
RETLW .46
RETLW .41
RETLW .36
RETLW .32
RETLW .27
RETLW .23
RETLW .19
RETLW .16
RETLW .12
RETLW .10
RETLW .7
RETLW .5
RETLW .3
RETLW .2
RETLW .1
RETLW .0
RETLW .0
RETLW .0
RETLW .1
RETLW .2
RETLW .3
RETLW .5
RETLW .7
RETLW .10
RETLW .12
RETLW .16
RETLW .19
RETLW .23
RETLW .27
RETLW .32
RETLW .36
RETLW .41
RETLW .46
RETLW .52
15
RETLW .57
RETLW .63
RETLW .69
RETLW .75
RETLW .81
RETLW .87
RETLW .94

INICIO: MOVLW 0A0H ; INICIALIZANDO INTERRUPCIONES


MOVWF INTCON
BSF STATUS,RP0 ; CAMBIANDO PAGINA1
MOVLW 1 ; TIMER 1:4
MOVWF TMR0
CLRF PTOB ; PTOS SALIDA
BCF STATUS,RP0
MOVLW .231 ;INICIALIZANDO TIMER
MOVWF TMR0
CLRF APUNT ;APUNTA INICIO TABLA

ESPERE: NOP ;ESPERANDO 100 MICROSEG.


NOP
NOP
GOTO ESPERE
END

**********************************

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

También podría gustarte