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