# Transmisión de voz con PIC (PCM)



## yeinss (May 3, 2011)

El proyecto consiste en trasmitir voz de un pic a otro pic!!! 
primero debemos de tener claro la trasmicion, en este caso digital.

*PROCESO MODULACIÓN PCM*

Codificación Analógica-Digital Modulación de Amplitud de Pulso(PAM) 
Modulación PCM 
Tasa de prueba  

la *trasmicion digital* es la trasmicion de pulso digitales, entre dos puntos, en un sistema de comunicación, la información de la fuente original debe estar ya sea en forma digital o en señales analógicas que deben convertirse a pulsos digitales.

la *modulación de pulsos* incluye muchos métodos diferentes para convertir información a forma de pulsos para transferir pulsos de una fuente, los cuatro métodos predominantes son modulación de ancho de pulso(PWM) modulación de amplitud de pulsos(PAM) y modulación de pulsos codificados(PCM)

*PAM*:
Esta técnica recoge información análoga, la muestra (ó la prueba), y genera una serie de pulsos basados en los resultados de la  prueba, es un tipo de modulación de impulsos en los que la información está codificada en la amplitud de un pulso.






*PCM* modifica los pulsos creados por PAM para crear una señal completamente digital. Para hacerlo, PCM, en primer lugar, cuantifica los pulsos de PAM. La cuantificación es un método de asignación de los valores íntegros a un rango 





*Muestreo* Técnica mediante la cual se toma valores instantáneos de una señal análoga a intervalos de tiempo como las señales análogas tienen información redundante por esa razón se pueden tomar muestras que son las que se trasmiten.

*Teorema de Nyquist* o teorema de muestreo: lo primero que se debe hacer es limitar la frecuencia de la señal que se va a muestrear con un filtro pasabajo esto se denomina limitar la señal en banda para obtener la frecuencia máxima de la señal, podemos recuperar la señal limitada en banda a partir de sus muestras si estas se toman a intervalos de tiempo ts(tiempo de muestreo) y se debe cumplir:

ts<=1/2fm
fm = frecuencia máxima de la señal de información
fx>=2fm
para garantizar el funcionamiento
fs<2fm+25%fm
en resumidas cuentas el teorema demuestra que la reconstrucción exacta de una señal periódica continua en banda base a partir de sus muestras, es matemáticamente posible si la señal está limitada en banda y la tasa de muestreo es superior al doble de su ancho de banda. Es un error frecuente y extendido creer que una misma señal muestreada con una tasa elevada se reconstruye mejor que una muestreada con una tasa inferior.

Tendiendo los conceptos claros podemos empezar por la parte de adquisición de la señal con lo que utilizaremos un eletret. el circuito es muy fácil como se observa en la gráfica.




V+ en este caso sera 5V, ya que los necesitamos tambien para el pic 

*FILTRO*
segun lo anteriormente dicho, el siguiente paso es limitar la señal en banda,  para lo cual necesitamos conocer la frecuencia de la voz, dicha frecuencia tiene un máximo aproximado de 3.4Khz en telecomunicaciones se suele filtrar la señal de voz con un filtro pasabajos a 4Khz especialmente en las comunicaciones telefónicas, por ello vamos a diseñar un filtro a esta frecuencia 
para el filtro pasabajos vamos a utilizar un operacional LF353 alimentado con +12 y -12, los +12 se conectan a el pin8 y los -12 al pin4 este integrado cuenta con dos operacionales donde el pin 1 es la salida del primero, el pin 2 es la entrada inversora del mismo y el pin 3 la entrada no inversora, por el otro lado tenemos que el pin 7 es la salida, el pin 6 es la entrada inversora y el pin 5 la entrada no inversora, teniendo esto claro pasamos al diseño del filtro inversor. donde 
R1=R2=2K
R3=1K
C1=22nF
C2=10nF





en este punto es donde nos preguntamos, como metemos la señal al pic si la señal tiene parte negativa, con esto nos cargamos el pic ademas de que la amplitud puede superar los 5 voltios del pic 

bueno por ahora la señal es bastante baja ya que el filtro no tiene una ganancia como tal. 

si entendieron sabrán que la señal va entrar por el conversor análogo-digital del pic.

*Amplificación*
en esta parte vamos a hacer una amplificación para que la señal nos quede con una buena amplitud para que esta entre en el pic, es un circuito muy simple donde utilizaremos el otro operacional del LF353 colocaremos una resistencia a la entrada de 1K y un potenciómetro, como resistencia variable de maximo 500K  entre el pin de entrada inversora y la salida y el pin de entrada no inversora lo ponemos a tierra, esto nos sirve para cuadrar que tan cerca se esta del eletret.

Ahora si tenemos una señal que va a ser capturada en un mayor rango, ya que con esto podemos hacer que la señal ocupe todos los bits del conversor análogo-digital pero tenemos el problema que tiene una parte negativa y que aun así la amplitud puede aumenta. para esto vamos a usar un operación LM358. cual es la diferencia con respecto al otro? pues nada  bueno la diferencia mas importante es que este se puede alimentar con +5 y tierra, la distribución de los pines es la misma, para que lo alimentamos con +5 y tierra, pues para que este no pueda generar una salida mayor a 5 ya que esa es la alimentacion en caso de ser mayor se saturaría y la salida seria 5V y en caso de ser menor pasaria lo mismo la señal no bajaría menos de 0V. 

con esto solucionamos el problema de no ir a dañar el pic, pero aun asi la señal tiene una parte negativa, para esto simplemente usamos este operacional como sumador
necesitamos que la señal no este sobre 0V si no que este sobre 2.5V.

Tenemos que la formula del sumador es 
-Vo=RF/R1+R/R2+R/RN




vale la pena aclarar que si la salida esta invertida no tendrá ningún efecto sobre el sonido.

vamos a usar RF=R1=R2=1K
por una resistencia entra la señal de audio y por la otra conectamos un trimmer o potenciometro entre 5v y 0V y lo configuramos para que el voltaje sea 2.5 entre el pot y la resistencia de 1K.
como tenemos un operacional sin usar, a este le podemos dar algún uso, como por ejemplo colocar un filtro pasivo y un seguidor de voltaje, no es necesario pero nos ayudaría a eliminar ruido. 

*CAD*
en esta parte ya tenemos la señal lista para ser ingresada por ADC del pic. que va a hacer la que muestre la señal. el dato tiene que llegar al otro pic a una frecuencia superior a 8Khz por el teorema de muestreo, para este proyecto en particular decidí usar un conversor a 10bits con el fin de obtener el mejor sonido posible y pues para cumplir con dicho teorema voy usar un pic18f4550 un cristal de 20Mhz porque no tengo de ningún otro  y configurar el pic con un reloj de 48Mhz esto lo hago no por superar los 8Khz ya que como vimos no importa si es mayor al doble la señal va a ser la misma, solo lo hago porque no voy a hacer los cálculos que demora la captura del dato el envio y todo eso, con esto garantizo que se cumpla el teorema. (adjunto el codigo). hecho en picc compiler

La comunicación entre los pic es I2C los dos pic son 18F4550 ambos a 48Mhz de igual manera se puede usar otros y otras frecuencias de reloj siempre y cuando se cumpla el teorema.

*RECEPCIÓN*
en esta parte en la que el dato nos esta llegando constantemente, vamos a convertir esa señal analógica en una señal digital, lo que seria un conversor digital-análogo, la forma mas simple y efectiva de hacer esto es con un sumador!!! en el programa podemos ver que el dato es mostrado por dos puerto.

usamos un sumador inversor como ya lo hicimos antes, el porque solo utilizo inversores, es porque en la practica he visto que responden mejor que los no inversores para este sumador usamos las siguientes resistencias
1K 2k 4k 8k 16k 32k 64k 128k 256k 512k
si no tenemos estas resistencias pues usamos trimmers, la rs es aconsejable usar un trimmer y cuadrar que cuando el pic envie 5V la salida sea 5V y por ultimo podemos usar otro sumador y bajar la seña para que quede sobre 0V esto hace que tenga mejor sonido igualmente no es necesario en esta parte ya solo queda amplificar la señal!! 

por ultimo podemos colocar un filtro pasivo pasabanda, un filtro pasaaltos en serie con uno pasabajos, que viene dado por la ecuacion Fc=1/2pi*C*R
con esto tenemos que el pasaaltos seria mas o menos un condensador de 100 nF en serie con una resistencia de 51K y el pasabajos una resistencia de 3.8K en serie con un cap de 10nF, esto con el fin de que nuestra señal quede lo mas sinusoidal posible

Este proyecto fue montado y probado funciona 100% desde Bogotá
U. Distrital PTE


----------



## hcluf (Jun 26, 2011)

que compilador usas


----------



## virgilio1100 (Jun 28, 2011)

Hola, tengo una duda, sobre el tema voz con pic, muy interesante.
Te pregunto, se podria hacer un modulo que se contecte al celular y poder contectar con otro celular y este tambien con su modulo

modulo = comunicacion(pic)

          hablar <------------------------------> hablar
         modulo1 --> celular 1 <--> celular 2 <-- modulo2

Es decir utilizar el modulo como medio para hablar haciendo uso del celular.
Sabes si hay modulos hechos o para montar kits ?
Muchas gracias de antemano y saludos desde Sevilla.


----------



## yeinss (Ene 26, 2012)

el compilado es pic c, y en cuanto a los modulos si se puede siempre y cuando se respete teorema de nyquist, para este caso yo use solo i2c por facilidad, pero hubiera sido mas interesante usar algo inalambrico, como modulos rf, entre otros aunque no se bien a que modulos te refieres o mejor que es lo que pretendes jeje 
saludos!!!


----------



## azul1980 (Jun 23, 2012)

Hola muy bueno tu post yo estoy haciendo tambien un transmisor de voz pero quiero hacer una comunicacion full duplex, se puede hacer una comunicacion full duplex de voz entre dos pics?? alguien que tenga un ejemplo de esto aglun link se lo agradezco. Saludos


----------



## asherar (Jun 23, 2012)

Sugiero una idea para reducir la cantidad de componentes y poder hacer todo más pequeño. 
El circuito modificado queda como muestro en la figura. 
La resistencia del preset es un poco menos de 10 k por la caída entre emisor y colector. 
Para medir el valor exacto se debe poner la entrada en corto (o simplemente no hacer ruido) 
e ir moviendo el tornillo del preset hasta medir V/2 en la salida. 
Una vez logrado esto se mide la resistencia del preset y se lo reemplaza por una R fija de 
ese valor.
Si la salida se toma del emisor se obtiene una señal idéntica a la de colector pero con la fase contraria.


----------



## LaElectronicaMeOdia (Jun 23, 2012)

Hola ASherar.

segun entiendo el diseño original es utilizar un pre con el BJT 2n3904-> filtro con el LF353->Amplificador con LF353->Sumador con LM358->ADC Pic

con la mejora que propones que es lo que se reduce?


----------



## DJ DRACO (Jun 23, 2012)

Lo del sumador y acondicionador de señal de salida hacia el pic


----------



## asherar (Jun 23, 2012)

Claro. Además del circuito que propuse habrá que poner el filtro que convenga. 
Aparte de eso, se obtiene una señal lineal entre 0 y 5 V, perfecto para el pic.
No recuerdo el LF353 pero algunos operacionales no dan el rail-to-rail.
En estas aplicaciones se suele trabajar con pequeña señal, por lo que 
perder 0.5 V de rango dinámico en cada extremo no es grave.


----------



## DJ DRACO (Jun 23, 2012)

Sherar...el tema es que cambiaste de lugar la resistencia de realimentación del transistor, eso no afecta?


----------



## asherar (Jun 23, 2012)

La forma de polarización del circuito inicial, hace que el circuito sea menos sensible a las 
variaciones de temperatura debidas al funcionamiento normal. 
En el circuito que propuse la polarización es fija, y entonces ya no autocompensa las 
derivas térmicas. 
Ahora, si estas variaciones térmicas son pequeñas el punto de trabajo se mueve poco y 
se mantiene en la zona lineal del transistor. 
Si el punto de trabajo se corriera demasiado, o si se tuviera señal de entrada con mucha 
amplitud, se produciría distorsión. 
Pero para un mic. electret  no creo que sea el caso. 

Yo he usado ese circuito para señal no acústica (frecuencia < 100 Hz). 
En ese rango da un punto medio perfectamente ajustable, que es lo que propuse. 
No me puse a jugar con otras variables.

EDITADO: 
La resistencia que puede sacarse es la de base a tierra de 100k, ya que de base a emisor 
hay una tensión  fija Vbe, y entonces Vb se puede ajustar solamente desde el preset.


----------



## torres.electronico (Jun 24, 2012)

Muy buen proyecto; Ademas, lo bueno de todo esto, es que distes los pies para arrancar otros proyectos con esta misma base teorica... Por ejemplo, se me ocurre que se puede emplear para armar un pequeño chip corder... puliendo un poco la manera de guardarlo en una meoria serial y luego como sacarlo creeria que no estaria muy lejos el tema... Saludos


----------



## asherar (Jun 24, 2012)

Otra aplicación es la *codificación o compactación del habla*. 
Pueden ver un resúmen del tema  por *aquí*.


----------



## asherar (Jun 26, 2012)

Este circuito es ideal para centrar y amplificar una señal de audio de baja amplitud. 

Vsal = 2.5 V + G x Vin

G es aprox. de 30.000 veces

Tomado del "Libro de cocina de CMOS" de Don Lancaster. 

The Hardware Hacker Library


----------



## DAVIDXIKO (Jun 26, 2012)

y como quedaria el circuito final de todo este proyecto???


----------



## LaElectronicaMeOdia (Jun 26, 2012)

asherar dijo:


> Este circuito es ideal para centrar y amplificar una señal de audio de baja amplitud.
> 
> Vsal = 2.5 V + G x Vin
> 
> ...



Asherar, imagino que ese amplificador podria funcionar, pero... no estaria mejor si se aprovechara y se diseñara un  filtro no inversor con alguna ganancia y asi quedar el pre->Filtro->ADC Pic.
o quizas el filtro con la señal invertida tomada del emisor del pre  y amplificarlo con el mismo AO del filtro. si no me doy a entender subo un esquema.

P.D. Disculpa si lo que digo es una burrada pero estoy en mis primeros pasos en cuestiones de audio.


----------



## asherar (Jun 26, 2012)

DAVIDXIKO dijo:


> y como quedaria el circuito final de todo este proyecto???


Eso quedará según tus necesidades. Nadie va a terminar el proyecto aquí.



LaElectronicaMeOdia dijo:


> Asherar, imagino que ese amplificador  podria funcionar, pero... no estaria mejor si se aprovechara y se  diseñara un  filtro no inversor con alguna ganancia y asi quedar el  pre->Filtro->ADC Pic.
> o quizas el filtro con la señal invertida tomada del emisor del pre  y  amplificarlo con el mismo AO del filtro. si no me doy a entender subo un  esquema.
> 
> P.D. Disculpa si lo que digo es una burrada pero estoy en mis primeros pasos en cuestiones de audio.


El ampli que subí es una joyita. Anda perfecto para la etapa de entrada. Luego acondicionas (amplificas y filtras) la señal como más convenga.


----------



## LaElectronicaMeOdia (Jun 26, 2012)

ah.  ya entiendo! a probarlo . Gracias


----------



## stevenudsitrital (Nov 17, 2013)

compañero también soy de la distrital y también tengo que hacer el modulador pcm sera que me puedes pasar información que te haya sido útil al momento de desarrollar este laboratorio.!


----------



## deivis (Feb 19, 2016)

buenas saludos, no soy bueno en programación y le planteo mi problemática: realice el acondicionamiento de adquisición de voz desde (80hz a 4khz), de allí usando pic c compiler tengo que convertir esa señal analógica a digital usando un micro-controlador 18f4550 a su vez quiero tener dos frecuencia de muestreo, es decir ver las dos desde el micro controlador (11.025khz que son 88kbps y 22.050khz que son 166kbps), de allí procesar todo esto a través del protocolo rs232 y observar esas muestras en tiempo real en matlab? gracias por su atención espero me colaboren para finiquitar este proyecto lo mas pronto posible.
les mando la etapa en de acondiconamiento en proteus y lo poco que he echo en pic c compiler

aquí los archivos adjuntos


----------



## TRILO-BYTE (Feb 19, 2016)

pues con el teorema de Nyquist

*f*s=2*f*max

ahora digamos que muestrearas una voz de 4khz no hay que ser tan exigentes con 4k bastan.

tendras 8khz  ahora debes enviar por RS232 bien facil

primero que nada leer el ADC y guardar en un byte

unsigned char byte;

byte=ADC();

putc(byte);


bien facil no?


ahora ¿a que velocidad mandar por 232?
pues como dije no vamos a enviar a 9600 baudios
no por eso era lo del teorema de nyquist.



> 300
> 1200
> 2400
> 4800
> ...




por medio de lo que calcules debes hacer la transferencia de datos no te dire cual pero si piensale


----------

