1.3 Señales Analógicas y Digitales

Referencia: Lathi 1.3.2 p78, Hsu 1.2.B p2

señal analógica vs digital


1. Señales Analógicas

Una señal se clasifica como analógica cuando su amplitud puede tomar un infinito numero de valores en un rango contínuo de tiempo.

Por ejemplo, una señal de sonido como la del archivo:

Alarm01.wav

Nota: Descargue el archivo use un programa como windows media player para escuchar su contenido.

Instrucciones en Python

Para observar en una gráfica la señal del archivo de sonido anterior, a las librerías numéricas y gráficas, se añade la librería SciPy (scientific Python) que dispone de instrucciones para lecturas de archivos de audio en formato .wav

Nota: Si usa WinPython la librería viene incluida, en otro caso se puede instalar con PIP install scipy en la línea de comandos del sistema.

En el algoritmo se define el nombre del archivo.wav a usar, y mediante la instrucción waves.read() se obtienen los datos de velocidad de muestreo y el arreglo de sonido.

# Señales analógicas
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO
# archivo = input('archivo de audio: ')
archivo = 'Alarm01.wav'
muestreo, sonido = waves.read(archivo)

# SALIDA - Observacion intermedia
print('frecuencia de muestreo: ', muestreo)
print('dimensiones de matriz: ', np.shape(sonido))
print('datos de sonido: ')
print(sonido)

el resultado del algoritmo muestra:

frecuencia de muestreo:  22050
dimensiones de matriz:  (122868, 2)
datos de sonido: 
[[0 0]
 [0 0]
 [0 0]
 ..., 
 [0 0]
 [0 0]
 [0 0]]

En caso de requerir revisar más detalles sobre audio.wav se pueden encontrar en el siguiente enlace.

Archivos de Audio.wav – Abrir, extraer una porción

Con los resultados mostrados, se observa que:

  • la señal de audio tiene frecuencia de muestreo de 22050 Hz
  • Las dimensiones de la matriz sonido (122868,2) indican que es de tipo estéreo por usar dos columnas,
  • el valor de 122868 corresponde a la cantidad de muestras por canal,
  • Los índices para seleccionar un canal son 0 ó 1 interpretado como canal izquierdo o derecho.

Para observar la forma del sonido se extrae el canal 0 y solo un segmento o intervalo de tiempo [inicia,termina).

Para observar otros segmentos la señal de audio cambie los valores de  [inicia,termina), añadiendo las instrucciones siguientes:

# segmento de tiempo
canal  = 0
inicia = 2600
termina = 2720

# Extrae el segmento desde sonido
dt = 1/muestreo
ti  = np.arange(inicia*dt,termina*dt,dt)
muestras = len(ti)
segmento = sonido[inicia:inicia+muestras, canal]

#SALIDA
plt.plot(ti,segmento)
plt.xlabel('t segundos')
plt.ylabel('sonido(t)')
plt.show()


2. Señales Digitales

Una señal se clasifica como digital cuando la amplitud  puede tomar solo un número finito de valores, para un número finito de muestras en el tiempo.

Siguiendo el ejemplo de la señal de audio, las señales digitales se las asocia con computadoras. Para almacenar una señal de audio, se la cuantifica en amplitud a espacios iguales de tiempo dt.

Por ejemplo, datos del vector segmento del audio del ejercicio anterior muestran el caracter finito, discreto, por muestras de la señal.

# SALIDA - datos del segmento de audio
print(segmento)
[  -36   -52    11  -280  -595  -186   656   800   141
  -237   -53  -246  -910  -739   569  1347   620  -288
  -195   -57  -812 -1229   -37  1419  1183   -51  -348
    47  -424 -1322  -778   955  1531   432  -363   -62
  -123 -1062 -1189   306  1514   910  -172  -224   -57
  -720 -1191  -164  1241  1134    75  -295  -144  -533
 -1035  -367   953  1144   262  -234  -202  -499  -931
  -423   781  1095   344  -152  -174  -491  -916  -440
   739  1088   353  -149  -158  -467  -901  -472   693
  1116   405  -164  -172  -434  -906  -558   608  1139
   478  -159  -181  -370  -870  -655   494  1151   565
  -130  -180  -307  -812  -735   358  1149   666   -95
  -213  -291  -785  -824   214  1143   784   -31  -217
  -249  -727  -888    54]

los datos del segmento de audio, muestran que la señal de audio se almacena como una señal discreta, o digital, por lo que una gráfica más apropiada es:

# grafica segmento de sonido en forma discreta
ni = np.arange(inicia,inicia+muestras,1)
plt.stem(ni,segmento)
plt.xlabel('n')
plt.ylabel('segmento sonido[n]')
plt.show()

Observaciones

Los términos «contínuo en el tiempo» y «discreto en el tiempo» cuantifican la naturaleza de la señal solo en el eje de las abscisas (horizontal).

Los términos «analógicos» y «digitales» cuantifican la amplitud de la señal o eje de las ordenadas (vertical).

Una señal de audio, por su naturaleza es de tipo analógica, que para almacenarla o procesarla en un computador se convierte a digital al cuantificar sus valores de amplitud, de la forma mostrada en el ejercicio.


Tarea

  • cambie los rangos de observación de la señal de audio y repita las gráficas para su forma analógica aproximada (parte 1) y para su forma digital (parte 2)
  • comente sobre el segmento al inicio y final de todo el audio donde los valores de la señal son 0’s

Instrucciones en Python

# Señales analógicas
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO
archivo = 'Alarm01.wav'

# segmento de tiempo
canal   = 0
inicia  = 2600
termina = 2720

# PROCEDIMIENTO
muestreo, sonido = waves.read(archivo)

# Extraer el segmento de sonido
dt = 1/muestreo
ti = np.arange(inicia*dt, termina*dt , dt)
muestras = len(ti)
segmento = sonido[inicia: inicia+muestras,canal]

# SALIDA
print('frecuencia de muestreo:', muestreo)
print('dimensiones de sonido: ',np.shape(sonido))
print('datos del sonido:')
print(sonido)

print('segmento:')
print(segmento)

# Grafica
plt.stem(ti,segmento)
plt.xlabel('t segundos')
plt.ylabel('sonido(t)')
plt.show()