universidad autonoma metropolitana etapalapa

Anuncio
UNIVERSIDAD AUTONOMA METROPOLITANA
ETAPALAPA
c. & - 7'
SISTEMA DE CODIFICAC16N PREDICTIVO
AUTORES
CLAUDIA JARA RIVERA
HÉCTO~MEZ
SERRANO
INDICE
I. INTRODUCCI~N
1
II.MARC0 TEdRICO
11.1 La señal de voz
II.2 Métodos de Codificación Predictiva
11.3 Sistema de Codificación Predictiva
II.4Aplicación de Codificación Predictivaa señales de voz
111. DESARROLLO
III.1Muestre0 y Filtrado de la señal de entrada
III.2 Determinación de los parhetros del predictor
11
11
12
IV. SECCIdN DEPROGRAMAS
14
V. RESULTADOS ESPERADOS Y OBTENIDOS
64
VI. CONCLUSIONES
65
VII. BIBLIOGRAF~A
65
SISTEMA DE CODIFICACI~N
PREDICTIVO
I. INTRODUCCI~N.
El propósito de la voz es la comunicación. Tradicionalmente, la voz ha sido usada para
comunicar conceptos acústicamente de un humano a otro, sin embargo durante los pasados 100
años ha sido posible transformar la señal acústica de voz en señales de corriente eléctrica o en
grabaciones magnéticas. Ademásde esto, recientemente ha sido posibleeluso de la voz para
comunicar conceptos entrehumanos y máquinas.
Aunque la voz es una señal =lógica, la ventaja de la computación digital y las técnicas
de procesamiento digitalde señales, es que han permitido el análisis y procesamiento de las señales
de vozpor medios digitales. Esto esconocidocomoprocesamiento digital de voz y dentrodel
trabajo que aquí se presenta es uno de los principales puntosde interés. Sin embargo, y ya que
nuestro interés está también enfocadohacia la transmisión de señales de voz, es necesario aclarar
que el principal interés será optimizar los canales para transmisión de voz, a s í como la calidad de
esta, generimdose por lo tanto un compromiso entre calidad y cantidad, calidad de voz, ancho de
banda requerido.
Dividiremos este trabajo en tres partesprincipalmente. En la primerparteharemos un
análisis a nivel teórico sobre el modelo digital del proceso de producción de voz, se analizarán
también las diferentes técnicas para el análisis de las señales de voz. En la segunda parte, se dará
a conocer el proceso de desarrollo de la parte central de este trabajo, que es la construcción de un
programasimuladorparatransmisión
de voz,utilizando ADPCM (Adaptive DigitalPredictive
Codification Modulation). En la tercer parte de este trabajo se presentan los resultados obtenidos
durante y al final del desarrollo, a s í como las conclusiones de este trabajo.
UNIVERSIDAD AUTONOMA METROPOLITANA
IZTAPALAPA
SISTEMA DECODIFICACIoN PREDICTIVO
11. MARCO T E ~ R I C O
11.1. L A
SERAL
DE VOZ
La voz es el resultado demuy complejos y no completamenteentendidos procesos. Un
“concepto”que se forma enel cerebroesconvertido a señalesneuronalesque viajan porlos
músculos de los componentes de producción de voz (lengua, traquea, etc), y que llevan a cabo el
proceso de producción de voz. Estos componentesproducenentoncesunaonda acústica que es
radiada desde la cabeza como señal de voz.
La voz puede ser aun considerada como compuesta por elementosde información discreta,
L o s elementos básicos de la voz son conocidos como fonemas. Si consideramos el lenguaje Inglés,
éste tiene aproximadamente 42 fonemas, los cuales pueden ser representados en 6 bits y ya que la
máxima relación de producción de las articulaciones esde aproximadamente 10 fonemas / seg, esto
da una relación de voz de alrededor de los 60 bitdseg. Sin embargo, lo anterior sería válido si se
considerara únicamente la relación duranteuna lectura por ejemplo, pero no considera factores
como stress, pitch o amplitud de voz. Este tipo de información requiere auna realción mucho más
grande, desde los 300 bits/seg hasta 60,00Obits/seg, dependiendo de la naturaleza y la calidad.
11.2 MÉTODOS DE CODIFICACI6N DE VOZ
El objetivo de los métodos de codificación eficientes, es reducir la capacidad requerida por
los canales de transmisión al transmitir una señal con una fidelidad especifica. Para alcanzar este
objetivo, es
frecuentemente
escencial reducir la redundancia
de
la señal transmitida. Un
procedimientobienconocidoparareducción
de la redundanciaen la señal transmitida es la
codificación predictiva. En la codificación predictiva, la redundacia se reduce substrayendo de la
señal esa parte la cual puede ser predicha a partir de sus muestras pasadas. Para muchas señales,
el primer orden de entropía de
la diferencia de la señal es mucho menor que el primer orden de
entropia de la señal original; esto es, la señal dediferencia es mejor para codificar que la señal
original. La codificación predictiva ofrece una manera practica de codificar señales eficientemente
sin requerir grandes cantidadesde memoria.
Muchos métodosde codificación previos han empleadoesquemaslos
cuales intentan
separar las contribuciones de la exitacion vocal de aquella funciónde transmisión. El bien conocido
canal vocoder deDudley fueelprimer intento en esta dirección.Aunquelosvocoderspueden
reproducir el habla con enendimiento, existe una perdida apreciable en la naturaleza y calidad del
habla,esta degradación en la calidad del hablaesdebida a que eleva en variasoperaciones al
proceso de regulacion de la señal de voz o aproximación de esta.
Aqui se muestra un procesodiferentepara
codificar señalesde voz,basados en codificación
predxtiva, las cualesevitan las dificultades encontradas en losvocoders.Aunque la codificación
predictiva utiliza caracteristicas de señales de voz y una estructura clara, su operación no depende
solamente de una parametrización rigidade una señal de voz.
Estudios previos de los sistemas predictivos para señales de voz han sido limitados a predictores
lineales con coeficientes estacionarios. Como siempre debido a la naturaleza no-estacionaria de las
señales de voz, un predictor estacionario no puede predecir los valores eficientemente de la señal
para todos los tiempos, por ejemplo la forma deondade la voz es periodica aproximadamente
durante pequeñasporciones; esto es una buena predicción del valor presente enla señal puede estar
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
2
SISTEMA DE CODIFICACIbN PREDICTIVO
basada enel valor de las señalexactamente un periodo antes. El periodo de las señales de voz
varian con el tiempo. El predictor por tanto debe cambiar con la variación del periodo de la señal
de entrada.
En los sistemas de codificación predictivadescritosposteriormente,elpredictorlineal
es
adaptivo, esto es se reajusta periodicamente para empatarlas caracteristicas de tiempo-varianza de
la señal deentrada.
Los parámetrosdelpredictorlinealsonoptimizadosparaobtener
una
predicción eficiente en el sentido en el cual el error cuadrático medio entre el valor predicho y
el
valor verdadero sea mínimo
11.3 SISTEMA DE CODIFICACIóN PREDICTIVA
El principio de la codificación predictiva se muestraen el siguiente diagrama.
CANAL
Sn
dn
d’n
DIGITAL
r ‘n
...........
U
fig 1-Diagrama de Bloques del Sistema de Codificación
La señal de entrada s(t) es muestreada a una velocidad de Nyquist para producir muestras
sn de la seña1,el predictor forma un estimado 2, de la señal presente basado en los valores de las
muestras pasadas m-1,m-2...de la señal reconstruida en el transmisor. El valor predicho Sn de la
señal es entonces restado del valor de la señal sn para formar la diferencia dn donde dn= sn- S.n,
la cual es cuantizada, codificada y transmitida al receptor. Al mismo tiempo, la señal transmitida
es decodificada en el transmisor y la señal es reconstruida exactamente de la misma manera como
lo hizo el receptor, la señal reconstruida es entonces usada para predecir la siguiente muestra de la
señal de entrada.
En el receptor la señal transmitida es decodificada y adicionada
al valor predicho de la
señal para formar las muestras m ’ de la señal reconstruida. El predictor usado en el receptor es
idéntico al empleadoenel transmisor. Las muestras m ‘ de la señal reconstruida son fínahente
pasadas por un filtro pasa bajopara producir la señal de salida r ‘(0.
RELACIóN SEÑ& A RUIDO DE LA CUANTIZACIÓN
la figura #l,dejemos que Ps sea el
Considerandoelcodificadorpredictivomostradoen
valor cuadrático medio de las muestras de la señal de entrada sn, P6 que sea el valor cuadrático
medio de la diferencia entre las muestras de la señal dn,Pq sea el valor cuadrático medio del ruido
de cuantización en el decodificador con la diferencia de la señal dn’y Pe sea el valor cuadrhtico
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
3
SISTEMA DE CODIFICACIdN PREDICTIVO
medio del ruido de cuantización en la señal reconstruida m' .Mostramos ahora queen ausencia de
errores en la transmisión en un canaldigital, la relación señal a ruido Ps / Pe de la señal
reconstruida esta dado por:
Ps
-
P6 Pe
=
ps
*p6
Pq
En otras palabras la relación señal a ruido de cuantkción de la señal reconstruida excede
a la relación señal a ruido de la diferencia del decodificador porun factor igual a la razón del valor
cuadrático medio de la señal de entrada que del valorcuadrático medio de la diferencia de la señal.
El sistema de codificación predictivaes entonces superior al de un sistema puro PCM. aún cuando
1. Para una señal como la voz,esto es necesariamente
la relación Ps/Pd esmuchomayorque
cierto. Los resultados obtenidos por la simulación en una computadora del sistema decodificación
predictiva,muestranque Ps / Pdescomode
100 paraseñales devoz y usando codificación
predictiva uno espera una relación de 20db en la razón señal a ruido sobre PCM cuando se usan
idénticos niveles de cuantización.
Para probar la ecuacion (1) necesitamosprimeromostrarqueelerrorentrecualquier
muestra de una señal reconstruiday la muestra correspondiente dela señal de entrada es idéntica al
error introducido por el cuantizador, el codificador
y el decodificador.
El error enentre la muestra
entrada esta dado por :
m'
de la señal reconstruida y la muestra sn de la señal de
En ausencia de errores de transmisión en el canal digital podemos reemlazar m' en la ecuación (2)
por m y reescribir la ecuación (2) como:
en= ( m
- sn) - ( sn - 8n )
(3)
esto es porque si
m =
dn'+ 8n
(4)
además
en combinación de (3) (4) y (5) obtenemos :
en =
dn' - dn
(6)
representa el error introducido por el cuantizador,el decodificador
y el decodificador, asi el error en
la enésima muestra dela señal reconstruida es idénticoal error en la enésima muestra dela señal de
la diferencia del decodificador.
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
4
SISTEMA DE CODIFICACI~N
PREDICTIVO
La relación señal a ruido de la señal reconstruida es por definición:
Ps=
PC P6 Pe
ps * p 6
f7)
desde el valor cuadrático medio Pe del ruido en la señal reconstruida es idéntico al valor cuádratico
mediopedelruidocuantizadoen
la diferencia de la señalen el decodificador Pe en ellado
derecho de (7) puede reemplazarse por Pq para obtener(1).
11.4 APLICACIóN DE LA CODIFICACIÓN PREDICTIVA ASEÑALES DE VOZ
.
11.4.1 PREDICCI~N LINEAL DE SEÑALES DE voz
Dos de las principales causas de redundancia en la voz son:
i) Quasiperiodicidad durante los segmentos de voz
ii) El espectro de voz no es plano.
La forma exacta delpredictorpara
la ondadevozdependedelmodelousado
para
representar el proceso de producción de la voz humana. Un modelo razonable para la producción
desonidosdevozesobtenidorepresentandoestoscomo
la salida de un filtro linealdiscreto
variante con el tiempo el cual es exitado por
un tren de pulsos mostrado en la figura #2.
K=l
Filtro Transversal
I
fig. 2- Modelo para la produccibn de sonidos
La salida del filtro lineal a cualquier instante de tiempo es una combinacion lineal de l a s
salidas P pasadas y las muestras de entrada. El número de muestras pasadas P esta dado por un
par denumerosde resonancias o formatosdelaparatovocallascualesestancontenidas
en los
rangos de frecuencia. Por ejemplo, enel caso de señales de voz la banda se limita a 3 Khz, esta
puede asumir 3 o 4 formatos.Un valor aceptable de P es entonces8,
UNIVERSIDADAUT~NOMAMETROPOLITANA
IZTAPALAPA
5
SISTEMA DE CODIFICACIbN PREDICTIVO
Así sn y Un son las amplitudesde salida y entradarespectivamente,ver figura #2, al
enésimo instantede muestreo. El muestreo de salida enésimo sn esta dado por :
donde :
M es el periodo de exitación de la señal y b toma la cantidad de la variación de la amplitud de
entrada del tren de pulsos de un periodo al siguiente.
Para condiciones naturalesde lenguaje, el periodo de exitación de la señal es usualmente menor de
15 milisegundos y como una primer aproximación el efecto de la variación en el tiempo de los
coeficientes ak desde un periodo al siguientepueden ser tomadasposteriormente. Bajo este
concepto encontramos que:
= p U,,
- M la ecuación (10) se reduce a:
ahora si U,,
Lo cual determina completamentela estructura del predictor lineal.
Undmgramadebloquesdelpredictorcomo
mostrada en la figura #3.
sedescribe en la ecuaciónanterior y es
Pl(z)= p i M
"I
ENTRADA
fig 3- Diagrama de Bloques Para El Sistema Predictor
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
6
SISTEMA DE CODIFICACI~N
PREDICTIVO
Tanto elretardo M comotambiénlosparametros
alfa y beta son variables y son
reajustados sus valores periodicamente para empatarlas caracteristicas de la señal de entrada.
Idealmentelosreajustes de los parmetros delpredictornecesitan ser hechossolamente
cuando estos tengan cambios en las caracteristicas de la señal de voz, esto implica que el predictor
deberá ser reajustado en intervalos cortos durante las transiciones y a intervalos largos duranteun
estado estacionario de la señal de voz, y consecuentemente, un gran buffer de almacenamiento es
necesario para asegurar la transmisión de parametros a una velocidad uniforme por elc a n a l .
En orden para evitar elusode un granbufferdealmacenamiento,los
parmetros del
predictor fberón reajustados a unintervalodetiempo fijo. Este intervalo de tiempo fué escogido
para que sea de 5 milisegundos para asegurar que la predicción sea eficiente regularmente durante
cambios rapidos en los segmentos de la onda de la voz.
Para sonidosquenoseande
voz, la exitación Un cuasiperiodica en la ecuación (8), es
reemplazadapor
un tipo deruidocomo
exitación. Generalmentehablando de la función de
transferencia del filtro para señales que no sean de voz debe incluir tanto
a los polos como a los
ceros. Como siempre, encontramos que para todo propósito práctico es suficiente con solo incluir
el efecto de los polos. La ecuación (1 1) que representa el predictor lineal para sonidos que no sean
para voz tambien si se tomaa beta como cero.
11.4.2 DETERMINACI~N
DE LOS PARAMETROSDEL PREDICTOR
Los parametros del predictor están determinados para minimizar el error cuadrático medio
entre las muestras actuales de voz y las muestras de valores predichos.
El valor predicho Sn de la enésima muestrade voz esta dado por:
la predicción del error esta dado por:
el error cuadrático medio de la predicción [ En 21 av esta dado por :
[En'] a v = 1/N ZEn'
(14)
Donde la sumatoria se extiende sobre todas las muestras en un intervalo de tiempo durante el cual
el predictor es o sea óptimo. El problema de minimizar el [ En2]av por una selección aceptable de
los parametros del predictor no admite una solución directadebido a la presencia del parámetro M
en la ecuación (13).
Una solución sub-optima fue obtenida al minimizar el error total en 2 pasos. Primero los
parametros p y M son determinados tales que el error El esta definido por:
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
7
SISTEMA DE CODIFICACI~N
PREDICTIVO
esto es mínimo. Usando estos valores de p y M,el error cuadrático medio [ En2]av es minimizado
si se escogen correctamente los parametros alfa.Para encontrar los valores de los parametros p y
M los cuales minimizanelerror El definido en la ecuación (15) debemosprimeroobtener la
derivada parcial de E1 con respecto a p e igualando a cero.
Donde [ 3 av indica el promedio sobre todas las muestras en un segmento dado de 5 milisegundos
durante el cual el predictor será óptimo. Resolviendo la ecuación (16) para p,obtenemos
p = [S, sn-M]av/ [S', (17)
- M lav
Lo siguiente será sustituir el valorde beta de la ecuación (17) anterior en la ecuación (15) después
de rearreglar los terminos obtenemos:
Debido a que el primer término del lado derecho de la ecuación (1 8)no depende de M,éste puede
ser omitidocon el fin de encontrarelvalor mínimo del error. Asi El es mínimo si el segundo
término delladoderechode
la ecuación (18) es máximo. El valor óptimode M es entonces
determinado por el valor máximo del
coeficiente normalizado p dado por:
Después los parametros del predictor a 1 ,...,up , son obtenidos tal que el error cuadrático medio
[En ']av está dadoen la ecuación (14) con p y M fijos en losvaloresoptimos para que sea
mínimo.Dejando
'
El error [En 3' av es entonces dado por:
Los valores optimos para los coeficientes al ,. ..,ap los cuales minimizan [En ']av son obtenidos
en base de la derivada parcial de [En ']av con respectoa al,...,ap y la igualamos a cero
6[En2]av /6aj =[{vn- Cakvnx}vn.i]av
j= 1 ,2 ,..., p
= O
(22)
La ecuación (22) puede ser reescrita en notación matricial en forma :
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
8
SISTEMA DE CODIFICACI~NPREDICTIVO
4a=v
donde 4 es una matriz de p x p con sus terminos(ij) dados por:
aij = [ vn-i Vn-j ]av
(24)
el cual es un vector p-dimensional cuyas componentes j's son a'i y \v es un vector p dimensional
cuya componente v i esta dado por :
yli = [ Vn vn-j ]av
(25)
Los coeficientes optimos del predictor se obtienen resolviendo la ecuación 23 para a, para algunos
casos cuando los valores de 4 son de una matriznosingular
la ecuaciónnopresentamayor
dificultad. El vector a puede obtenerse multiplicandoy por el inverso de la matriz 4.
11.4.3 SIMULACIóN DEL SISTEMAEN UNA COMPUTADORA
Un sistema de codificaciónpredictivafuesimulada
en una computadora digital para
determinar la efectividad para codificar señales de voz. El transmisor y el receptor son mostrados
separadamente en las figuras4 y 5 respectivamente. La velocidaddemuestreousadaenesta
simulación fue de 6.67kHz. Antes de ser muestreada, la señal de entrada fue filtrada con un filtro
pasa bajas con 3dB de atenuación a 3. l k h z y con una atenuación de 40dB o más a frecuencias
arriba de 3.33kI-h.
-
MUESTREAEOR
6.67KHZ
Sn
dn
Cuantizacion
2 NIVELES
k
Multiplexor
I
BUFFER
Decodifica
PREDICTOR
dor
PREDICTOR
mmvo
.............................
m
.............................................
parámetros del predictor
fig 4 - Transmisor del Sistema de codificaci6n Predictiva
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
9
SISTEMA DE CODIFICACI~N
PREDICTIVO
En el transmisor, la diferencia S,, formada por la resta del valor predicho 3, de la muestra
de voz S,, fue cuantizada por un cuantizador de un bit a dos niveles con un paso variable q. El
parámetro q fue reajustado cada 5 milisegundos para hacer mínimo el ruido de cuantización. Los
parametros del predictoradaptivofuerontambién computados cada 5 milisegundos y enviados
también al receptor con una diferencia binaria y el paso q delcuantizador. El valor óptimo del
parámetro de retardo M se obtuvo localizandoel máximo de el oeficiente de correlación p definido
en la ecuación 19 para valores de M entre 20 y 150. El p h e t r o p h e marcado como 8 .
Canal
r 'n
Digital
Demultiplexor
I
I
Filtro P.B
3.1
T'(t)
'=IDA
~
Khz
SefM Voz
Adaptivo
____._...___________________________.._._____________________.
Parámetros Del
fig 5. - Receptor del Sistema De Codificación Predictiva
La señal de vozfuereconstruida en elreceptorporretroalimentaciónconteniendo
un predictor
adaptivoidéntido al utilizadoen transmisor. Aquítambiénlosparámetrosdelpredictorfuerón
reasignados cada 5 milisegundos,deacuerdo
a la informaciónrecibidadeltransmisor.
Las
muestras de voz reconstruidas heron finalmente pasadas por un fíltro pasa-bajas a 3. l k H z para
formar la señal de salida Y '(d.
UNIVERSIDAD AUTdNOMA METROPOLITANA
IZTAPALAPA
10
SISTEMA DE CODIEICACI6N PREDICTIVO
111. DESARROLLO
111.1 MUESTREO Y FILTRADO DE L A SEÑAL DE ENTRADA
a) MUESTREO
La primer parte del sistema de codificación predictivo, considera que una señal analógica
ya que
el
actual
trabajose
realizo
integramente
en una
será muestreada,
sin
embargo,
computadora, no fue necesaria esta etapa pues la señal de entrada se generó de manera digital.
Esta señal fue generadade manera aleatoria, siendo necesario porlo tanto filtrarla a una frecuencia
de 3.1kHz antes de procesarla, estoesnecesarioparaobtener
una seiialdentrodelrangode
frecuencia de la voz.
b) FILTRADO
El filtrado de la señal se realizó conun filtro pasa-bajas de respuesta al impulso finita FIR.
Las consideraciones para el filtro de entrada se especifican al continuación.
Primero, se utilizo el métodode Fourier para el cálculo de los coeficientes del filtro PB,
asumiendo por lo tanto quela magnitud es constante (M = K) la fase es lineal (P = -10) en la banda
de paso. Sin embargo, ya que la característica de fase lineal es debida a un retardo de 1 muestras
en la respuesta en tiempo del filtro, no tomaremos en cuenta esta característica y asumiremos que
el retardo es cero (1 = O).
Ahora bien si tenemos la respuesta en frecuencia:
H(de)
eime= C h(m)
(3.1)
y queremos determinar la respuesta impulsiva h(n) encontramos que los coeficientes de Fourier son
iguales a los valores de la respuesta impulsivay están dados por:
2rr
h(n) = 1/2zj H(eJ
O
9 e'" ' d e
o en forma más general por:
2rr +eo
h(n) = 1/2ajH(eJ e J n' d e
eo
9
en otras palabras podemos empezar en cualquier 80 e integrar hasta 8 = 21c + 00 y el área para este
periodo será cero excepto cuandon = m.
como:
De la ecuación 3.3 encontramos la expresión para los coeficientes de un filtro pasa bajas
UNIVERSIDAD AUT6NOMA METROPOLITANA
IZTAPALAPA
11
SISTEMA DE CODIFICACI~N
PREDICTIVO
El valor de w, se obtuvo mediante la siguiente fórmula
w = 27c( f, / f, )
donde f es la frecuencia de muestreo y f, es la frecuencia de corte del filtro.
111.2 DETERMINACIóN DE LOS PARAMETROS DEL PREDICTOR
a) PARAMETROS
pY M
Los parámetros p y M secalcularonutilizandolosmétodosdadospor
manera que para obtenerM localizó el punto en donde la relación
la teoría de tal
M > O,
fuera máxima, los valores de M se limitaron a un rango de [ 20, 150 1.
Por otra parte, el parámetro p se calculó resolviendo la ecuación:
p = [S, s,.MI~v
/
[S2n"
lav
Como se puede observar, el cálculo de estos parámetros no fue complicado, sin embargola
gran cantidadde multiplicaciones que el parámetro M implica hace de esta parte un proceso muy
tardado, quenos
deja hera de la posibilidadde
recalcular todoslosparámetros
cada 5
milisegundos.
b) PARAMETROS ALFA
El cálculo de los parametros a para el predictor implica una inversión de matriz, como se
puede observar en la ec. (23)
Cuando 4 no es una matriz singular la solución de la ecuación no representa dificultad. El
vector a puede serobtenidomultiplicando yt por la inversa de la matriz 4. Un procedimiento
cornputacional más eficiente para resolver la ecuación, el cual no involucra una inversiónde
matriz, toma ventaja del hecho de que la matriz 4 es una matriz simétrica, y puede ser expresada
como el producto de una matriz triangular y su transpuesta. La ecuación se puede escribir como
UNIVERSIDAD AUTÓNOMA METROPOLITANA
IZTAPALAPA
SISTE~MA
DE CODIFICACI~N
PREDICTIVO
tres ecuaciones de matriz separadas, las cuales involucran matrices triangulares solamente y sus
soluciones pueden ser expresadas como ecuaciones recursivas.
El procedimiento recursivo que se utilizó fue la recursión de Robinson, dentro de la cual se
evalua una secuencia de correlación en base a l a s ecuanciones 3.5, 3.6, y 3.7 sedeterminanlos
parametros del filtro predictivo.
N-1-k
r (k) = C x(n) x(n
n=O
+ k)
para k = 0 , l ,...,N
(3.5)
donde r(k) son los coeficientes de correlación.
a m+l,i
- &= km+l
bA para i = 1,2,....,m
Y
En escencia la soluciónesunainversión
de matríz indirectacuyoselementosson
los
coeficientes (Cik), cuyodeterminanteeselproducto PoP i Pz...~M-I.Teóricamente los coeficientes
{ P k } son no negativos y de hecho en este caso son positivos.
Los programasgeneradospara la inversiónde matríz y para la solución recursiva, son
mostrados en la sección de programas.
AUTóNOMA UNIVERSIDAD
IZTAPALAPA
METROPOLITANA
13
SISTEMA DE CODIFICACI~N
PREDICTIVO
IV.SECCI6N DE PROGRAMAS
Programa 1.
Este es el primer programa que se intento, una característica de este es que utiliza una
inversibn de matriz para resolver la ecuacibn de lacual se obtienen los coeficientes alfa del filtro
predictivo. En este programa solo se obtienen los valores para los coeficientes
y son impresos en
pantalla.
#include <stdio. h>
#include <CONO. h>
#include <stdlib.h>
#include <math. h>
#include <graphics.h>
#include <*e.
h>
#define NMAX 200
#define NMAXX 400
#define
P
8
typedef doublematP][p];
typedef double aumatlp][2*P];
.............................................................................
/******************************************k********************************l
void Gauss (floatS[], unsigned sem, int nmax);
void Reporte(float g[], float u[], float
e[],int nmax);
void PideSem(unsigned *sem);
void Calc-M(float S[], int *M);
void Calc-B(float S[], int M, double *B);
void Invierte-mat(mat Y,int tamdet);
void Inicializa-mat(aumat Yaum,int p);
void Sustituye(inti, int j, aumat Yaum, int tamdet);
void Imprime-mat(mat Y, aumat Yaum,int tamdet);
void Continua(char *Tec);
void main()
i
unsigned sem;
float s[NMAxxl,v[NMAXl;
double aux,aux2,B,c;
double Fi[P]p],Psi[P];
aumat Yaum;
int M,ij,n,m,k,h;
char Tec;
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
14
SISTEMA DE CODWICACI~N
PREDICTWO
do{
PideSem(&sem);
Gauss(s, sem, NMAX);
/*Genera una secuencia aleatoria*/
for(i=NMAX;i < 2*NMAX;i++)
s[i]=s[i-NMAx];
/*Repite la informacion en s[n]*/
Calc-M(s,&M);
Calc-B(s,M,&B);
for(n=NMAX;n<NMAXX;n++){
v[n-NMAX]=s[n]-(B*s[n-MI);
v[n]=v[n-NMAX];
I
for(i=O;i<P;i++){
for(j=O$Pj++){
for(n=NMAX;n<NMAXX;n++){
aux=v[n-i] *v[n-j];
aux2=v[n]*v[n-j];
1
Psilj]=aux2/NMAX;
Fi [i] lj]=aux/NMAX;
1
1
Inicializa-mat(Yaum,P);
for(i=O;i<P;i++){
/*Prepara
for(j=O$P;j++)
Yaum[i]u]=Fi[i]lj];
for(k=P;k<2*P;k++) /*la parte aumentada
if (k-i==p)
Yaum[i][k]=l;
else
Yaum[i][k]=O;
la matriz aumentada*/
de la ma*/
1
j=O;
for(i=O;i<P;i++){
if(Yaum[i][i]==O){
gotoxy(25,23);
printf("Existe una singularidaden el renglon o/od",i+l);
exit( 1);
1
for(h=i+l;h<P;h++){
/*Proceso de Elimination*/
c=Yaum[h]~]/Yaum[i][i];
for (k=j;k<2*P;k++)
Yaum[h][k]=Yaum[h]&] - c*Yaum[i]&];
1
j++;
1
Sustituye(O,O,Yaum,P);
Imprime-mat(Fi,Yaum,P);
Continua(&Tec);
~~
~~~
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
15
SISTEMA DECODIFICACI6N PREDICTIVO
}while(Tec!='N');
void Gauss (floatS[], unsigned sem,int nmax)
{ float *pos, v;
register int n, i;
void PideSem(unsigned *sem)
{
clrscr();
printf("Semil1a para secuencia gaussiana:");
scanf('?4oint'*,sem);
1
void Calc-M(float
S[],
int *M)
{
int n,m;
double r,avn,avm,avnm,raux;
double aux,auxl,aux2,mxn;
aux=O;
r=O;
for(n=O;n<NMAX;n++)
/*Calcula
promedio
de
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
las sn's*l
16
SISTEMA DE CODIFICACIbN PREDICTIVO
void Sustituye(inti, int j, aumat Yaum, int tamdet)
{
int h,k;
double c,d;
if (i!=tamdet){
c=Yaum[i]u];
Sustituye(i+lj+l,Yaum,tamdet);
for(k=j; k<2*tamdet; k++)
Yaum[i][k]=Yaum[i]@]lc;
for(h=i-1; h>=O; h--){
d=Yaum[h]u];
for(k=j;k<2*tamdet;k++)
Yaum[h]@]=Yaum[h][k]d*Yaum[i]&];
1
void Imprime-mat(mat Y, aumatYaumjnt tamdet)
{
int i,j,k;
double c;
gotoxy(0,~O~;
for(i=O;i<tamdet;i++){
forQ=O$tamdetj++){
c=Y[i]lj];
gotoxy(l0+5*j,lO+i);
printf("%.lf',c);
1
for(k=tamdet;k<2*tamdet;k++){
c=Yaum[i]m];
gotoxy(30+6*k, lO+i);
printf("%. lf',c);
1
1
1
UNIVERSIDAD AUT~NOMAMETROPOLITANA
ETAPALAPA
19
.
"
SISTEMA DECODIFICACI6N PREDICTIVO
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar? (SIN): ");
scanf("%c",Tec);
*Tec=toupper(*Tec);
}while (*Tec!='N' && *Tec!='S');
1
METROPOLITANA
UNIVERSIDAD AUTdNOMA
IZTAPALAPA
20
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 2
En este programa, se hace el cálculo de los coeficientestambién invirtiendo la matriz, y
además se calcula ladiferencia entre la señal actual y la señal estimada.
int sini,sfin,rangs,yini,yfín,rangyn;
int maxx, maxy, rang, rangy, mrgizq, mrg~nf;
px,
int
py I*, color*/;
divejehor;
l*int
if ( !Inicgraf() )
exit (1);
I* Variablesp/grafícar */
I* Determinacion
pantalla
punto
en
del
*I
I*poner
Donde eje el horizontal */*I
I* Inicia graficos *I
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
21
SISTEMA DECODIFICACI6N PREDICTIVO
color = getmaxcolor();
maxx = getmaxxo;
Illilxy = getmaxyo;
mrgizq = maxdl0;
mrginf = 9*maxy/l0;
rangx = 8*maxx/l0;
rangy = 8*maxy/lO;
do{
parametros
/*pantalla
Lee
de
PideSem(&sem);
Gauss(s, sem, N M A X ) ;
*/
/*Genera una secuencia aleatoria*/
sini=8907;
sfin=O.O;
for(i=NMAX;i < 2*NMAX;i++){
/*Repite
la
informacion
en
s[n]*/
s[i]=s[i-NMAx];
if(sini>s[i])
sini=s[i];
else
if(sfin<s[i])
sfin=s[i];
I
/*fiCar*/
/*Calcula el rango de S para gra*/
rangs=sfin-sini;
Calc-M(s,&M);
Calc-B(s,M,&B);
/*Hace el calculode M*/
/*Hace el calculo deB*/
for(n=NMAX;n<NMAXX;n++){
v[n-NMAX]=s[n]-(B*s[n-MI);
v[n]=v[n-NMAX];
/*Prepara
vector
el de
VIS*/
I
aux=O.O;
aux2=0.0;
for(i=O;i<P;i++){
foru=Oj<Pj++){
for(n=NMAX;n<NMAXX;n++)
aux+=v[n-i]*v[n-j];
Fi [i] =aux/NMAX;
1
>
/*Prepara la matriz Fi*/
u]
foru=Oj<Pj++){
vector el /*Prepara
for(n=NMAX,n<NMAXX;n++)
aux2+=v[n]*v[n-j];
Psi~]=aux2INMAx;
Psi*/
I
Invierte-mat(Fi,P,Inv);
for(j=Oj<Pj++)
vector el
/*Calcula
UNIVERSIDAD AUT6NOMA METROPOLITANA
IZTAPALAPA
de Alf's*/
22
SISTEMA DE CODIFICACION PREDICTIVO
Alflj]=O.O;
for(i=O;i<P;i++){
for(j=O;j<P;j++)
Alfli]+=Inv[i]u]*Psiu];
printf("\nAlf[O/od]=O/o.2f',i+l,Alfli]);
1
Tec=getch();
yini=3213;
yfh=O.O;
for(n=O;n<NMAX;n++){
snk=O.o;
for(k=O;k<P;k++)
snk+=m]*(s[n-k] - B*s[n-k-M]);
y[n]=B*s[n-M]+snk;
rangyn-n-yini;
cleardevice();
moveto(mrgizq,mrginf);
setcolor( 14);
setlinestyle(S0LID-LINE,1,l);
for(n=O;n<NMAX;n++)(
1
px= mrgizq + (float)n*rangx/NMAX;
py' mrginf - (y[n]-yini)*rangy/rangyn;
lineto@x,py);
sound(44+n);
delay(5O);
nosound();
moveto(mrgizq,mrginf);
setcolor( 13);
setlinestyle(D0TTED-LINE,1,l);
for(n=O;n<NMAX;n++){
px=mrgizq + (float)n*rangx/NMAX;
py = mrginf - (s[n]-sini)*rangy/rangs;
lineto(px,py);
sound(78+2*n);
delay(50);
nosound();
1
Continua(&Tec);
}while(Tec!='N');
UNIVERSIDADAUT~NOMAMETROPOLITANA
IZTAPALAPA
23
SISTEMA DECODIFICACIdN PREDICTIVO
void Gauss (floatS[ 1, unsigned sem, intnmax)
{ float *pos, v;
register intn, i;
void PideSem(unsigned *sem)
{
clrscr();
cleardevice();
printf("Semi1la para secuencia gaussiana:");
scanf("O/int",sem);
1
void Calc-M(float
{
S[
1, int *M)
int n,m;
double r,avn,avm,avnm,raux;
double aux,auxl,aux2,mxn;
aux=O;
r=O;
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
24
-... '...""."
.-
SISTEMA DE CODIFICACI~N
PREDICTIVO
for(n=O;n<NMAX;n++)
aux+=s[n]*s[n];
avn=aux/NMAX;
/*Calcula promedio de las sn's*/
for(m=66 ;m < NMAx;m++){
aux2=0;
aux1=O;
for(n=NMAX; n< NMAXX;n++){
aux2+=1.0*s[n-m]*s[n-m];
auxl+=l.O*s[n]*s[n-m];
/*Calcula la correlacion*/
I
avm= 1 .O * aux2/NMAX;
avnm=l.O * auxl/NMAX;
mxn= 1.O * avm * avn;
raux=l.O * a d sqrt(mxn);
if(raux > r ){
*M=m;
Fraux;
I
I
/*y escoje el valor optimo
para M*/
/*Calcula promedio de s[n-m] */
/*Calcula promedio de s[n]*s[n-m]*/
/*Si el valor dela correlacion re*/
/*ciente esmayor que el pasado se*/
/*actualizan r y M*/
clrscr();
cleardevice();
printf("M=%d\nr=%f'/of,*M,r);
void Calc-B(float
S[
1, int M, double *B)
{
double aux,auxl,avnm,avm;
int n;
aux=O;
auxl=O;
for(n=NMAX;n<NMAXX;n++){
aux+=s[n]*s[n-M];
auxl+=s[n-M]*s[n-M];
I
I
avnm=l.O * awr/NMAx;
avm=l.O * auxl/NMAX;
*B= l.O * avnmlavm;
printf("bB=%.2f',*B);
UNIVERSIDAD AUT~NOMAMETROFQLITANA
IZTAPALAPA
/*Calcula los promedios*/
/*Determina la B a utilizar*/
25
SISTEMA DE CODIFICACIbN PREDICTIVO
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar?(S/N):
scanf("o/oc",Tec);
*Tec=toupper(*Tec);
}while (*Tec!='N'&& *Tec!='S');
1
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
26
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 3:
.............................................................................
/*
/*
/*
SIMULADORDE SISTEMA DE CODIFICACIONPREDICTIVOUTILIZANDO
INVERSION DE MATRIZ
.............................................................................
char Tec;
float s[S*MAX];
float b m A X ] ;
int M=l;
float B=l;
float A m ] ;
double sn,dn;
*I
*/
*/
/* Send que sera transmitida */
/* Buffer para el transmisor */
/* Parametrosdelpredictor */
/* Vector de parametros Alfa */
/* Estimaciftnde S y error */
int i,k;
int n;
int apx,apx1 ;
double aux;
/* Apuntador a la serial
/* Apuntador auxiliar
*/
*/
for (i=O;i < 5; i++){
for (n=O;n < MAX; n++){
~~~
UNIVERSIDAD AUTÓNOMA METROPOLITANA
IZTAPALAPA
27
SISTEMA DE CODIFICACI~N
PREDICTIVO
b m n ] = s[i*MAX+n];
I* Lee la muestra
actual
I* en el buffer *I
y la pone *I
if (i*MAX !=O && n =O)(
Calc-M(buff,&M,MAX);
printf("W?i = %i'',i+l,M);
Calc-B(buff,M,~,MAX);
printf("\nB%i = %.2f\n",i+l,B);
I* Cada 5 milisegundos hace el cal *I
I* culo
de
los
parametros
del
pre*I
I* dictor*l
Calc-Alf(bUff,M,B,Alf,MAx);
for (k=O; k < P; k++)
printf("%.2f,
1
'I,
m]);
aux = O;
I* Inicializa
auxiliar
variable
*I
for o< = O; k < P; k++)(
apx = ( n-k < O)?n-k+200:n-k;
I* Si el apuntador
es
nega
*/
apxl = (n-k-M < O)?n-k-M+200: n-k-M; I* tivo, lo ajusta *I
I* al rango previsto *I
aux+= ALfF] * ( bmapx] - B * baapxl]);
I
apx = (n-M < O)? n-M+200: n-M;
sn = B * b a a p x ] + aux;
I
I
dn = s[i
* MAX + n] - sn;
o
I* Hace la estimaci6n de la w a l *I
I* Calcula el error*I
Continua(&Tec);
}while (Tec != 'N');
void Inicializa(floatd[], int nmax)
{
int i;
1
for (i=O;i < nmax; i++)
d[i] = O;
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
28
SISTEMA DE CODIFICACI6N PREDICTIVO
void Calc-M(float d[], int *M, int nmax)
{
n,m,apx; int
double aux,Ro;
avn,avnm,avm;
double
arreglos I* Apuntadores
a
*I
I* variables para promedios*/
I* Inicializa variables *I
avn = O ;
awn = O;
avnm = O;
apx = O ;
Ro = O;
aux = O ;
for (m=l; mnmax;m++){
avn = O;
avnm = O ;
awn = O;
for (n=O; n < nmax; n++){
avn+= 1.0 * d[n]*d[n]/nmax;
apx = (n-m < O)? n-m+nmax: n-m;
avm+=
d[apx]*
d[apx]/nmax;
avnm+=
d[n]
_
_
_
_
_
~
~
~
* d[apx]/nmax;
I* Calcula
elvalor cuadr tico *I
I* medio de la serial */
/* Calcula
el
valor
cuadr tico *I
I* medio de la seual retardada */
I* Calcula la correlaci6n
entre*/
~
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
29
SISTEMA DE CODIFICACI~N
PREDICTIVO
/* la swal y la retardada
*/
1
if (avn * avm !=O)
aux = 1.0 * avnm / ( avn * awn);
if ( aux > Ro){
Ro = aux;
*M = m;
/* Compara con el anterior*/
mayor
es
actualiza
si
/* y
su */
/* valor*/
1
1
1
void Calc-B(float d[], int M, float *B, int nmax)
int n,apx;
double avnnm=O,avnm=O;
for (n=O; n < nmax; n++){
/* Hace el calculo de promedios */
apx = (n-M < O)? n-M+nmax : n-M;
avnnm+= 1.0 * d[n] * d[apx]/nmax;
avnm+= 1.0 * d[apx] * d[apx]/nmax;
1
void Calc-A@(float d[], intM, float B,float W],int nmax)
n,
{
int i, j;
double vFIAX];
int apx,apx1 ;
double
Fi[P][P],
Psi[P],
Inv[P]Ip];
double aux=O;
for (n=O;
n
< nmax; n++){
apx = (n-M < O)? n-M+nmax: n-M;
v[n] = d[n] - B * d[apx];
arreglos
/*
losApuntadores
a
*/
/* Matriz y vectores
para
operar*/
/* Construyevector
elde
m's*/
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
30
"________
-~
~~
SISTEMA DE CODIFICACI~N
PREDICTIVO
for ( i=O; i < P; i++)
for Q=O; j < P; j++){
for (n = O; n < nmax; n++){
apx = (n-i < O)? n-i+nmax: n-i;
apxl = (n-j < O)? n-j+nmax: n-j;
aux += v[apx] * ~ [ a p x l ] ;
/* Construye la matriz Fi *I
1
1
Fi[i]u] = 1.0 * auxlnmax;
for (i=O;j < P; j++){
for(n=O; n< nmax; n++){
apx = (n-j < O)? n-j+200: n-j;
aux+= v[n] * v[apx];
I* Construye el vectorPsi *I
1
1
Psiu] = auxlnmax;
Invierte-mat(Fi,P,Inv);
/* Se realiza la inversih de la matriz*/
/*Calcula el vector de
Alfs*/
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar? (S/N): 'I);
scanf("%c",Tec);
*Tec=toupper(*Tec);
}while (*Tec!='N' && *Tec!='S');
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
31
SISTEMA DE CODIFICACIbN PREDICTIVO
Programa 4:
#define P 8
typedef double *mat;
typedef double *aumat;
void Invierte-mat (double Y[]Ip],int tamdet,double Inv[][PI)
{
double Yaum[P]Ip*2];
double c;
int i j,k, h;
Inicializa-mat(Yaum,tamdet);
la matriz aumentada*/
for(i=O;i<tamdet;i++){
/*Prepara
for(j=O$tamdetj++)
Yaum[i]~]=Y[i]~];
/*la
parte
aumentada
de
for(k=tamdet;k<2*tamdet;k++)
1
la ma*/
if (k-i==tamdet)
Yaum[i][k]=l;
else
Yaum[i]@]=O;
j=O;
for(i=O;i<tamdet;i++){
if(Yaum[i][i]==O){
gotoxy(25,23);
printf(”ExisteUM singularidad en el renglon%d”,i+l);
exit( 1);
}
for(h=i+l;h<tamdet;h++){
de
/*Proceso
c=Yaum[h]~]Naum[i][i];
for (k=j;k<2*tamdet;k++)
Yaum[h]@]=Yaum[h][k] c*Yaum[i][k];
Elimination*/
-
1
j++;
1
1
Sustituye(O,O,Yaum,tamdet);
Reemplaza(Yaum,tamdet,Inv);
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
32
~~
SISTEMA DE CODIFICACI~N
PREDICTIVO
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
33
SISTEMA DE CODIFICACIbN PREDICTIVO
Programa 5:
#include <math.h>;
#include <conio. h>;
#include <stdlib.h>;
#include <stdio.h>;
#include <ctype.h>;
#define P 3
typedef doublematp][P];
typedef double aumat[P] [2*P];
typedef doublepilap] ;
/**************f**************************************k*********************/
void Inicializa-mat(mat Y,aumatYaumjnt p);
void Pide-matriz(mat Y,int *tamdet);
void Sustituye(inti, intj, aumat Y, int tamdet);
void Imprime-mat(mat Y, aumat Yawn,int tamdet);
void Continua(char *Tec);
void main()
c
mat Y;
aumat Yawn;
double c;
int tamdet,ij,k,h;
char Tec;
Inicializa-mat(Y,Yaum,P);
Pide-matriz(Y, &tamdet);
for(i=O;i<tamdet;i++){
for(i=O;j<tamdetj++)
Yaum[i]~]=Y[i]~];
for(k=tamdet;k < 2*tamdet;k++)
if (k-i==tamdet)
Yaum[i] [k]=l;
else
Yaum[i]@]=O;
/*Prepara la matriz aumentada*/
/*parte aumentada dela matriz*/
1
j=O;
for(i=O;i<tamdet;i++){
if(Yawn[i][il==O){
gotoxy(25,23);
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
34
SISTEMA DECODIFICACI6N PREDICTIVO
I
printf("Existe una singularidad en el renglon %d",i+l);
Tec=getchar();
exit( 1);
for(h=i+l;h<tamdet;h++){
I
/*Proceso de Eliminacig!n*l
c=Yaum[h]~]Naum[i][i];
for (k=j;k<2*tamdet;k++)
Yaum[h]&]=Yaum[h][k] c*Yaum[i][k];
-
j++;
1
Sustituye(O,O,Yaum,tamdet);
Imprime-mat(Y,Yaum,tamdet);
Continua(&Tcc);
void Inicializa-mat(mat Y,aumatYawn, int p)
{
int iJ,k;
for(i=O;i<p;i++){
forQ=Oj<p;j++)
Y[i]u]=O;
for(k=O;k<2*p;k++)
Yaum[i]&]=O;
I
I
void Pide-matriz(mat Y,int *tamdet)
{
int i j ;
float c;
clrscr();
gotoxy(253;
printf("INVERS0R DE MATRICES N x N");
UNIVERSIDADAUT~NOMAMETROPOLITANA
ETAPALAPA
35
SISTEMA DE CODIFICACI~NPREDICTIVO
gotOxy(30,10);
printf("lal1 a12 .. alnl");
gotOxy(30,11);
printf ( " l a 2 1 a22 .. a2nl");
gotoxy(30,12);
. I");
printf("1 . .
gotoxy (30,13);
printf("1 . . . I " ) ;
gotoxy (30,14);
printf ("Ian1 an2.. ann/");
gotoxy(30,17);
printf("Valor de N: ");
scanf(ll%d'l,tamdet);
void Sustituye(inti, int j, aumat Yaum, int tamdet)
int h,k;
double c,d;
if (i!=tamdet){
c=Yaum[i] 1;
Sustituye(i+ j+
1 1,Yaum,tamdet);
for(k=j; k<2*tamdet; k++)
Yaum[i] [k]=Yaum[i]
Fllc;
for(h=i-1; h>=O; h--){
d=Yaum[h] u];
for(k=j;k<2*tamdet;k++)
Yaum[h][k]=Yaum[h]F]d*Yaum[i]F];
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
36
SISTEMA DECODIFICACIbN PREDICTIVO
/..................
. .
. . . . . . . . . . . . . . . .
.
. . . . . " . . . .
void Imprime-mat(mat Y, aumat Yaum,int tamdet)
{
int iJ,k;
double c;
clrscr();
gOtOT(25,5);
printf("MATRIZ INVERTIDA");
gotoxy(0,lO);
for(i=O;i<tamdet;i++){
for(j=O$tamdet;j++){
c=Y[i] ;
gotoxy(l0+5*j,lO+i);
printf("%. 1f",c);
u]
1
for(k=tamdet;k<2*tamdet;k++){
c=Yaum[i][k];
gotoxy(30+6*k,lO+i);
print€("%.lf',c);
1
1
1
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar? (SIN): ");
scanf("%cc",Tec);
*Tec=toupper(*Tec);
}while (*Tec!='N' && *Tec!='S');
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
37
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 6:
char Tec;
double S[ 5 *MAXI ;
double b a r n ;
double y[S*MAX];
double hp];
int M=20;
float B= 1 ;
double AlfTP+11;
double s n , d n , e r r W ] ;
double snest[MAX];
double fftsreal[MAXI;
double f f t s i m a g m 1:
double fftsnrealFW(1;
double f f t s n i m a g m I :
int i,k;
int n;
int apx,apxl;
double aux;
int div,
UNIVERSIDAD AUTdNOMA METROPOLITANA
IZTAPALAPA
/* S& que ser transmitida */
/* Buffer para el transmisor */
/* Salida del Fitro PB*/
/* Coeficientes delFiltro PB*/
/* Periodo de retardo de voz */
/* Coeficiente deamplitud */
/* Vector de parametros Alfa */
/* Estimacien de S y error */
/* Arreglo para graficar FFT */
/* Arreglos para la FIT */
/* Apuntador
a la serial
/* Apuntador auxiliar
*I
*/
38
~
SISTEMA DE CODIFICACI~N
PREDICTIVO
/* M xima potenciade 2
*I
/* N&mero de elementos truncado*/
/*S&
estimada en el receptor*/
/*Seual de error en el receptor*/
/* Variables paragraficar */
buEer[80];
char
texto
para /* Buffer
*/
if (!Inicgraf())
exit( 1);
Inicializa(buf€,MAX);
Inicializa(s,MAX);
Inicializa(smest,MAX);
Inicializa(Alf,P):
Inicializa(h,P);
Inicializa(y,S*MAX);
/* Inicializacitn de arreglos */
Ruido(s,S*MAX);
/* Se creauna senal deatoria */
filtra(s,5 * MAX,y,h);
for (i=O;i< 5; it+){
getch0;
clrscr();
cleardevice();
for (n=O;n < MAX; ni-+){
b a n ] = y[i*MAX+n];
if(i*MAX!=O&&n=O){
Calc-M(buE,&M,MAX);
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
/* Lee la muestra actualy la pone */
/* en el buffer*I
/* Cada 5 milisegundos hace elcal */
/* culo
parametros
los
de del
pre- */
39
~
~~
SISTEMA DECODIFICACI6N PREDICTIVO
/* didor*/
princf("\nM%i = %ii",i+l,M);
Calc-B(buE,M,&B,MAX);
printf("\rB%i = %.2f\n",i+l,B);
Calc-Alf(buE,M,B,Alf,MAX);
for (k = 1 ; k <= P+1; k++)
printf("\n0/o.5f, 'I, m ] ) ;
1
aux = O;
auxiliar
/* variable
Inicializa
*/
for o( = O; k < P; k++){
/* Sielapuntador es nega */
apx = ( n-k < O)? n-k + 200 : n-k;
apxl = (n-k-M < O)? n- k M + 200 : n-k-M; /* tivo, lo ajusta */
/* al rango previsto*/
aux+= Alflk] * ( buffcapx] B * buffcapxl]);
-
-
1
apx = (n-M < O)? n-M+200: n-M;
sn = B * bufQapx] + aux;/* Hace la estimacien de la S&
*/
snest[n] = sn;
/* Pone el resultado en arreglo
el
dn = y[i * MAX + n] - m;/* Calcula el error */
err[n] = dn;
/*
*/
if(i != O){
auxr = O;
/* Inicializa
variable
auxiliar
*/
for (k = O; k < P; k++){
apxr = ( n-k < O)? n-k + 200 : n-k; /* Si el apuntadores nega */
apxlr = (n-k-M < O)? n- k - M + 200 : n-k-M; /* tivo, lo ajusta */
/* al rango previsto*/
auxr +=
* ( smest[apxr] B * smest[apxlr]);
1
-
dm = err[200 - n - 11;
sm = B * smest[apxr] + auxr;
srnestln] = sm + dm;
1
*I
. . . . . . . . . . 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
maxx = getmaxxo;
maxy = getmaxy()/2;
mgizq = maxx/lO;
rangy = 8*m;1~y/lO;
nu = O;
div = M A X ;
while(div > I ){
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAF'ALAPA
/* Inicializa la variable para potencia*/
/* Obtiene la potencia nu */
40
SISTEMA DE CODIFICACI~N
PREDICTIVO
div = div/2;
nu = nu++;
I
maxtrunc = pow(2,nu);
FFTRANS(buf€,maxtrunc,nu,f€tsreal,fftsimag); /*m
de senal */
FFTRANS(snest,maxtrunc,nu,Etsnreal,f€tsnimag);
./*Calcula la FFT de est*/
cleardevice();
Ejes(l,30,getmaxx()-30,1,0,1,4,getmaxy()/2-4,1,0,1,2);
Ejes( 1,30,getmaxx()-30,1,0,1,getmaxy()/2+2,ge~~-4,1,0,0,2);
antx = mrgizq;
anty = 9*maxy/l0;
for(ap = O; ap < MAX /*maxtrunc*/; a*){
magn = pow@ow(fftsreal[ap],2)+ pow(f€tsimag[ap],2),0.5);
px = mrgizq + 4*ap;
incy = (magn *5OOO/rangy > rangy)?rangy:magn*5OOO/rangy;
py = 9*maxy/10 - incy;
line(antx,anty,px,py);
antx = px;
anty = PY;
>
antx = mrgizq;
anty = 18*maxy/l0;
for(ap = O; ap < /*maxtrunc*/ MAX ; ap++){
magn = pow@ow(f€tsnreal[ap],2) + pow(f€lsnimag[ap],2),0.5);
px = mrgizq + 4*ap;
incy = (magn*5000/rangy > rangy)?rangy:magn*5OO/rangy;
py = 18*maxy/lO - incy;
line(antx,anty,px,py);
antx = px;
anty = PY;
I
1
Continua(&Tec):
closegraph();
}while (Tec != 'N');
~
~~
UNIVERSIDAD AUTóNOMA METROPOLITANA
41
IZTAPALAPA
L
...."."
SISTEMA DE CODIFICACI~N
PREDICTIVO
void Gauss (doubleS[], unsigned sem, intnmax)
{ double *pos, v;
register int n,i;
pos = S;
srand ( 15 );
for (n=O; n<nmax; n++)
*@os++) = 3.4641016 * rand() I RAND-MAX
- 1.7320508;
.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
for(ap = O; ap < nmax;ap++)
s[ap] = cos(ap * M-PI-4);
UNIVERSIDAD AWÓNOMA METROPOLITANA
IZTAPALAPA
42
S I S T E DE
~ CODIFICACI~N
PREDICTIVO
void Calc"(doub1e
d[], int *M, int nmax)
{
int n,m,apx;
double aux, Ro;
double avn,avnm,avm;
avn = O;
avm = O;
avnm = O;
apx = O;
Ro = O;
aux = O;
for (m = 20; m < nmax-50; m++){
avn = O;
avnm = O;
avm = O;
for(n = O; n nmax; n++){
avn+= 1.0 * d[n]*d[n]/nmax;
apx = (n-m < O)? n-m+nmax: n-m;
avm+= d[apx]* d[apx]/nmax;
avnm+= d[n] * d[apx]/nmax;
1
if(avn * avm !=O)
aux=l.O*avnm/(avn*avm);
if ( aux > ,Ro){
Ro = aux;
* M = m,
/* Apuntadores a arreglos*/
/* variables para promedios*/
/* Inicializa variables */
/* Calcula el valorcuadr tico */
/* medio de la mal */
/* Calcula el valorcuadr tic0 */
/* medio de la serial retardada */
/* Calcula la correlaci#n entre*/
/* la semi y la retardada */
/* Compara conel anterior*/
/* y si es mayor actualiza su */
/* valor*/
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
43
SISTEMA DE CODIFICACION PFtEDICTIVO
void Calc-B(doub1e d[], int M, float *B,int nmax)
{
int n,apx;
double avnnm=O,avnm=O;
for (n=O;n < nmax; n++){
I* Hace elcalculo de promedios */
apx = (n-M < O)'? n-M+nmax : n-M;
I
avnnm+= 1.0 * d[n] * d[apx]/nmax;
avnm+= 1.0 * d[apx] * d[apx]/nmax;
*B = 1.0 * a v n d a v n m ;
/* Pone en B la relaci#n entre */
/* promedios */
void Calc-Alf(doub1e d[]. int M, float B,doubleM , i n t nmax)
{
int n, i, j;
arregloslos I* Apuntadores
a
double v[MAX],R[P+lJ.RC[P],ALPHA,S,AT;
int np,Nl,MINC,IP,MH.IB;
int apx;
for (n=O; n < nmax; n++){
apx = (n-M < O)? n-M+nmax: n-M;
v[n] = d[n] - B * d[apx];
*/
I* Construye el vector de m's*/
/*Apunta dentro del arreglo*/
I
n p = P + 1;
for (i = 1; i <= np; i++){
R[i] = O;
fora = 1;j <= (nmax - i + 1);j++)
R[i] += vu] * vu + i -11;
I
RC[1] = - R[2] I R[1];
Alfil] = 1;
AN21 = RC[ 11;
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
44
SISTEMA DE CODIFICACI~N
PREDICTIVO
ALPHA = R[1] + R[2] * RC[1];
for(MINC = 2; MINC <= M; MINC++){
S = o;
for(IP = 1; IP <= MINC; IP++){
Nl=MINC-IP+2;
S += R[N1] * AlfcIP];
ESTE ES EL ERROR ACARREADO
EL ORDEN DEL FILTRO E S " P NO "M"
I
R C W N C ] = -S/ (ALPHA);
MH = MINU2 + 1 ;
for (IP = 2; IP <= M H ; IP++){
IB=MINC-TP+2;
AT = AlflIPI + R C F a J C ] * -1;
AlflIB] += RC[MINC] * AQIP];
AlQIP] = AT;
I
1
Alf[MZNC+l] = R C W C ] ;
ALPHA += RC(MINC] * S;
I
.............................................................................
void filtra(doub1e x[], int nmax,double y[], double h[])
{
int n,i,k;
h[P] = 0.07046;
for@
= O;
I
'
k < P; k++)(
h F ] = sin((k - P) * .O7046 * "PI)
printf("%.Sf\n",h[k]);
/* Se hace el c lculo de los coeP/
1("PI
* o< - P));
1 "PI
* (k - P));
printf("%.8f\n",hF]):
for(k = P+1; k < 2*P: k++){
hp] = sin((k - P) * ,07046 * "PI)
printf("%.8f\n".h[k]);
I
for(n = O; n < nmax; n++){
for& = O; k < 2*P; k++){
i = ((n k) < O)? (63 + n - k): (n - k);
y[nI += hF1 * xV1;
/*Se filtra la senal */
-
I
I
1
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
45
SISTEMA DE CODIFICACI~N
PREDICTIVO
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar?(SIN):
scanf("%c",Tec);
*Tec=toupper(*Tec):
Kc *Tec!='S');
}while (*Tec!='N' &
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
46
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 7 :
......................................................................................
......................................................................
/*
*/
/*
*/
PRUEBA DE OBTENCION DE COEFICIENTES
..............................................................................
..............................................................................
#include <conio. h>
#include <stdlib.h>
#include <math.h>
#include <stdio. h>
#include <ctype. h>
#define MAX 2 10
#define NMAX 2 1
void Auto(int N, doublc S[], int M,double AU, double *ALPHA, double RC[]);
void Gauss (floatS[], unsigned sem, intnmax);
void Continua(char*Tcc);
void main()
double x [ W ,
R C W I ;
int i j ,
M,
/* Aqui se guarda la mal */
/* Vector de coeficientes*/
/* Vector de coeficientes derefkc*/
/* Apuntadores a los vectores*/
/* Orden del filtro */
m,
/* Ngmero de puntos que se ocupan */
N;
double ALPHA;
char Tec;
do{
for(i = O; i < MAX; i++)
x[i] = O;
for(i = O; i < NMAX;i++){
A[i] = O;
RC[i] = O ;
1
x[l] = 1.0;
x[2] = 1.44;
~ [ 3 =] 1.44 * x121 - 1.26;
/* Inicializa los vectores*I
/* Aqui se inicirlliza la senall*/
forQ = 4; j <= 200; j++)
/* Aqui
se
xn] = 1.44 * ~ l j - 1 1- 1.26 * xU-21 + .81 * xlj-31;
N = 200;
clrscro;
filtra la send */
/* Escoje solo cuarenta puntos de*I
/* la seaal */
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
47
~~~~
~~
~~~
~
SISTEMA DE CODIFICACI~NPREDICTIVO
for (M= 7; M <= 8 ; M++){
"=M+
I;
AutoO\i,x,M,A,&ALPHA,RC);
/*Se
van a calcular los coefficientes*/
/ * p a r a M = 2 y M = 3 *I
I* Se
resuelve
sistema
el
*I
for(i = 1; i <= M P ; i++){
printf("\n A[O/oi] = %.2e",i, A[i]);
gotoxy(25,wherey());
printf("RC[%i] = %e",i,RC[i]);
I
1
printf("\n ALPHA = %e\nW,ALPHA);
for(i = 1; i <= 200; i++)(
j = 204 - i;
xu] = s[j - 31;
1
for (j= 1j <= 3; j++){
i = 203 + j;
xu] = o;
x[i] = O;
I
M = 3;
N = 206;
MP=M+l;
Auto(N,x,M,A.&&PHA,RC);
for(i = 1; i <= MP; i++){
printf("\n A['%,i]= %e",i, A[i]);
gotoxy(25,wherey());
printf("RC['%,il= %e",i,RC[i]);
1
printf("\n ALPHA = O/oe\n",ALPHA);
Continua(&Tcc):
}while (Tec != 'N);
1
UNIVERSIDAD AUTbNOMA METROPOLITANA
IZTAPALAPA
48
SISTEMA DE CODIFICACI~N
PREDICTIVO
MP=M+ 1;
for& = 1; k <= M P ; k++){
R F ] = O;
NK=N-ktl;
for (NP = 1: NP <= N K ; N€'++){
Nl=NF'+k-l;
R[k] += x[Np] * x[N1];
/* Solo calcula M elementos
de
R*/
/*Calcula la correlaci#n entre*/
/* las muestras y la pone en R*/
1
1
RC[l] = - R[2] / R[1];
A[1] = 1;
A[2] = RC[l];
*ALPHA = R[ 11 + R[2] * RC[l];
for(MINC = 2: MINC <= M; MINC++){
S =o;
for(1P = 1 ; 11' (= MNC; IP++){
N1 = MINC - IP + 2;
S += RlNl] * A[IP];
1
RC[MINC 1 -S/ (*ALPHA);
MH = MINU2 + 1;
for (IP = 2 ; I P <= M H ; IP++){
IB = MINC - IP + 2;
AT = AIIP] + R C F a J C ] * A[IB];
A[IB] += R C W C ] * A[IP];
A[IP] = AT;
1
A[MINC+I I = RCWMC];
*ALPHA += RCWNC] * S;
1
1
.............................................................................
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar? (SIN): ");
scanf("%c",Tec);
*Tec=toupper(*Tcc).
}while (*Tec!='N' && *Tec!='S');
1
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
49
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 8 :
......................................................................................
.......................................................................
I*
*I
PRUEBA DE OBTENCION DE COEFICIENTES
/*
*I
V.2
..............................................................................
***************$*************************************************************/#include
<math.h>
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <conio.h>
#define MAX 200
#define P 8
void Inicializa(doub1e dl 1, int nmax);
void Seno(doub1e S[ 1, int nmax);
main0
{
double b a 5 * MAXI.s[S*MAXl,
Alfa[P],est[S*MAXl,sum;
int n, i, j, k,m,conl;
/* Apuntadores a los arreglos */
double R[P+l],RC[pI.ALPHA,S,AT;
int np,Nl,MINC,IP,MIi,IB;
int apx;
/* Filtra la serial */
s[1] = 1;
s[2] = 1.44;
~ [ 3 ]= 1.44*~[2]- 1.26;
for(i = 4; i < 5 * MAX + 1; i++)
s[i] = 1.44*sl1-1I - 1.26*s[i-2] +0.81*s[i-3];
INcializa(buE,5 * MAX);
Inicializa(Alfa,P);
Inicializa(R,P+l);
Inicializa(RC,P);
clrscr();
for@ = O; k < 5; k++){
Inicializa(est. 5*MAX);
for(n = . l ; n < MAX+l; n++){
buffF*MAX+n]=sF*MAX+n];
if ((n == 1) && (k !=O)){
np=I't I ;
for ( i I : i <= np; i++){
/* Se hace el c lculo*/
/* coeficientes
de los
alpha */
x
Rl11 = O ;
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
50
SISTEMA DECODIFICACIbN PREDICTIVO
for(¡
1; j <= (MAX - i + 1); j++)
R[i] += buffli] * b q + i - 11;
=
1
RC[1] - R[2] I R[1];
Alfa[] I = 1;
Alfa[2].= RC[l];
ALPHA = R[1] + R[2] * RC[l];
for(M1NC = 2; MINC <= P; MINC++){
S =o;
for(IP = 1; IP <= MINC; IP++){
Nl=MINC-P+2;
S += Rwl] * Alfa[IP];
1
RC[MINC] = -S I (ALPHA);
MH = MINc12 + 1;
for (IP = 2; IF' <= M H ; IP++)(
IB=MINC-P+2;
AT = Alfa[IP] + RCpAINC] * Alfa[IB];
Alfap] += RCplINC] * Alfap];
M a p ] = AT;
1
AlfapAINC+l] = RC[MINC];
ALPHA += RC[MINC] * S;
1
1
if& !=O){
sum = o ;
for(m = 1 ; m < P; m++){
sum += Alfa[m] * buf@*MAX
+ n - m];
1
est[n] = sum;
1
1
for (i = 1; i <= P; i++){
printf("~ó",Alfa[i]);
1
getchar();
1
1
...........................................
Inicializacien de arreglos
...........................................
void Inicializa(doub1e d[ 1. int nmax)
{
int i;
for (i=O;i < nmax; i++)
d[i]
= O;
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
51
SISTEMA DE CODIFICACIdN PREDICTIVO
1
............................................
Seaal generadora de seno
void Seno(doub1e
{
int ap;
1
S[
3, int nmax)
for(ap = O; ap < nmax; ap++)
s[ap] = sin(ap * M-PI-4);
52
UNIVERSIDAD AUT~NOMAMETROPOLITANA
IZTAPALAPA
""".^
I
"
.
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 9:
/* Esta es la prueba de un filtro paso bajo*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio. h>
#include <time.h>
#include <graphics.h>
#include "c:\tcc\utyl\ejes.cI'
#include "c:\tcc\utyl\inicgraf.cc"
void seno(doub1e S[],int nmax);
void Gauss (doubleS[],int nmax);
void Ruido (float S[], int nmax);
void main()
double x[200],y[200];
float h[22],f;
char tec;
int ij,k,n;
int maxx,
maxy,
mrgizq,
rangY,incY,
/*sefíales de entraday salida*/
/*coeficientes delfiltro*/
/*Variables paragmficar*/
anty,antx,
PX,PY,
aP;
if (!Inicgraf())
exit( 1);
maxx = getmaxxo;
maxy = getmaxy()/2;
mrgizq = maxx/lO;
rangy = maxy;
/*Se inicializan variablespara*/
for(i4; i < 22; I++)
h[i] = 0.0;
/*Se inicializan arreglos*/
/*graficar*/
for(i=O; i < 200; i++){
x[i] = 0.0;
y[i] = 0.0;
1
printf("Generando sena1 aleatoria.... ");
/*Genera sefíal aleatoria*/
Ruido( x, 200);
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
".
--
53
SISTEMA DE CODIFICACI~N
PREDICTIVO
cleardevice();
line(mrgizq,50,getmaxx() - mrgizq,50);
antx = mrgizq;
anty = O;
for (i200;
= O; i<
I++){
/*Grafica seilal*/
px = mrgizq + 3 * i;
py = ((x[i] * 5000/ran&y)> rangy)?rangy: x[i] * 5000/rangy;
line(antx,anty + 5O,px,py + 50);
antx = px;
anty = PY;
1
tec = getch();
clrscr();
clrscr();
cleardevice();
/*Calcula los coeficientes*/
h[ 101 = 0.25;
for(k = O; k < 10; k++){
h&] = sin((k - 1 O) * ,07046* "PI)
py = hm] * 50;
px = mrgizq + k * 8 ;
printf("%.Sf\n",h[k]);
* o< - 10));
/ ("PI
1
printf("%.8f\n",h[ lo]);
for(k = 11; k < 21; k++){
h p ] = sin((k - 10) * .O7046 * "PI)
py = h[k] * 50;
px = mrgizq + k * 8;
printf("%.8f\nt',h[k]);
imprimen/*Se
/ ("PI
en pantalla*/
* (k - 10));
1
tec = getch();
cleardevice();
line(mrgizq,50,getmaxx() - mrgizq,50);
antx = mrgizq;
anty = O;
for(n = O; n < 200; n++) (
for(k = O; k < 2 1 ; k++){
1
/*Filtra la sew x[ ] y deja*/
/*la seilalfiltrada en y[]*/
i = ((n - k) < O)? (63 + n - k): (n - k);
y[n] += h[k] * sli];
UNIVERSIDAD A U T ~ N O M AMETROPOLITANA
IZTAPALAPA
54
SISTEMA DE CODIFICACI~N
PREDICTIVO
px = mrgizq + 3 * n;
py = ((y[n] * 5000/rangy) > rangy)?rangy: y[n] * 5OOOlrangy;
line(antx,anty + 5O,px,py+ 50);
antx = px;
anty = PY;
1
tec = getchar();
void seno(doub1eS[], int nmax)
{
int ap;
void Ruido (float S[], int nmax)
{ float *pos;
register int n;
pos = S;
srand ( 27 );
for (n=O; n<nmax;n++)
*(pos++) = 3.4641016 * rand() I RAND-MAX
1
- 1.7320508;
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
55
SISTEMA DE CODIFICACI~N
PREDICTIVO
Programa 10:
#include <stdio.h>
#include <stdlib. h>
#include <conio.h>
#include <math.h>
#include <ctype. h>
#include <graphics. h>
#include <dos. h>
#include "c:\tcc\utyl\inicgraf.c"
#include "c:\tcc\utyl\ejes.c"
#define MAX 200
#define P 8
/**************************************************k****************k*******/
void Gauss (doubleS[], unsigned sem, intnmax);
void Seno(doub1e s[],int nmax);
void Inicializa(doub1e d[], int nmax);
void Calc"(doub1e
d[], int *M, int nmax);
void Calc-B(doub1e d[], int M, float *B, int nmax);
void Calc-Alf(doub1e d[], int M, float B,doubleM ] , i n t nmax);
void filtra(doub1e x[], int nmax,double y[], double h[]);
void Ruido (double S[], int nmax);
void Continua(char*Tec):
.............................................................................
/*************************************************************k************k/
void main()
{
/********************~~***************k**********k***kk*kkk*************kk**/
char Tec;
double s[5*MAX];
buffIMAX];
double
double y[5*MAX];
h[2*P]; double
int M=20;
float B=l;
double AlfIP+l];
sn,dn,err[MAX].
double
snest[MAX];
double
int i,k;
n;
int
apx,apx int
1;
double aux;
voz
transmitida
I*ser
Send que
*I
I* Buffer para el transmisor *I
Fitro
del I* Salida
PB*/
PB*I Filtro
I*del
Coeficientes
de retardo deI* Periodo
*I
amplitud
de I* Coeficiente
*I
parametros
deI* Vector
Alfa *I
I* Estimaci6n
de error S y
*I
para
I* Arreglo
graficar FFT *I
a I* Apuntador la send
I* Apuntador auxiliar
*I
*I
..............................
Variables para el receptor
..............................
srn,srnest[MAX
double
1:
drn; double
int auxr,apxr,apxlr;
en
receptor*/
/*S&
el
estimada
en
error
/*Sendde
receptor*/ el
~
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
~~
56
SISTEMADE CODIFICACI~N
PREDICTIVO
int maxx,
mw,
mrgizq,
rangy,incy,
anty,antx,
PX,PY,
ap;
/*Variables para grafícar*l
char buf€er[80];
/* Buffer para texto */
if ( !Inicgraf())
exit( 1);
Inicializa(buff,MAX);
Inicializa(s,MAX);
Inicializa(srnest,MAX);
Inicializa(Alf,P);
Inicializa(h,P);
Inicializa(y,S*MAX);
/* Inicializacitn de arreglos */
Ruido(s,5*MAX):
/* Se crea una -al aleatoria */
filtra(s,5 * MAXy,h);
for (i=O;i < 5; i++){
getch0 ;
clrscr();
cleardevice();
for (n=O;n < MAX;n++){
/* Lee la muestra actual y la pone */
/* en el buffer*/
b a n ] = y1 i*MAX+n];
if (i * MAX != O && n =O){
Calc-M(buff,&M,MAX);
printf("\nM%i = %i",i+l,M);
Calc-B(buff,M,&B,MAX);
printf("\nB%i = %.2h",i+l,B);
/* Cada 5 milisegundos hace el cal *I
/* culo de los parametros del pre*/
/* didor*/
Calc-Alf(buE,M,B,Alf,MAX);
for (k
1; k <= P+1; k++)
printf("\n%Sf, It, A m ] ) ;
=
1
/*variable
Inicializa
auxiliar */
aux = O:
for (k = O; k < P;k++){
apx = ( n-k < O)? n-k + 200 : n-k;
/* Sielapuntador es nega */
apx 1 = (n-k-M < O)? n- k M + 200 : n-k-M; /* tivo, lo ajusta */
-
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
57
SISTEMA DECODIFICACIbN PREDICTIVO
-
aux+= Alflk] * ( bmapx] B * bmapxl]);
/* al rango previsto*/
}
apx = (n-M < O)? n-M+200: n-M;
sn = B * bufqapx] + aux;
snest[n] = sn;
dn = y[i * MAX + n] - sn;
gotoxy(20,IO):
printf("error = %.5f',dn);
delay( 100):
err[n] = dn:
/* Hace la estimacien de la
resultado
/*
el Pone
en el arreglo */
/* Calcula el error */
if(i != O) [
auxr = O;
/* Inicializa variable auxiliar */
for (h = O; k < P; k++){
apxr = ( n-k < O)? n-k + MAX : n-k; /* Si el apuntador es riega */
apxlr = (n-k-M < O)? n- k M + M A X : n-k-M; /* tivo, 10 ajusta */
/* al rango previsto*/
auxr += A m ] * ( smest[apxr] - B * smest[apxlr]);
-
1
dm = err[200 - n - 11;
s m = B * srnest[apxr] + a m ;
srnestln] = sm + d m ;
1
maxx = getmasx();
maxy = getmasy()/2;
mrgizq = mass/l0;
rangy = 8 * n ~ s y / 1 0 ;
setcolor(WHITE);
setlinestyle(SOLID-LINE,l,l);
cleardevice();
Ejes(l,30,gct1~1axx()-30,1,0,1,4,ge~()/2-4,1,0,1,2);
Ejes(l,30,getmaxx()-30,1,0,l,getmaxy()/2+2,ge~()-4,1,0,0,2);
antx = mrgizq:
anty = 9*maxy/lO;
for(ap = 0; ap < MAX;ap++){
px = mrgizq + 4*ap;
incy = (bufflap] *5000/rangy> rangy)?rangy:bufflap]*5OOO/rangy;
UNIVERSIDAD A U T ~ N O M A
METROPOLITANA
IZTAPALAPA
58
SISTEMA DE CODIFICACI~N
PREDICTIVO
I
py = 9*maxy/l0 - incy;
line(ants,anty,px,py);
antx = px;
anty = py;
setcolor(YEL1.OW);
antx = mrgizq:
anty = 9*nlas!,/ I O;
for(ap = O; ap < MAX ; apt+){
px = mrgizq + 4*ap;
incy = (snest[ap]*5000/rangy > rangy)?rangy:snest[ap]*5000/rangy;
py = 9*tnaxy/lO - incy;
line(ants,anty,px,py);
ants = 13s:
anty = py;
I
setcolor(YELL0W);
setlinestyle(SOLID-LINE,1,l);
antx = mrgizq:
anty = 18*maxy/lO;
for(ap = O; ap < MAX ;ap++){
px = mrgizq + 4*ap;
incy = (srnest[ap]*5OOO/rangy> rangy)?rangy:smest[ap]*5OOO/rangy;
py = 1 8 * maxyl1O - incy;
line(ants.anty,px,py);
ants px:
anty = pv:
I
I
Continua(&Tec):
closegraph();
}while (Tec != 'N');
/*
/*
/*
Inicializa() pone cn O'sarreglo
el contenido
del
*/
*/
*/
/********************~~**************~*********~********~*~~~~~*****
void Inicializa(doub1edl], int nmax)
{
int i;
for (i=O;i< nmax; i++)
1
d[i] = O;
UNIVERSIDAD AUTONOMA METROPOLITANA
IZTAPALAPA
59
SISTEMA DE CODIFICACI~N
PREDICTIVO
.............................................................................
void Ruido (double
{ double *pos;
register int n;
S[].
i I nmax)
pos = S;
srand ( 15 );
for (n=O; n< n m a x ; n++)
*(pos++) = 3.1653 * rand() / RAND-MAX - 1.73;
1
/****k*************************k*********kkk********************************/
.............................................................................
void Seno(doub1e S[], int nmax)
{
int ap;
for(ap = O; ap < nmax; ap++)
s[ap] = cos(ap * M-PI-4);
void Calc-M(doub1e dl], int *M, int nmax)
{
I* Apuntadores a arreglos */
int n,m,apx;
double aux, Ro;
double avn,avnm,avm;
/* variables para promedios*/
/* Inicializa variables */
avn = O;
avm = O;
avnm = O;
apx = O;
Ro = O;
aux = O;
for (m = 20; m < nmax-50; m++){
avn = O;
avnm = O;
avm = O;
for (n = O: n < Ilmax; n++){
am+= 1.O * dlnl*d[n]/nmax;
apx = (n-m O)'? n-m+nmax: n-m;
avm+= dl aps I* d[apx]/nmax;
.
/* Calcula el valorcuadr tic0 */
I* medio de la seaal *I
S:
avnm+= dlnl
* d[apx]/nmax;
UNIVERSIDAD AUTóNOMA METROPOLITANA
IZTAPALAPA
/* Calcula el valor cuadr tic0 */
/* medio de la seaal retardada */
/* Calcula la correlacien
entre*/
60
19
)(++u
:X~LUU
>u
:()=u) 103
SISTEMADE CODIFICACI~N
PREDICTIVO
for (i = 1; i <= np; i++){
R[i] = O;
fora = 1; j <= (nmax - i + 1); j++)
Rlil += vlj] * vu + i -11;
I
RC[1] = - R[2] / R1.11.
A q l ] = 1;
AN21 = RC[ 11;
ALPHA = R[1] + R121 * RC[1];
for(MINC = 2 ; MINC' <= P; MINC++){
S = o;
for(1P = 1: IP <= MINC; IP++){
N1 =MINC - IP + 2;
S += R[N1J * AIQIP];
I
RC[MINC] = -S/ (ALPHA);
MH =MINC/:! 1- 1:
for (IP = 2; 1P <= M H ; E'++){
IB =MTNC - LP + 2 ;
AT = AlqIPl + RC[MINC] *
AlfIIB] += RCIMINC] * A w l ;
AlfIIP] = Al':
m];
I
1
I
AlQMINC+I] = RC[MINC];
ALPHA += RCIMINC] * S;
.............................................................................
void filtra(doub1e x[l.
{
ill1
Ilmax,double y[], double h[])
int n,i,k;
h p ] = 0.07046;
forQ = O; k < P; k++) ;
h[k] = sin((k - P) * ,07046 * "PI)
printf("%.8l\n".lllk]);
/* Se hace el c lculo de los coepC/
/ ("PI
* (k - P));
/ ("PI
* Q - P));
I
printf("%.8f\nt',h[k]);
for(k = P+1; k < 2*P: k ++):
h&] = sin((k - P) * ,07046 * "PI)
printf("%.Xnn".llIkl);
I
for(n = O; n < nmax; n++){
for(k = O; k < 2*P: k++){
i = ((n - k) < O ) ' ] (nmax + n - k): (n k);
y[n] += hlkJ * Y l i I :
/*Se la
filtra
serial*/
-
I
1
I
__
UNIVERSIDAD AU'l'OhOMA METROPOLITANA
IZTAPALAPA
62
I
~~~
~
~~
SISTEMA DE CODIFICACI~N
PREDICTIVO
void Continua(char *Tec)
{
do{
gotoxy(50,24);
printf("Deseas continuar? (SIN): ");
scanf("%c",Tec):
*Tec=toupper( *Tec) 1
}while (*Tec!='N'&& *Tcc!='S');
1
UNIVERSIDAD A U T ~ N O M A
METROPOLITANA
IZTAPALAPA
63
". ..... ."
.
-
. ..
.
~
~~
SISTEMA DE CODIFICACI~N
PREDICTIVO
V. RESULTADOS ESPERADOS Y OBTENIDOS
Durante el desarrollo del sistema predictivo, nos encontramos con muchos contratiempos,
en primer lugar, la señal ideal para pruebas deun sistema de estas caracteristicas es una señal de
voz digitalizada, la cual. alno contar con un sistema de adquisición de datos, no nos fue posible
obtener, siendo ncccsario generar una señal aleatoria como señal de prueba, lo que implicb,el
filtraje de dicha scfial para obtener una señaldentrodelrangode
frecuencias de la voz, sin
embargo este tipo de scliales no son del todo predecibles.
Otro de los contratiempos con los que nos encontramos fue el hecho de que
el cálculo del
parámetro M del prccixtor, que simula el retardo en la señal de voz, es un cálculo muy pesado, y
dadas las caractcrístic:ts de la computadoracon la que se trabajo, no se pudieronobtener
resultados en tiempo rcal. ya que no fueron reajustados los parámetrosdel predictor cada intervalo
de tiempoapropiado ( 5 milisegundos). El tiempoaproximadoenel
cálculo de M fuede un
minuto.
Ahora bicn. el principal problema con el que nos encontramos durante el desarrollo de el
proyecto fue la solucibn a la ecuanción de donde se obtienen los coeficientes a del predictor. Los
intentosque se hicieronfueronvariados,
en primer instancia, se intento resolver la ecuación
directamente mediantc la inversiónde la matríz I$ ( elprograma se presenta en la sección de
programas), lo cual nos diócomoresultado un retardo más marcado enel cálculo de todos los
parámetros, además de coeficientes deun filtro inestable. Aunado a esto, el noentenderaúnen
este punto la neccsidad de un filtro pasa bajas a la entrada del sistema, pues estabamos trabajando
con señales aleatorias y específicamenteen este caso con señal de ruido Gaussiano, retardando más
el que el sistema funcionara como debe.
El siguientc intento, así como los restantes, se enfocarón a resolver la ecuación para los
coeficientes, utilizando el métodode Robinson,descrito en elcapitulo III. En este sentido se
hicieron varios intentos para descubrir porqué los coeficientes a del filtro, excedian del valor límite
de uno, e inclusoocasionaban que la máquina marcara un error de overflow. La razón era un
error que se vino acrlrrcando desde el primer intento ya que se confundio uno de los parámetros de
la subrutina con la q w se calculan dichos coeficientes, ( el programa erróneo es mostradoen la
sección de programas. subrayando la parte del error), lo cual hacía queun loop que calcula una
sumatoriase extcndma mas allá dellímite previsto.Después de corregir este error, losvalores
para los Coeficientes u dan valores menores o iguales a la unidad,lo cual implica un filtro estable.
Ahora bien, la parte de la cuantización se realizó, tomando un cuantificador de 8 bits, lo
cual incrementa el ancho debandarequerido para la transmisión de la diferencia 6n. Lo anterior
cálculo de los coeficientes a,provocaba que la
se hizodebido a quc el erroracarreado'enel
diferencia 6n fuera dcmasiadosignificativa y por lo tanto, el ser cuantizada con un bit, no reflejaba
ni se aproximaba a los resultados esperados.
UNIVERSIDAD AIJT¿)NOMA METROPOLITANA
IZTAPALAPA
... .
.
~
"
L"
.. .
- 1 1 1
64
.
."
"
"
"
_
.
“
”
SISTEMA DE CODIFICACI~NPREDICTIVO
VI CONCLUSIONES
Pese a quc los multados obtenidos no reflejan el comportamiento del sistema en tiempo
real, sí nos dan una d a dc cuál es la ventaja de este sistema de codificación fiente a los sistemas
de codificación quc no descartan la transmisiónde la redundanciaen la señal. Como se puede
observar en la sccclOn .IC programas, los resultados obtenidos para la diferencia de la señal, no
sobrepasan la cuantizmón en 4 bits, sin embargo, dadoque el sistema propone utilizar un
cuantizador de u n b ~ t paso variable, noson necesarios ni los 4 bits para la transmisión de la
señal de diferencia, lo cual refleja un ahorro considerable en ancho de banda.Ahorabien,
en
cuanto en cuanto a la posibilidad de reconstruir la señal con la información disponible, queda claro
en el sistema de rcccpcibn, que esto es posible, aunque se tiene cierto grado de degradación y desde
luego de atenuación esdsta, sin embargo, es reconocible, (por lo menos a nivel gráfico).
!’
Finalmentc, nucstras conclusiones después de tantos tropiezos, son que podemos proponer
como una solución cticcntc. un sistema de codificación predictiva, cuando se requiera de ocupar
el mínimodeancho
dc banda y ademásdeobteneruna
calidad media en la señal de voz
reconstruida.
Ciertamentc,habria sidomásrepresentativo trabajar con muestras de señal de voz, sin
embargo, lo obtcnido con lasseñales trabajadas, nos ha dado una clara ideade cuales son las
ventajas y desventajas dcl sistema.
VII. BIBLIOGRAFiA
1. Atal, B.S., and Schrocder, M.G. “Adaptive Predictive Coding of Speech Signals” 1968. THE
BELL SYSTEM I‘ECHNICAL JOURNAL, October, 1970.
2. Atal, B.S. “L,incnr Prediction Analysis of Speech Signals”, 1968
3. Markel, J.D and Gray. A.H. “Linear Prediction of Speech, Verla, NEW YORK, 1976.
4. Barrios A. “Proccsamicnto Digital de Señales”, UAM, MEXICO 1992.
5. Jonhson, W.G, “Procesing Signal”, ACADEMIC PRESS,NEW YORK 1973.
UNIVERSIDAD AUT6NOMA METROPOLITANA
IZTAPALAPA
65
Descargar