U N I V E R S I D A D A U T O N O M A M E T R O P O L I T A N A I Z T A P A L A P A INGENIERIA ELECTRONICA CCOMPUTA~ PROVECTO TERMINAL I If' TRANSFORMADA '* ** PROGRAMAS Y COSENO TRANSFORMADA PARA RNdLISIS Y I1 TRANSFORMADA DE FOURIER DE 84332730. SERIES SENO *' '* DE TIoEIPO y" - ---I a C O N T E N I D O L 3 CAPITULO 1 I' CAST : Transformada Seno y Coseno I' Referencia Teórica CAPITULO 2 CAPITULO 3 I' I' 6 Manual Operativo 14 Referencia Técnica 31 FOURIER : Transformada Rápida de Fourier Ref ere nc i a Te6 r i ca 56 Manual Operativo 67 Referencia Tdcnica 78 I' Programas para Análisia de Series de Tiempo " Descr ipc i 6n General 10 1 Compendio de Programas 102 Ejemplos 107 Listados de P r o g r a m s 137 CONCLUSIONES 230 APENDICE Referencia BibliogrAfica 239 Referencia de Archivos en Disco 24 1 2 I N T R O D U C C I O N Las computadoras por su conf iabi 1 idad, velociadad y potencial han sido colocadas como una herramienta casi indispensable en la organización de las diversas actividades del hombre, mediante la aplicación de sistemas de cómputo que se adaptan a las necesidades particulares de cada actividad. Por lo que la investigación, operación, y comercializacibn de computadoras, son fabricación, actividades esenciales para el desarrollo de estos sistemas, el soporte requerido para el desarrollo de sistemas comprende Areas de investigación muy diversas como las matemáticas. El procesamiento de información obtenida de un muestre0 ( u observación), es básicamente lo que se efectuará con el modelo matemático para obtener la solución a un problema dado. Esta información no es otra cosa que datos obtenidos Los problemas en diversas áreas, que en función del tiempo. requieren del procesamiento de datos como función del tiempo son tan diversos como campos de estudio existen. En el campo de la electrónica existen diversos problemas sobre: sefiales de comunicación, análisis de señales de audio y video, respuesta en frecuencia, potencia, filtros, etc., que al ser estudiados con ayuda de modelos matemáticos, son solucionados de manera e s eficiente, y es aqul donde el desarrollo de programas que permitan el uso de computadoras para la solución de estos problemas 0 s de gran importancia. El Análisis d e Serieg d z TiernDo cobra gran importancia por 6us aplicaciones en modelos teóricos que permiten el procesamiento de informaci¿n, sin embargo, la diversidad de 6us aplicaiones es consecuencia de l a cantidad de temas involucrados dentro del Análisis de Series tie Tiempo, por lo que su estudio no es simple y en consecuencia es neseaario el estudio previo de diversos temas de mátemáticas. 3 El presente proyecto obedece a la nesesidad de desarrollar programas, que permitan facilitar la solución de problemas que puedan ser analizados bajo modelos matemáticos de Analisis de Series de Tiempo; aunque la bibliografía existente es abundante y completa, en muchas ocasiones es nesesario aplicar de manera practica estos conocimientos, sin efectuar un estudio teórico muy profundo, o partir de un algoritmo base, para elaborar programas más completos que cubran las necesidades requeridas, como es el caso de los programas principales incluidos en este proyecto. Este proyecto está dividido en tres capítulos, dedica los dos primeros al análisis de dos modelos muy importantes por su aplicación, como son la Transformada de Fourier y las Transformadas Seno y Coseno; en un tercer capítulo se ofrece un conjunto muy diverso de programas, los cuales forman una herramienta práctica en el estudio de las Series de Tiempo y otros temas afines. El primer capítulo es básicamente un programa para computadora, el cual permite obtener la Transformada Rápida de Fourier así como lás gráficas d e espectro correspondionte8 ; por lo cual la obra escrita es presentada como un manual para el programa llamado FOURIER; además del manual oporativo o guía del ususario, en este manual se incluyon las referencias teórica y técnica. El segundo capítulo tambi9n e6 presentado como u n manual para el programa llamado CAST ( Cosine and Sine Trapform8 1 mediante el cual es posible obtener la6 Transforawrdae Seno y Coseno, y las gráficas de 108 espectros; el manual contiene las referencias tebrica y técnica, además de la guia del usuar io. En el tercer capítulo son pn96OntadO8 varios programa8 para computadora, los cuales puoden ser utilizado8 aomot algoritmo6 base de programs suporioros para la 8 o l w i 6 n 6e prOblOt~a8 suceptibles a ser tratado6 bajo modeloo do Sari08 de Tiempo, o como ejemplos de aplicación d e Series de Tionrpo en diversas áreas. Se incluyen ejemplos para l a mayoría de los programs. Todos los programas fueron elaborado8 en longuajo do programación C bajo sistema operativo MS-DOS; 68 proporcionan los listado8 y disco8 con los correspondiente8 archivos fuente,objeto y ejecutable. No se requiere de equipo de computo especial para correr cualquiera de los programas. 4 C *' A P I T U L O I C A S T : TRANSF~RMADACOSENO v TRANSFOR~*~ADA SENO ------- REFERENMANUAL TEOWeA OPERATIVO. REFERENCIA TEcNtcA. " .. REFERENCIA TEORICA DEL PRoGRAlu CAST INTRODUCCION Una f u n c i ó n repetitiva o periódica es igual a una suma (probablemente finita) de senoides. Como consecuencia del principio de superposición; éste resultado, conocido como teorema de Fourier, significa que los circuitos con entradas no sinusoidales que son periódicas pueden analizarse con tbcnicas fasoriales sinusoidales. La expresión de una función periódica como una suma de ( conocida como su representación en serie de senoides Fourier 1 puede estar en forma ya sea trigonométrica o exponencial La segunda forma , que sugiere una generalización y se conoce como ' Transformada de Fourier ' , permite el análisis de circuitos con entradas no periódicas. . Cuando se habla de serie t r í g o n d t r í c a de Fourier, puede emplearse una de la8 do8 formas; una consta de senos y cosenoa, mientras que la atra consta de senos con ángulos de fase. - Empleando la fórmula de Euler, se desarrolla la forma compleja o exponencial de l a serio do Fourfor, aunque men06 intuitiva, es más compacta que la trigonométrica. Entre otros usos,la Ttansforaurda de Fourier de funciones puede ser usada para ro8olvar ocuaoíones diforencialesi las a ~ l l k l w s para la soluci6n son 1 ) condiciones de frontor8 -8 que tengan valor cero en l a frontorr o 2 ) quo su derivada sea cero en la frontera. En estas instancias dos tran8fOtmada8 surgen de manera natural , la Transformada Seno y la dende l a priarera emplea Bnicamente Transformada Coseno , valores de seno para complotar la funcian , y la segunda 8610 la cual emplea valores de coseno I on crontrrcrte con la F.F.T. usa valores de funciones tanto seno como coseno. 6 .\ Referencia Teórica CAST SERIE TRIGONOMETRICA DE FOURIER Se d i c e que una funcibn f ( t ) es peri6dica s i e x i s t e u n nifmero T real p o s i t i v o t a l que para toda I t @ . Si f ( t ) e s p e r i ó d i c a , entonces se d i c e que e l tiempo T es el período de f í t ) . Teorema. .deFourier Dada l a función r e a l f ( t ) , que e s peri6dica con período tales T segundos, existen números r e a l e s a. ,al,bt ,az ,b2 , que : f ( t ) = a0 + ai cos W O +~ bz sen 2w0t o bien: f ( t 1 = a. + b, + +inf Sulu n= 1 sen wot + an cos 2w0t ... + as cos Swot + bs sen 3wot ( a,, coa n w e t -t b, + ... sen n w e t 1 se denomina donde wo = 2 p i / T radianes por segundo ' frecuencia fundamental ' o ' primera ararónioa ' de i ( t ) . La La fbrmula frecuencia nuo se denomina n d s i a m arm6nioa. a n t e r i o r se conoce como S e r i g Triaon-trio aBla Fourier f(t). !a Las constantes a o , a i , b,, a i , c o e f i c i e n t e s de Fourier de f i t ) . c o e f i c i e n t e de Fourier a. denorinado o I componente de cd de f ( t ) ' e s : a. = - b,... 80 denoarinan La f 6 r m 1 ~ 1para 01 ' v a l o r # d i o bo t ( t ) f ( t ) dt donde l o o limiters de l a i n t e g r a l pueden aub8tituiroe por cualquier i n t e r v a l o de T. 7 Referimncia Tsbrica CAST Si en la fórmula de la serie de Fourier se multiplica primero los dos miembros por el factor nwot y después se integra con respecto a 't', entonces se obtiene: an = T s. - f ( t ) cos nwot dt ; para n = 1 , 2 , 3 , . . . La fórmula anterior determina el coeficientes an ; los límites de integración también pueden estar en un período arbitrario. Multiplicando ambos miembros de la serie de Fourier por sen(nwot) e integrando con respecto a It' , se obtiene de manera similar la fórmula: f(t) sen nwot dt ; para n = 1 , 2 , 3 , . .. donde la integral puede calcularse en un período arbitrario. Otra representación de l a Serio Trfgonodtrica de Fourier 98 : +inf f(t) = a. + S u l u A, COI (nwot - O n ) n= 1 2 donde A n an + bn 2 -1 Y On 8 = tan ( bm/an 1 . Referencia T d r i a a CAST SERIE COMPLEJA DE FOURIER Aunque la serie trigonom6trica de Fourier es u n concepto relativamente intuitivo (ya que la representación en la mente de las senoides y cosenoides no es muy difícil 1, empleando una representación en otra serie , conocida como serie ' exponencial o ' compleja ' de Fourier podemos ( I i abreviar matemáticamente la representación en serie y ( 2 i generalizar el concepto para llegar a la Transformada d a Fourier, lo cual permitir& tratar funciones no periódicas. I La ecuación clave en el desarrollo de la serie compleja de Fourier es la fórmula de Euler. Apartir de : e 30 - 90 e = cos O + j sen O = cos O - j sen O se obtiene: - . donde wo 2 pi / T Esta es l a r e ~ r e ~ e n t a a i ó q-s@ Fourier d a f ( t i . En otras palabras, es posible expresar f ( t ) como una suma de exponenaialee oosoplejae. Notar la forma simple de esta repreaentacian en aerie; sin embargo si f u í s e nesesario calcular primero an y bn para poder obtener C n , ya no sería sencillo determinar esta represontaci6n Por fortuna , se puede doduolr una fórmula par a obtener Cn directamente, empleando en 01 dosarrollo la f6rtuula do Euler 8e obtiene t . Cn - -)nu0 t f(ti e dt T 9 \ \ . ._._ “I./I _.,._.._. _.-,, .- - --- Refmrsncia Teárica CAST TRANSFORMADA COSENO Y TRANSFORMADA SENO Partiendo del la Integral de Fourier, se tiene entonces: Asumiendo que f(t) no es completamente “lisa” (función par 1 pero es continua, entonces es posible escribir: s+.” [ ( 2 1 1 Pi - 1:: du = f ( x ) f(t) cos u(x-t) reescribiendo fuera a cos u ( x - t ) como: cos ux y separando: < s > f(x) = 1 Pi . cos ut + sen ux s’.” Foss + -P1 i + i n * Fe”s““ ux sen ut f(t1 coa ut - a m i ux 1 f(t) son ut dt - s n * Definiendo dos nuevas funciones A ( u ) y B ( u ) A(u) = ‘S - Pi B(u) = - P fl + * n i f(t) cos ut dt f ( t ) sen ut dt - í n t s:: : 10 cdmos du . .\ Rmfmxemcia Teórica CAST es posible reescribir la ec.(3) como: ( 6 ) f(x) = 1 Pi S A ( u i cos ux du + "' s +:ni B(u) sen u x du . donde la parte derecha puede ser comparada con: < 7 ? +inf f(x) = Su)(A An COS + ux n=O +inf SUMA n= 1 B n sen u x que es la forma de la expansi6n en Series de Fourier para u n universo distinto de la función f. Similarmente es posible ( 6 ) la escribir la f en términos senos y cosenos, en la ec. sumatoria sobre n es reemplazada por la integral sobre u, y los coeficientes son funciones continuas. Como una función peribdica, con período 283 , puede expanderse en series como las descritas en la ec. ( 7 1 , es posible afirmar que si una funcibn satisface las condiciones de la Integral de Fourier an algQn intervalo e &Sta podria representarse exclusivamente en el intervalo donde la Integral de Fourier otorga una represontacibn valida dentro de los enteros. De manera semejante, una funoibn tendría que ir do cero al infinito tan rápido, que la8 integralos de las ec. ( 4 ) y ( 5 ) existan; por lo tanto no habría la posibilidad de que la funci6n fuera peribdica í con la trivial excepcibn de la funci6n cero). Si f e8 una funcibn par entonoes l a ec. ( 4 ) aoríat 1 e l n i Aíu) = Pi f ( t ) cos ut dt O y en este caso B(u) podria ser O. Transformada Coseno. Esta e8 la ecuaci6n do la Referencia Teórica CAST Si f es una función impar entonces la ec. ( 5 ) sería: <.> y en este caso A(u) podría ser O. Transformada Seno. Esta es la ecuación de la PROGRAMA PARA CALCULAR LAS TRANSFORMADAS COSENO Y SENO Dado un operador finito o forma de onda W : W = { a o , a ¶ , az , as, el p r o g r a m CAST definidas como: calcula la 3 Transformada Coseno y Seno m C(f) = S(f) ..., a. - SüWl am cos (2.pi.f.) W=O m S U U a. sin ( 2 . p i . f m i S=O l a amplitud y espectro de atraso de fase se definen como: para cada f = O, A f , 2 Af, 3 hf, n Af; d o n d e n f = í 1/2n) ciclos por unidad de tiempo. 12 Referencia Tdrica CAST B IBLIOGRAF IA HARRY F. DAVIS " Fourier Series & Orthogonal Function Dover Publications Inc. 1980. New York, U.S.A. DOUGLAS F. ELLIOT & Fast Transform Academis Press Inc. U.S.A. 1989. 'I RAO 'I K. RAMAHOAN I' ENDERS A. ROBINSON 'I Multichanel Time Series Holden-Day Inc. San Francisco, U.S.A. 1967. 'I WILLIAM H.HAYT Jr. & JACK E. KEMMERLY Análisis de Circuitos en Ingeniería u Mc Graw Hill de Mxico S.A. 1975. Mxico D.F. I' KENDALL E. ATKINSON " An itroduction t o Analysis " Jhon Wiley E Sons Inc. 1978. New York U.S.A. MAX A. SOBEL & NORBERT LERNER ., Algebra frentice Hall Hispanoamericana S.A. 1989. Mxico D.F. I' 'I MS-DOS, User's Guide Microsoft Corporation 1987. U.S.A. 'I HERBERT SCHILDT " C : Manual de Usuario Mc Graw Hill / Interamoricana de España S.A. Madrid Esaña 1989. I' " Turbo C++ , User's Guide Borland International Inc. U.S.A u 1992. 13 W A L OPERATIVO DEL PROGRAHA CAST I INTRODUCCION El presente manual indica la forma de uso y los requerimientos del programa llamado CAST. Mostrando además algunos e Jempios. El programa CAST permite calcular a partir de los coeficientes de onda W las Transformadas Seno y Coseno, la Magnitud y la Fase correspondientes. Para cada uno de los cAlculos ( transformadas seno y coseno, magnitud y fase i , el presente programa obtiene l o s resultados Correspondientes ( coeficientes 1 y permite al usuario: mostrarlos en el monitor, imprimirlos, graficarlos, y salvarlos en un grupo de archivos en disco; esta Qltima accibn, otorga a l usuario la posibilidad de volver a usar 108 resultados sin nesesidad de calcularlos nuevamente. I 1 DEFINICION TEORICA Dado un operador finito o forma de onda W : W = {ao, a l , a z , a s , ...) a,) el programa CAST calcula l a Transformada Coseno y Seno definidas como: m C(f) = SUIA a. cos í 2 * p i * f m ) s=PQ s(f) = m S U U a, sin (2.pi.f,) S=O la amplitud y espectro de atraso de faso 14 80 definen como: -I )(anual OseeratAivo CASI' 1 1 1 USO DEL PROGRAMA CAST A continuación se muestra una serie de acciones, las cuales p 4 m T t e n - la operación cwrrgcta del prograaia CAST. A Antes de empezar el uso del programa, verificar que en el disco de trabajo, se encuantren los archivos siguientes:CAST.EXE, HERC.BGI, CGA.BGI, EGAVGA.BG1. B Si desea salvar los resultados (coeficientes) en archivos en disco, verifique que al menos existan 9716 bytes libres en el disco de trabajo. C Si ya se han efctuado cálculos anteriores y se salvaron los resultados en archivos, también debon Estos archivos estar en el disco de trabajo pueden reconocerse por el "nombre" asignado por el usuario y con las extenciones: .COE, .SEN, .COS, . .MAG, OFAS, * G R L - < v m p p m o r . 0 2 , 2 8 y 2 4 ) . D Introducir en la computadora el disco de trabajo con los archivo6 mencionados e itroducir el comnado: CAST <ENTER>. E Se le preguntará si tiene monitor a color, para determinar los colores usados en el programa. F Aparecerá u n &!& Princiaal y su mensaje de ayuda enmarcado por una ventana. Dospu&s; de 8er loido pulse cualquier teola para continuar con e1 desarrollo del program. 15 Hanual OPSr a t i v o CA!3T ... G u n o ~ r o ~ r a m a . . . Entonces aparecerá el Menif Principal completo, que presenta las opciones siguientes: 1 2 3 4 5 O --- ---- -- CALCULA TRANSFORMADA SENO Y COSENO MUESTRA RESULTADOS GRAFICA RESULTADOS IHPRIME RESULTADOS LEEIESCRIBE AKCHIVOS TERMINAR Introduzca su Opción => H d o l - Se deberá elegir la opción 1; para introducir l o s datos del teclado. O la opci6n 5s para leer los datos y resultado8 de 108 grchivos en disco, sólo ai previamente han. sido 8alVadO8 en cálculos anteriores ( es decir que ya se empleado el programa con anterioridad i . Si se elige otra opci6n aparecer6 el mensaje: 1 NO HAY DATOS DISPONIBLES I Pulse cualquier tecla para continuar. I Si se desea v e r el m n o a j o do &Ydol Men6 y mostrar& 0 1 ai.nerjo que Principal pulse apareci6 a l principio dol p r o g r a m cA31. En general pulse para ver l a AYUDR del meno que se est9 trabajando; existon ayudas en las opciones de:GRAFICAR RESULTADOS y LEEIESCRIBE ARCHIVOS. J Después de haber introducido l o s dato8 del teclado o haber leído los archivos con dato8 y resultados, se puede elegir cualquiera de l a opciones que aparecen en el MonQ PrinciDal. 16 Hanun1 Operativo CAST ... U s o d o l ? r o g r a m m . . . A continuacibn se describen cada una de opciones presentadas en e1 MenG Principal. K IV DESCRIPCION DE OPCIONES PRINCIPALES 1 -- CALCULA TRANSFORMADA SENO Y COSENO Permite a l usuario introducir los datos requeridos por el programa a través del teclado. Los nttmeros Q U ~89 muestran a 3 final d e cada sentencia, corresuonden a l ejemplol. Se pedirán secuencialmente los datos siguientes: El número de coeficientme do l a onda U ea = - 7 Se deberá introducir un nttmero In’ tal que: 2<= n <=20. A continuación se introducirán cada uno de los coeficientes de la onda W: Escriba l o a n cooficrimntsr de ia onda U. SO -6 5 28 68 6 -9 -2 . Los valores de la8 o ~ f i o i o n t e rpueden ser: enteros, decimales, positivos o n q r t i v o r . Después el p r o g r a m pedir4 e1 ntbero de coeficientes de las Transformadas Seno y Coseno, el cual será el mismo nttmero de coeficientes de Magnitud y de Fase. El ndmero de coeficientes ‘ m ’ deberá ser mínimo igual al nttmero ‘ n e de coeficientes de la onda W, y m6ximo 300, e s decir: n>= m >= 300. 17 5 2 Manual Operativo U ... T 1 - C a l c u l a T r a n m ( o r i a a a Escriba los coeficientes de TCOS y TSEN S o n o y es = C o m m n o . . . - 200 A continuación 0 1 programa efectuará los cálculos nesesarios para obtener los valores o coefic-isntes de las Transformada Coseno y Seno, Magnitud, Fase, y mostrará mientras est& efectuando estos calculos el mensaje: Gracias, espere un momento por favor... El tiempo de cálculo es proporcional al nQmero 'tu' de coeficientes de las Transformadas Coseno y Seno, para el ejemplo con m=200 coeficientes y en una computadora XT, el tiempo aproximado es de 20 segund0s.u terminar los cálculos e l proarama reqresark a l Menu Princioal, para poder así elegir cualquier opción , como ver los resultados , graficarlos, imprimirlos, o hasta salvarlos en un grupo de arch i vos. 2 -- MUESTRA RESULTADOS Permite al usuario ver en el monitor 106 cooficientos de: Transformada Seno, Transformada Coseno, b g n i t u d y Faso. Se mostrará el siguiente Mend d e Huestra Resultados, y se elegirá la opción deseada. h n u a i Operativo CAST r' F C A S T - TRANSFORMADA SENO y COSENO Introduzca su Opcibn => - Entonces se mostrarán en el monitor los coeficientes correspondientes ; si se quiere detener muestra d e coeficientes, sobre todo cuando no caben en una sola pantalla (m6s de 68 coeficientes), se teclea CONTROL s ; y nuevamente CONTROL a para continuar viendo los coeficientes restantes; si no se oprime esta secuencia se ir6n encimando sobre los primeros coeficientes mostrados, así haíta terminar de mostrarlos todos. Al terminar d a mostrar los coeficientes correspondientes el programa se detendrá haota que puloacualauier tecla para continuar, y regresará al Nenh de Pluortra Resultad06. 3 -- GRAFICA RESULTADOS Permite al usuario vor aada una do las gr6ficas correspondientes a la Tran6formaCia %no, Traneformda Coseno, Magnitud y Fase. Es posible grQficar todos los ooeficiontes o h i c a m e n t e un intervalo especifico. Como el espectro es siwOtrico y de la Transformada Seno y Coseno 6 6 1 0 se obtiene la mitad de 61, par% efectos d e SE !?& oraficaci¿n, e l nomero d s o w f i a i antea ptaficad doble d e coeficientes que se obtienen do la Transformada, permitiendo ver el espectro completo; sin embargo el nQrnero da coeficientes obtenidos no se altera. Es posible grhficar todos los coeficientes o a¿lo un intervalo especifico. 19 . Manual ODerativo CAST Se mostrará el Menú de Graficar y se elegir& una de las opc i ones. It C A S 1 2 3 4 O T --- ---- - TRANSFORMADA SENO y COSENO 1 GRAFICA TRANSFORMADA SENO GRAFICA TRANSFORMADA COSENO GRAFICA MAGNITUD GRAFICA FASE MENU PRINCIPAL Introduzca su Opci6n => 8 - Si s e pulsa la tecla E aparecerá un Uensaje d a Avuda el cual le recordará que es posible graficar un intervalo de datos específico, y que son graficadoa el doble de coeficientes calculados. Eligiendo cualquiera de las opciones, se mostrar4 & gráfica y esDerará QUB pulse una tecla para continuar, entonces se preguntará: De- grafiear un intervalo de datos ospecíficzo (s/n1 1 A l contestar afirmativamente ( ' s t o ' S I ) , I s permitirá ver parte de la gráfica mho claramente, ya que el intervalo específico se graficará en todo el monitor, aumentánáoso la escala. Si contesta negativamente, se retornar& al IMnQ & Graficar , donde se podrá elegir otra gráfica o el Menú Principal. 20 Si contestó afirmativamente se le pedirán los siguientes datos acerca del intervalo de datos a gráficar: GRAFICADOR X VS. Y -- C A 3 De a datos, seleccione el intervalo e n X T quo desea graficar. 50 A partir dst dato X = ??? 125 Hasta el dato X = ??? El dato 'i' a partir del cual 6 9 graficará, será mayor o igual a cero, y menor o igual que m-3, O <= i <= ni-3. Y el dato 'j' hasta el cual se graficara, será mayor o igual a i+3 y menor o igual a m, i+3 <= f <= m. En caso contrario aparecerán uaeneajes de error, indicando loa límites permitidos. Después de introducir correctamente loe límite. del intervalo a graficar, se moetrará la gráfica correopondiente a una nueva escala. g & w , Cada vez uue 88 termine d a araficaf, m ~ pulse unatecla, y volverá a preguntar e l desea graficar un intervalo de datos específico. 4 -- IMPRIME RESULTADOS Permite al usuario imprimir los coeficientes de: Transformada Seno, Transformada Coseno, Magnitud y Fase. Se mostrará el siguiente Msnñ se elegirá la opción deseada. 21 Imurima ??ecru1tado8, y --Ecanual Operativa CAST C A S T 1 2 3 4 5 Q ----- -- -- - TRANSFORMADA SENO y COSENO IMPRIME COEFICIENTES W IMPRIME TRANSFORMADA SENO IMPRIME TRANSFORMADA COSENO IMPRIME MAGNITUD IMPRIME FASE MENU PRINCIPAL Introduzca su Opcibn => - Una vez pulsada la opción, se indicarir en el monitor el nombre de los Coeficientes a imprimir, y preguntará: ¿ E s t á lista l a impresora t d n l P Esto le permite al usuario poner en línea la impresora y/o colocar el papel en la misma, cuando est6 listo contestar afirmativamente ( Is' o ' 3 ' 1 y se imprimirán todos los coeficientes de la opción elegida. Al terminar de mandar a imprimir los coeficientes o si se contestó negativamente, retornar6 al Mend d e I m D r i m Rm8u1 tadoq. 5 -- LEE/ESCRIBE ARCHIVO3 Permite al usuario leer o escribir archivos de datos, con los coeficientes de Onda, Transformada Seno, Transformada Coseno , Magnitud , Faso y u n archivo general con loa coeficientes de: Transformada Seno, Transformada Coseno, Magnitud y Fase. 22 . Uanuai Ouerativo CAST Antes de mostrar las opciones de leer y escribir archivos, se mostrará u n mensaje de Ayuda, indicando que para leer o escribir los coeficientes, se dar4 un nombre válido d a archivo ( 8 caracteres como máximo, y empezando con letra 1, sin asignar niauna EXTENSION, ya que el programa CAST las asigna de la manera siguiente: Archivo Archivo Archivo Archivo Archivo Archivo con con con con con con coeficientes de onda U. coef. de Transformada Seno. coef. de Transformada Coseno. coeficientes de Magnitud. coeficientes de Fase. coef. de Transf. Seno, Coseno Magnitud y Fase. . ' nombre ' COE ' nombre ' .SEN 'nombre'.COS ' nombre' .MAG ' nombre ' FA3 'nombre'.GRL . Este arupo d e a r c h i v o s ocupan para un solo cálculo, un tamaño fijo de 9716 bytes; es responsabilidad del usuario garantizar que exista en el disco espacio libre suficiente. Pulsando E S se puede ver el Mensaje d e fivuda; pulsar cualquier tecla para continuar. Cuando NO HAY DATOS DISPONIBLES , es decir que ni se hen .introducido datos en la opci6n 1 del Meno PrinciDal, ni &BOha leído un grupo d e archivos, no se podrán escribir archivos. El programa muestra el Men6 d e Leer y Eecribir Archivor y se elige una d e las dos operaciones: C A S T - TRANSFORMADA SENO y COSENO 1 --- 2 O -- LEE ARCHIVO3 ESCRIBE ARCHIVO3 RENU PRINCIPAL Introduzca au Opcibn => - Al elegir la opción 1 correspondiente a ices Archivo* se pedirá e1 nombre que identifica al grupo de archivos , y el tipo de archivo. 23 ... a C A S T --- L O O I L S C ~ S ~ O nrchivos... Lectura de Datos de Disco Cual es el nombra del archiva de datos: Tipo binario Tipo hexadecimal Tipo ascii c 11 C23 C31 - Teclee s u epci16n : Si fué posible leer todo e l grupo d A archivos, regresará al MenQ de Leer y Escribir Archivos , donde se puede pasar Recuerde que el tino deberá ser el mismo, al Meno Principal cuando se leen y cuando se escriben los archivos. . Otro ejemplo es leer el grupo de archivo8 de nombre: ejsm~l02, de tipo I, y así ver sus coeficientes, imprimirlos o graficarlos. Si l a oDción 2 correspondiente a Escribe Archivo8 es elegida se pedirá el nombre que identifica al grupo de archivos, y el t i p o de archivo. C A S T --- Escritura de Datos en Disco C u a l es el nmnbre del arohivo de datort Tipo binnrio Tipo hexadecimal Tipo ascii c 11 C23 133 Teclee su opción : 24 .. - - Uanuai Operativo CAST ... 8 L o o i L m c r l C o Arcktvoi... Despues de proporcionar nombre ( S I N EXTENSION) y tipo de archivos, aparecerá el siguiente mensaje: AVISO: Si ya existen archivos con el nombre serán borrados. ¿ Son correctos nombre y tipo Cs/nl 7 A l abrir los archivos con el nombre dado por el ususario , el programa borrará los que existan con igual mombre y extensi6n (de acuerdo a la lista de la pag.10). Si tiene alguna duda o desea cambiar nombre, conteste ; regresando al Men6 d a Legr y negativamente ( In' o ' N ' i Escribir Archivos sin escribir archivos, ni alterar los ya existentes. Si contest6 afirmativamente, se escribirán los archivos correspondientes , y s 6 1 0 si fue posible escribir todo u r w o dqt archivos , regresará al Men6 de Leer y Escribir Archivos, donde se puede pasar al Men6 Principal y así vor los coeficientes, graficarlos o imprimirlos. V ALTERNATIVAS Para ciertas aplicaciones puede ser nesesario efectuar una comparaci6n de las grdficas de la Transformada Seno con la Transformada Coseno, para ello el programa CAST genera u n archivo con: los coeficientes de ambas transformadas , la magnitud y la fase, esto lo efectQa en la opción 2 do1 d A LeoíEecribe &chí VOS. Otro programa complerasntario es el p r o g r a m graficardor e s posible ver las dos grhficas simult6noaaiente ( Transformada Seno y Transformada Cosono 1 , para poder compararlas. GRAPICA, modiante el cual Para e l l o basta correr el programa ORAPICA el c u a l tiono una gran similitud en su operacian con el graficador dol programa CAST , sólo se tiene que introducir el nombre dol archivo con la EXTENSION : .GRL ; e s decir por ejemplo : " EJEMPL02.GRL " Y a continuación introducir loa siguientes datos: . 25 .. Manual Operativo CAST --- x GRAFICADOX vs. Y Cual es el nombre del archivo de datos: Tipo binario Tipo hexadecimal Tipo ascii e jemp 1 02. g r 1 c 11 121 131 Teclee su opción : 1 _. Los datos se almacenarán en la 300 NP nuestras = -NQ Canal -NQ Tabla 2 1 El nomero de muestras siempre debe ser 300, el número de canales es 2 y el de tabla 1 ; ya que e6 el tamaño de lo6 arreglos de los datos, GRAFICA obtendra del archivo 0 1 nQmero de coeficientes W y coeficientes de las Tranuformadau Seno y Coseno. Se pueden graficar intervalos especificos, como en CAST, pero 6610 si se elige graficar cada uno de loo canales por oeparado. Tambi9n es posible ver las cuatro gráficas (Seno, Correno ,Magnitud y Fase) simultanea~aente,aunque por lo quo cada una representa , no sea una comparación muy válidas sin embargo, ai asi se desea s 6 1 0 tiene correr el programa G W I C A e intoducir los datos como el ejemplo anterior , cambiando exclusivamente el NQ Canal , igual a cuatro ( uno por cada gráfica), como se muestra a continuación: 300 4 1 HQ lluestras = #n Canal NQ Tabla --- Las siguientes cuatro páginas muestran los coeficientes de onda W, Transformada Seno, Transformada Coueno, Magnitud y Fase impresos mediante el programa CAST , en su Menú d 3 J m D r i m Resultados. 26 P r o y r a m a CAST TABLA - T r a n s f o r m a d a C o s e n o y Seno DE C O E F I C I E N T E S W TRANSFORMADA SENO S C11= C).(XKK) C C a l = 2.5569 S C31= 5.1106 S C41= 7.6578 S C 5 3 - 10.1952 S C 6 3 - 12.7195 S C71= 15.2272 S C83= 17.7147 S C97= 20.1785 S C103= 22.6148 S C113= 25.0197 C C121= 27.3892 S C131= 29.7190 S C141= 32.0048 S C l S l = 34.2420 S C161= 36.4259 S C173= 38.5517 S C187= 40.6142 S C191= 42.6084 S C 2 0 3 = 44.5286 S C213= 46.3696 S C 2 2 7 = 48.1256 S C231= 49.7908 S C241= 51.3594 S C251= 52.8254 S C261= 54.1828 S C271= 55.4255 S C281= 56.5476 S C291= 57.9429 S C301= 58.4056 S C311= 59.1298 S C321= 59.7097 c cmi= 6 o . i ~ s~ c341= 60.4i45 s C ~ S I =60.5289 s ~ 3 6 1 -~ 3 . 4 7 7 9 S CS81= 59.8620 S C391= 59.2888 S C371= 6(:).257(3 S C401= 58.5342 S C411= 57.5949 S C421= 56.4686 S C431= 55.15SC) S C441= 53.6468 S C451= 51.9489 S C461= 5O.C)590 S C471= 47.9773 S C481= 45.7047 S C501= 40.5935 S C511= 37.7598 S C491= 43.2427 S C521= 34.7452 S C541= 28.1907 S C553= 24.6612 S C531= 31.5539 S C561= 20.9714 S C571= 17.1283 S CS81= 13.1394 S C591= 9.0126 S C601= 4.7567 S C611= 0.38(39 S C621= -4.1050 S C 6 3 3 = -8.6908 S C641= -13.3655 S C651= -18.1182 S C661= -22.9371 S C671= -27.8103 S Có81= -32.7257 S C691= -37.6706 S C701= -42.6325 S C711= -47.5985 S C721= -52.5555 S C733= -57.4906 S C741= -62.3907 S C751= -67.2429 S C761= -72.0344 S C771= -76.7524 S C781= -81.3844 S C791= -85.9182 S C801= -90.3418 S C811= -94.6438 C C821= -98.8130 S C831= -102.8385 S C841= -106.7103 S C851= -11r1.4187 S C861= -113.9544 S C871= -117.3091 S C883= -120.4748 S C891= -123.4443 S C901= -126.2111 S C911= -128.7693 S C921= -131.1139 S C931= -133.2409 C C941= -135.1454 S C951= -136.8259 S C961= -138.2790 S C971= -139.5057 S C981= -140.5032 S C991= -141.2723 S C1001= -141.8139 S C101'1= -142.1298 S C1021= -i42.2222 S C1031= -142.0940 S C1(>41= -141.7; S C1051= -141.1917 S C1061= -140.4266 S C1071= -139.4595 S C1081= -138.2': S C1091= -136.9436 S C1101= -135.4084 S C1113= -133.6982 S C1121= -131.8: S C1131= -129.7842 S C1141= -127.5973 S C1151= -125.2686 S E l l b ] = -122.8 S C1171= -120.2225 S C1181= -117.5237 S C1191= -114.7202 S C1261= -111.8. S C1211= -108.8377 S C12212 -109.7778 S C1231= -102.6515 S C1241= -99.46: S Cl251= -96.2375 S C1261= -92.9682 S C1271= -89.6496 s C1281= -84.3503 S C1293= -83.0190 S C1301= -79.6840 S C1313= -76.3533 S C1321= -73.0346 S C1331= -69.7354 S C1341= -66.4627 S C1351= -63.2233 S C13631 -60.0235 S C1371= -56.8692 S C1381= -53.7663 S C1391= -50.7198 S C1401= -47.7346 S C1411= -44.8152 S C1421= -41.9656 S C1431= -39.1896 S C1441= -36.4904 S C1451= -33.8710 C C1461= -31.3339 S C1471= -28.8814 S C1481- -26.5153 S C1491= -24,2372 S C1501= -22.0481 S C1511= -19.9491 s C1521= -17.9406 S C1541= -14.1963 E; C1551= -12.4602 S C1531= -16.0230 S C1561= -10.8142 S C1571= -9.2577 S C1981= -7.7898 S C1591= -6.4693 S C1601= -5.1149 S C1611= -3.9051 S Clh2It -2.7785 C C1631= -1.7332 S C1641= -0.7674 S C1651= 0.1209 s C1661= (2.9338 S C1673= 1.6733 S C1681= 2.3417 S C1691= 2.9413 S C1701= 3.4743 S C1721= 4.3500 S C1711= 3.9431 S C1731= 4.6976 S C1741= 4.9881 C C1751= 5.2239 S C1761= 5.4075 S C1771= 5.5413 S C1781= 5.6276 S C1791= 5.6688 S C1803= 5.6673 S C1817= 5.6252 S C1821= 5.3451 S C1841= 5.2792 S C1831= 5.4290 S C1851= 5.0980 S C1871= 4.6496 S C1863= 4.8874 S C1881= 4.3867 s c1891= 4. 10(:)8 S C19(:)1= 3.7939 C C1911= 3.4680 S C1921= 3.1251 s C ~ Y ~ I 2.3960 = S C1937= 2.7671 S C1951= 2.0137 S C 1961= 1.6:?L1 S C1971= 1.2231 S C1981= 0.8185 s C1991= (3.4102 S c 2(:)0I = t j c:ic:tc:> 1 . P r n q r a m a CAST - T ~ a n s f a r m a d a Coseno y Seno T R A NC FOR MA U A C C1SEI'd O C 1.21= 75.9429 C C 3 J = '75.7717 C C41= 75.4863 r3 1::Ll= -j"h.<:jC)<:)(S i-; [6]= 74..573(3 C [71= 73,9429 C C81= -73.1989 C: [ S I = 75.(3863 C [ j . ( j f = 71.3655 C C11]= 7(:1.2756 f: C123= 69.(:)7<:)2 il [9]= 72.3398 C C151= 64.7594 C Cl61= 63.0924 C ClSI=-67.7490 C C141= 66.3122 K; [171= 61.31Cic:) C [181= 59.4133 C C191= 5'7.4(:)32 c: C2(jl= 55.28(:)7 I: C[L1.]= 53.047(j C: [32]= ~tí:).7036 C C233= 4f3.2528 C [ 2 4 3 = 45.6964 [z.J]:: 43.;.(:)3,59 C [ 2 6 ] = 4(:>.2774 [3"7]= 37,4'21(:) [38II= 34.4'714 C [:27] = 31.4328 = 28 3(1)46 C [ S I J I 25.1(")63 C L 3 2 ] = 21.8297 C Cc;31= 18.4841 C [34]= 15,,(")762 C C351-r 11.612'7 C CS6]= 8.1(:1(:)7 I : iJr 7 -1 = ' 4.5478 C C387= i:).T61€3 C C591= -3.6490 C C 4 0 3 = --6.3758 i-; [411= -9.9(:)97 C [42]= -13.,!!413 C C43]= -17.161.0 i-; C443= -2í:).7588 C C451= -24.3246 C C461= -37.8481 C E4711 -31.3187 C E481= -34.7254 C C491= -38.0590 C C 5 0 3 = -41.3072 C C511= -44.4998 C C521= -47.5662 C [:53]= -5(j.4358 C [5L$]= -53.3382 C C55]= -55.9íj32 C [563= -56.4211 C C 5 - 7 3 1 -60.7818 C C 5 8 3 = --62.4763 C C 5 9 7 = -64.995h C CbOI= -66.8312 C C611= -L8.475(3 C C621= -69.9196 C C631= -71.1580 C C641= -72.1839 [' c C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C [:z(j] <1 C651= -72.9916 c C661= -73.5759 c C671= -'73.9324 c C681= -74.0576 C693= -73.9484 C C703= -73.6026 C C711= -73.0196 C C721= -72.1967 C731= -71.1360 C C741= -69.8378 C C751= -68.3038 C C761= -66.5366 C771= -64.5394 C C781= -62.3163 C C791= -59.8721 C C801= -57.2125 C811= -54.3435 C C821= -51.2723 C C831= -48.0(:)64 C C841= -44.5541 C851= -40.9241 C C861= -37.1259 C C871= -33.1694 C E881= -29.0649 C891= -24.8232 C C9(31= -20.4555 C C911= -15.9733 C C921= -11.3883 C931= -6.7127 C C941= -1.9586 C C953= 2.8616 C C961= 7.7356 C971= 12.6508 C C981= 17.5947 C C991= 22.5551 C C1001= 27.5197 Ci011= 32.4763 C C1021= 37.4130 C C1031= 42.3182 C C1041= 47.1806 C1(351= 51.9890 C C1(:)61= 56.7329 C C1071= 61,41:)2(3 C C1081= 65.9865 C1(:)91= 70.4770 C C11Cil= 74.8647 C C1111= 79.1412 C C1121= 83.2988 C1131= 87.3301 C C1141= 91.2286 C C1151= 94.9881 C C1161= 98.6032 C1171= 102.(:)690 C C1181= 105.3811 C C1191= 108.5359 C C1201= 111.5303 C1211= 114.3619 C C1221= 117.0287 C C1231= 119.5295 C C1241= 121.8634 C1251= 124.0302 C C1261= 126.C1304 C C1271= 127.8647 C C1281= 129.5344 [1291= 131.0414 C C1301= 132.3880 C C1311= 133.5768 C C1321= 134.61(:)8 C1.331= 135.4936 C C1343= 136.2289 C C 1 3 5 3 = 136.8208 C i1361= 137.2738 L1373= 137.5924 C C1381= 137.7816 C C1391= 137.8463 C C14(31= 137.7920 C1411= 137.6239 C C1421= 137.3477 C C1431= 136.9689 C C1441= 136.4931 C1451= 135.9262 C C1461= 135.2739 C C1471= 134.5418 C C1481= 133.7359 C1491= 132.8616 C C1501= 131.9247 C C1511= 130.9307 C C1521= 129.8850 C1531= 128.7930 C C1541= 127.6599 C C1551= 126.4908 C C1561= 125.2906 C1571= 124.0642 C C1581= 122.8161 C C1591= 121.5508 C C1661= 120.2726 C1611= 118.9857 C C1621= 117.6939 C C1631= 116.4011 C C1641= 115.11(38 C1651= 113.8264 C C1661= 112.5511 C C1671= 111,2880 C C1681= 110.04OrJ C1691= 108.8097 C C1701= 107.5997 C [1711= 106.4123 C C1721= 105.2448 C1731= 104.1141 C C1741= 103.0074 C C1751= 101.9312 C C1761= 100.8872 C1771= 99.8770 C C1781= 98.9019 C C1791= 97.9632 C E1801= 97,0623 C1811= 96.1995 C C1821= 95.3765 C C1831= 94.5940 C C1841= 93.8527 C1851= 93.1534 C C1861= 911.4967 C C1871= 91.8832 C C1881= 91.3133 C1891= 90.7875 C C1901= 90.3(:)63 C C1911= 89.8700 C E1921= 89.4788 C1931= 89.1331 C C1941= 88.8330 C C1951= 88.5788 C C1961= 88.3706 C1.971= 88.2085 C C1981= 88.(:1927 C C1991= 88.0232 C [ 200 ]= 88 (:@(:I(:) . Programa CAST COEFICIENTES A A A A A A A A FI A A A A A A A A A A A A A A A A A A A A A A A A A A Ft A A R CS A A A A A A A A A A - Transformada Coseno y Seno DE MAGNITUD A C21= 75.986 A C31= 7S.944 A C41= 75.8'74 E l l = 76.CXiO A C 6 3 = 75.649 A C71= 75.494 A C81= 75.312 C 5 3 = 75.775 A El(:)'?= 74.863 A C111= 74.597 A C121= 74.3(32 CY]= 75.101 A E14.1= 73.632 A Cl51= 73.255 A C161= 72.853 C131= 73.981 A C183= 71.968 A C191= 71.488 A C201= 70.984 C171= 72.423 C213= 70.457 A EX?]= 69.9O7 A C231= 69,336 A C243= 68.746 A C 2 6 3 = 67.513 A C271= 66.875 A C281= 66.226 C251= 60.137 6 [3í:i]=: 64.9Ci5 A [31]= 64.239 A [7;2]= 63.575 [ 2 9 3 = 65.568 C J Z ~ =62.916 A C347= 62.267 A c351= 61.633 A C363= 61.018 L371= 60.428 A C383= 5 9 . 8 7 0 A C391= 59.348 A C4(31= 58.870 L4¶.1= 58.441 A C421= 58.069 A C431= 57.761 A C441= 57.523 c451= 57.3632 A c461= 57.284 a C477= 57.295 A c481= 57.400 t491= 57.606 A C501= 57.915 A C511= 58.331 A C521= 58.856 C531= 59.493 A C541= 60.241 A C551= 61.101 A C561= 62.071 C571= 63.149 A C581= 64.532 A C591= 65.617 A C6C)I= 67.00C) C611= 68.476 A C621= 70.(:)40 A C631= 71.687 A C641= 73.411 C651= 75.207 A C667= 77.(:)68 A C671= 78.990 A C681= 80.966 C691= 82.991 A C701= 85.058 A C711= 87.163 A C721= 89.3CK) C731= 91.463 A C741= 93.648 A C751= 95.849 A C761= 98.062 C771= 100.281 A C781= 102.502 A C791= 104.722 A C8C)l= 106.934 C811= 109.136 A C821= 111.323 A C831= 113.492 A C841= 115.638 C853= 117.759 A C861= 119.850 A C871= 121.908 A C881= 123.931 C891= 125.915 A C901= 127.838 A C911= 129.756 A C921= 131.608 C931= 133.409 A C941= 135.16C) A C951= 136.856 A C961= 138.496 C971= 14ci.078 A C983= 141.601 A C991= 143.061 A C1001= 144.459 C1011= 145.793 A C1021= 147.061 A C1031= 148.262 A C1041= 149.395 C1051= 150.459 A C1061= 151.454 A C1071= 152.378 A C1081= 153.232 C1091= 154.015 A C1101= 154.726 A C1111= 155.366 A C1121= 155.934 C1131= 156,430 A C1141= 156.856 A C1151= 157.210 A Cll61= 157.494 C1171= 157.707 A C1181= 157.851 A C1191= 157.926 A C1201= 157.954 C1211= 157.874 A C1221= 157.749 A C1231= 157.598 A C1241= 157.304 C1251= 156.988 A C1261= 156.610 A C1271= 156.173 A C1281= 155.678 C1291= 155.126 A C1301= 154.519 A C1311= 153.859 A C1321= 153.147 C1331= 152.386 A C1343= 151.577 A C1351= 150.722 A C1361= 149.823 C1371= 148.882 A C1381= 147.901 A C1391= 146.881 A C1401= 145.826 C1413= 144.737 A C1421= 143.616 A C1431= 142.465 A C1441= 141.287 C1451= 140.083 A C1461= 138.855 A C1471= 137.607 A C1481= 136.339 C1491= 135.054 A E1501= 133.754 A C1511= 132.442 A C1521= 131.í18 C1531= 129.786 A C1541= 128.447 A C1551= 127.103 A C1561= 125.756 Ci571= 124.409 A C1581= 123.063 A C1591= 121.720 A C16(:)1= 120.381 C1611= 119.050 A C1621= 117.727 A C1631= 116.414 A C1641= 115.113 C1651= 113.826 A C1661= 112.555 A C1671= 111.301 A Cl681= 110.065 C1691= 108.849 A C1701= 107.656 A Cl711= 106.485 c\ C17211= 105.340 C1731= 104.220 A E1741= 103.128 A C1751= 102.065 A C1761= 101.032 C1771-1 1OC).031 A C178J= 99.062 67 C1791= 98.127 A C1801= 97.227 C1811= 96.364 A C1821= 95.538 A C1831= 94.750 A C1841- 94.001 C1851= 93.293 A C1861= 92.626 A C1871= 92.(9(:)1 A C18€31= 91.419 C1891= 90.880 A C19(:)1= 90.336 A C1911= 89.937 A C1923= 89.533 C1931= 89.176 A C1941= 88.865 A C1951= 88.602 A C1961= 88.385 C1971= 88.217 A C19RI= 88.097 A C1991= 88.024 A C2001= 88.0(:)(:) P r o y r a m a CAST (3.307 - Transformada Coseno y Seno 0.342 F C121= F C161= F C151= 0.486 0.639 F C201= (1) 6(33 F C 191= F C24:I= 0.759 F c231= 0.8(:)1 F' C281= F C271= (:).Y77 F [263= (j.932 1.169 F C 3 2 3 = 1.119 F C311= F [3(j] z ~ F C351= 1.381 F C361= F ~ 3 4 3 1.326 1.615 F C401= F C383= 1 . 5 5 9 F c391= 1.872 F C441= f= [423= 1.806 F C431= F C481= F C471= 2.149 F C4hl= 2.078 ~ ~ 4 3 F8 C921= F C511= c) F c5i33= 2.365 F C561= F C551= 2 . 7 2 6 F C54I= 2.655 F C601= 2.936 F C591= 3.0ij4 F C5813.263 F C641= 3.2tjO F [&I= F C623= F C681= F C661= 3.444 F C671= 3.501 F C721= F C711= 3.719 F C 70 1= 3.667 3.919 F C761= 3.871 F c741= F t751= F C8Csl= F C791= 4.104 F C781= 4.059 4.276 F C841= F C831= F C821= 4.234 F C881= F C871= 4.437 F C861= 4.397 F C921= F C913= 4.589 F C ~ O I = 4.552 F C961= 4.698 F C991= 4.733 F [941= F C981= 4.837 F C993= 4.871 F C1001= 4.904 F C1041= 5 (1134 F C1021= 4.970 F C1031= 5.002 F C1081= 5.158 F C1061= 5.096 F C1071= 5.127 F C1121= 5.276 F CllC)I= 5.217 F iCllll= 5.247 F C1161= 5.389 F C1141= 5.333 F C1151= 5.361 F C1201= 5.496 F i1193= 5.470 F Cl181= 5.443 F C1241= 5.599 F Cl221= 5.548. F C1231= 5.574 F C1283= 5.695 F C1271= 5.672 F C1261= 5.648 F C1321= 5.786 F C1301= 5.741 F C1311= 5.764 F C1361= 5.871 F C1353= 5.850 F C1341= 5.829 F Cl4(jl= 5 950 F L1391= 5.931 F C1381= 5.911 F C1441= 6.022 F C1421= 5 987 F C1433= 6.005 F t1481= 6.087 F C1473= 6.072 F C1461= 6.058 F C1521= 6.146 F C1501= 6.118 F C1511= 6.132 F C1561= 6.197 F C1541= 6.172 F C1591= 6.185 F C1601= 6.241 F C1591= 6.231 F C1581= 6.220 F E1641= 6 277 6.268 F C1621= 6.260 F C1631= F C1681= 6.304 F C1661= 6.291 F C1671= 6.298 F C1701= 6.315 F C1721= 6.324 F C1711= 6.320 F C1743= 6.332 F f1753= 6.334 F C1761= 6.337 F C1801= 6.342 F C1781= 6.540 F C1791= 6.341 F C1841= 6.339 F C1821= 6.341 F C18316.341 F C1881= 6.331 F CiBáI= 6.336 F C1871= 6.334 F Cl921= 6.318 F C1901= 6.325 F C1911= 6.322 F C1961= 6 3(22 F C1951= 6.306 F C1941= 6.310 F C2003= 6.283 F C1991= 6.288 F C1981= 6.292 F C111= 0.45(:) . . F C25]= F C291= F [3S]= F [37]= F C411= F C451= F c493= F C531= )1 : F C¿iI= F C65J= F C691= 3.136 s. 385 F c573= F C731= F C771= F C811= F F F F F F F F F i= F F F F F F F F F F F F F F F F F F F --I C851= C891= C931= C971= ClC)lI= Cl051= C1091= Cll31= C1171= c1211= C1251= El291= C1331= C1371= C1411= C1451= C1491= C1531= C1571= C1611= C1651= C1691= C1731= C1771= C1811= C1851= C1893= C1931= C1971= --- 887 1 * (371 1.275 1.495 1.741 3 (I: ( jy 2 * 293 2.583 2.867 . 3.613 3.821 4 (2 13 4.191 4.357 4.514 4.662 4.803 4 "937 5.065 5.188 5. SO5 5.416 5.523 5.623 5.718 5.808 5.891 5.Yb8 6.039 6.103 6.159 6.209 6.2SO 6.284 6.310 6.528 6.339 6.342 6.338 6.328 6.314 6.297 . . . . . . nn REFERENCIA TECNICA DEL PROGRAMA CAST SECUENCIA Y DESCRIPCION DE SUBRUTINAS complejo suma(a,b) Funciones para operaciones aritmhticas con n h e r o s complejos. complejo resta(a,b) comp le jo mu 1 t ( a,b 1 c omp 1 e jo d i vi de ( a, b 1 col ores ( 1 Asigna los colores de la pantalla. margen( 1 Enmarca la ventana que se ecuentra activa. ventana( 1 Abre una ventana en todo el monitor. meneaje(cadena,largo) Abre una ventana sobre el 'cadona' y asigna un carater del teclado a la var. 'tecla'; permite mostrar los diferentes mensajes durante la ejecuci6n del programa. ayuda(nivel1 Mostrará un atenlaaje de acuerdo al nivml de ayuda; presionando ESC apareoon las ayudas. pantalla( 1 Inicializa el modo gráfico. Encuentra l o o valores máximo y mínimo de Y, para calcular l a escala. Traza 108 ejes XY grbfica. escalaxyi 1 Obtine las escala en pixoleo de l o a ejes X y Y para poder graficar c/u de los puntos. dibuja( 1 Grafica un punto, traza una línea con el punto anterior y otra con el eje X . 31 \ \ 1 ""Y , ejesí 1 y el nombre de l a ReferarrcLa Técnica CAST amplifica( 1 Graficar6 un intervalo de datos específico, ampliando la escala escala. rutina-grafica( 1 Secuencia de llamadas a subrutinas para graf icar. inicializa( 1 Inicializa variables y arreglos. toma-datos( 1 Pide datos al usuario para calcular transformadas seno y coseno. transformada0 CALCULA L A TRANSFORMADA SENO Y COSENO. mcoef ( 1 Muestra l o s coeficientes W . m-tseno() Muestra los valores de la transfomada seno. mtcoseno( 1 Muestra los valores de la transf. coseno. m a m p 1 i tud ( 1 Muestra los valores de la amplitud. mfase( 1 Muestra los valores de la fase. impcoef( 1 Imprium los coeficientes W. imp-tseno( 1 Imprime los valores de l a tranofomada seno. imp-tcoseno( 1 I m p r i m loo valores de la transf. coseno. impamplitud( 1 Imprime los valores de la amplitud. i mp-f ase ( 1 Imprime los valores de la fase. leearchivo( 1 Lso de1 disco, archivo con coeficientes de onda, transforsadas, magnitud y fase. escribearchivoí 1 Eaoribe en discro un grupo de archivos con coofioientes de onda, transformadas, magnitud, Pase y uno general con todos. menu( 1 Menu principal del programa. 32 .. .-" Referencia Técnica CAST. muestra( 1 men^ para mostrar los datos en el monitor. imprime( Men6 para imprimir los datos. graf ica( 1 MenQ para graficar los datos. archi vos( h a y d a t o s MtmQ para leer o escribir archivos en disco. main( 1 c archopen=calculado=FALSO; i n ic i o=C IERTO ; colores( 1: inicializa( 1; do I e jecuta=menu( 1 ; switch(ejecuta) i case ' 1 ' : torna-datos( ; transformada( 1; ca lcu lado=C IERTO ; break; case '2': if (calculado) m u e s t r a 0 ; break; case ' 3 ' : if (calculado) g r a f i c a o ; break; case '4': if (calculado) impriaae0; break; case '5': if (!calculado) inicio = CIERTO; archivos(Lcalcu1ado); break; 1 (?calculado) 6cb ( (eJecuta!='O')&&(ejecuta!n") m n 6 a j e ( * N O HAY DATOS DISPONíBLESw,24); inicio = FALSO; 3 while (ejecuta!='O'); ventana( 1;clrscr( 1; 1 Fin de rutina principal main(). if ( 1 DEFINICION DE VARIABLES Y RUTINA PARA CALCULAR LAS TRANSFORMADAS COSENO Y SENO. W ... ,am); Onda (aO, al, a2, = Longitud de W = -1; LT = Longitud de las Transformadas de Senos y Cosenosi TCOS = Transformada Coseno; l'SIN = Transformada Seno; AMPLITUD = Coeficientes de Amplitud; FASE = Coeficientes de Fase; LW =t 33 .. 1 Referencia Tbcnica CAST COMIENZA dang=PI/( It-1); angulo=O; PARA (i=l;i<=lt;i+f) C x . re=cos(angulo) ; x. im=sin(angulo) : a.re=a.irn=O; PARA (ii=í;ii<=lw;ii++) j=lw-ii+l; a= x/a + wC jl ; Polyev C 1 Fin d e polyev tcosc il=a.re; tsenCil=a.im; angu¡o=angulo+dang; 1 Polar PARA (i=l;i<=lt;i++) { amplitudCil=sqrt( tcosCi3*tcosCi3+tsenCil~tsenCil 1; SI (tsenCiI<O) € SI (tcosCiI<O) faae[il=atan(tsenCil/tcosCíl)-PI; SI (tcosCil==O) faseCil=-PI/2; SI (tcosCiI>O) faseCi3=atan(tsenCil/tcosCil~: 1 OTRO SI (tsenCil==O) € SI (tcosCil<O) faseCil-PI; SI (tcosCil==O) faseCiI=O; SI (tcoaiil>O) faseCi3~atan~t~anCll/tco.[il~; 3 OTRO SI (tsenCiI>O) C S I (tcosCIl<O) faseCIl=atan(tsenCil/tcosCil~+PI; SI (tcoaCll==O) fasoCiI=P1/2; SI (tcosC 13 >O 1 faso[ i ]=atan( tsenC i í/tcosf i 1 ) 1 3 pj=o; PARA (i=2;i<=lt;i++) SI 1 3 ( Fin do polar Drum € (abs(faseCil+pj-faaeCI-ll)-PI) > O ) < SI ( (faseCil+pj-faso~l-il) < O ) pj=pj+PI*2; OTRO SI ( (fa~otll+pj-fasotl-i3) > O ) pj=pj-P1+2; fasetil=faseCil+pj; Fin d e drum TERM INA 34 . ; * Programa para calcular las Transformadas de Seno y Coseno a partir de los coeficientes de una onda. CAST W = LW LT = ... Onda (aO, al, a2, ,am); Longitud de W = m+l; Longitud de las Transformadas de Senos y Cosenos; = TCOS TSIN AMPLITUD FASE i nc 1 ude include i nc 1 ude include i nc 1 ude include include i nc lude = = = = Transformada Transformada Coeficientes Coeficientes Coseno; Seno; de Amplitud; de Fase; <stdlib.h> <stdio. h > <math. h > <mem.h > (conio. h > <string.h> (ctype. h > <graphics.h > iefine iefine iefine iofine NUMDIVX 10 NUMDIVY 10 CIERTO 1 FALSO O iefine iefine ief ine iefine iefine M A X 21 /* /* nhmero de divisiones del eje X n\limero de divisiones del eje Y */ */ HAXCOEF 301 HAXDATO 6 10 P I 3.141592654 e s p e r a 0 while(!(kbhitO)); g e t c h 0 ; ypodef struct {float re, im;) complejo; /* definici6n de NQmero Complejo */ -4+?Jo x,a; loat w C W A X l , t c o s ~ H A X C O E F 3 , t s e n ~ H A X C O ~ F l , ~ ~ l i t u ~ ~ H A X C O E F l , f a s e C ~ X C O E F l ; loat dang,angulo; nt lw,lt; loat datos[MAXDATOI; nt a r c h o p e n ,c lase ; nt mi .ara-escala ; nt nucadatos; nt i ni x, f i nx; 1 oat i niy ,f i ny ; loat unidadx,unidady; 1 oat off set ; nt m x x , mxy ; nt xi, x2; nt yl,y2; nt clarol,obscurol; nt claro2, obscuro2; har hat har har nt /* arreglo donde esthn l o a datos a graficar /* /* /* nuluro tie dato8 a graficar /* /* /* /* /* */ delimitan el rango en X y Y de los puntos que se graficarhn corrimiento en pixeles del e j e X */ */ */ delimitan el area disponible para trazar la grhfica. y(x1,yl) origen(x1,yl) x(x2,y2) colores para Menh Principal y Ayudas conjunto[61=~'1','2','3~,~4','0','5'~; letrerosC53 C 101 ; / * nombre de la grhfica * / almacenCS603; / * alaracena el área de ventana; máximo tecla; / * 8 renglones o 80 x 7 caracteres. inicio; */ */ */ */ */ */ */ Implejo suna(a,b) omplejo *a,*b; complejo c; c.re=a->re+b->re; c . im=a->im+b->im; return c; /* fin de suma complejos */ mplejo resta(a,b) omplejo *a,*b; complejo c; c.re=a->re-b->re; c.im=a->im-b->im; return c; /* fin de resta complejos */ ,mple jo mu1 t í a, b 1 :omplejo *a,*b; t complejo c; c.re=(a->re*b->re)-(a->im*b->im~; c. i m= ( a-> re*b-> i m 1+ ( a-> i m*b-> re 1 ; rwturn c; /* */ fin de multiplica complejos xnplejo divide(a,b) :omplejo *a,*b; c complejo c; float den; /* denominador coman */ den=b->re*b->re+b->im*b->im; if (den!=O) E c.re=(a->re*b->re+a->im)/den; c.im=(b->re*a->im-b->im~a->re)/den; 3 else { c.re=O; return c; c.im=O; 3 olores( 1 har color; clrscr( 1igotoxy(21,lS) ; cputs("¿ USARA MONITOR A COLOR Csínl ? " I ; if ((color=='s' : :(color=='J' 11 { clarol=l4; /* amarillo * / obscurol=l ; /* azul * / claro2=11; / * cian claro * / obscuro2=4 ; / * rojo * / c . XI---- ac: colorogotch0; else C clarol=lS; obscuro2-0; c laro2=2; obscuro2=4; 1 I /* /* /* /* /* blanco * / negro * / verde rojo fin de colores */ */ */ /* ioid margen( 1 enmarca la ventana que se ecuentra activa */ etruct text-info r; int i,alto,largo; gettextinfo(fr1; alto=r.winbottom-r.wintop; for(i=l;i<largo;i++) putch(Oxcd1; insline0; for(i=l;i<largo;i++) putch(0xcd); for(i=2;i<alto;i++i€ I largo=r.winright-r.winleft; gotoxy( l,alto+l); putch(OxcB1; putch(0xbc); gotoxy( 1,alto-1); putch(Oxc9i ; gotoxy( 1,li ; putch(0xbb); pu tc h ( O xba ; gotoxy(largo+l,ii; putch ( O xba 1;putch ( Oxba i ; gotoxy(largo+l,altoi; gotoxy(2,2) ; putch(0xbai ; I/* fin de margen */ /* /* ventana( i € clrscr0; window(1,1,80,25); abre una ventana del tamaño de todo e1 monitor, y l a enmarca */ */ textbackground(claro2+BLíNK) ; textcolor (obscuro21; clrscr( i ; margen( i ; 1 /* fin do ventana */ menaaje(cadona,largoi char *cadena; int largo: c st ruc t text-i n fo a ; struct text-info n; int x,y; /* abre una ventana sobre el 'cadena' y asigna * / vir. 'tecla' */ I * un carater del tsol-e;doEL l a /* /* 'a' datos de ventana actual */ 'e' dato8 de ventana nuova, por abrir get t e x t f nfoí La i ; x=((a.winright-a.winleft)-(largo+3))/2: x=a wi n lef t+x; y=((a.winbottom-a.wintopi-3)/2; y=a.wintop+y; . n.winleft=x; n wi nr i gh t=x+ 1 ar go+3 ; . n.wintop=y; n.winbottcxwy+2; gettext(n.winleft,n.wintop,n.winright,n.winbotto~,al~cen); window(n.winleft,n.wintop,n.winright,n.winbotto~i; textbackground( c larol 1; textcolor (obscuroíi ; clrocr( i ; margen( ; gotoxy(3,2i; cputa(cadena1; tecla=getch( 1 ; puttext(n.winleft,n.wintop,n.winright,n.winbottom,al~cen): textbackground(claro2+BLINKi; textcolor(obscuro2); window(a.winleft,a.wintop,a.winright,4.winrig~t,a.winbottom): */ yuda( nivel nt nivel; /* /* struct text-info a; struct text-info n ; i n t x,y,largo,ancho,j; 'a' datos de ventana actual * / 'e' datos de ventana nueva, por abrir */ largo=55 ; ancho=3 ; gettext i rifo( fa) ; x=((a.winright-a.winleft)-ílargo+3))/2; x=a.winleft+x; y = ( (a.winbottom-a.wintop)-(ancho+l) ) / 2 ; y=a.wintop+y; n. winleft=x; n.wintop=y; n w i n r i g h t =x+ 1 argo+3 ; n.winbottom=y+ancho+l; gettext(n.winleft,n.wintop,n.winright,n.winbottom,almacen); window(n.winleft,n.wintop,n.winright,n.winbottom); textcolor (obscuro11 ; text bac kg r ound ( c 1 aro 1 1; clrscr( 1; margen( 1 ; . switch (nivel) I case O: /* j=2; mostrará mensaje deacuerdo al nivel de ayuda /* menu principal */ */ gotoxy(3,j++);cputs("Si no hay datos disponibles, elija la opción:"); gotoxy(3,j++);cputs("l: Introducir coeficientes de onda W y Transformada."); gotoxy(3,ji; cputs("5: Leer archivos con coef. de onda W y Transformada."); break; menu grarica case 3: j=Zr +/ g o t o x y ( 3 , j + + ) ; c p u t s ( " P a r a cualquier gráfica seleccionada, puede graficar " 1 ; g o t o x y ( 3 , j + + ) ; c p u t s ( " s 6 1 0 una parte de e l l a , eligiendo un intervalo dentro"); gotoxy(3,j++):cput6("de1 rango de datos del eje X , arnpli6ndose l a gr6fica."); tecla=getchO; j=2; /* segundo mensaje de menu grafica * / gotoxy(3,j++);cputs("Al presentar c/u de las gr6ficas el n h e r o de coef. " I : gotoxy(3,~++);cputs("gtaticados es el DOBLE, permitiendo ver el espectro "1; gotoxy(3,j++);cputsí"completo. El nomero de c o e f . permanece sin cambio. "1; break; case 5: j=2; /* menu archivo */ gotoxyí3,j++);cputs("Para leor o oocribir de1 disco l o s coeficientes de onda") gotoxy(3,j++);cputs("tran8formada, magnitud y fase, escriba el nombre del"); gotoxy(3,j++);cputs("grupo de archivos que 108 contengan pero S I N EXTENSION.") break: 1 tecla=getch( 1; puttext(n.winl~ft,n.wintop,n.winright,n.winbottom,almacen); textbackground(claro2+BLINK~; textcolor(obacuro2); wíndow(a.winleft,a.wintop,a.winright,a.winbottom): /* pantalla0 c int graphdriver ; int graphmodo ; char path-driverC3 int error = -1; = "'I inicializa el modo gráfico */ : detectgraph(&graphdriver,&graphmode); initgraph(Egraphdriver,&graphmodo,path-driver); error = graphresulto; if ( e r r o r < O 1 C clrscr(); printf("Error en initgraph : Ws",grapherrormsg(error)); exit(1); 1 cleardevice( ; maxx=getmaxx( 1 ; maxy=getmaxy( 1 ; /* /* /* yl=iS; y2=25; ~1140; x2= 16 ; /* define lo separado que e6tar6n los ejes del marco de la pantalla. /* rectangle(O,O,maxx,maxy); rectangle(2,2,maxx-2,maxy-2); /* 1 fin de pantalla */ */ obtiene el m6ximo de X obtiene el máximo de Y marco del monitor */ */ max-minimo( 1 c int i,negátivo; offsetm0; iniy=O; iniw0; negativo=-1; f i ny=O ; finx=nuadatos/2; /* for (i=inix;i<=finx; i++) I if (finy < datoaíil) finy=datosCil; if ( i n i y > datosEil) iniy=datosCil; 1 if (iniy<O) solo buscara en la mitad /* /* /* obtiene los valores mínimo y máximo para nueva escala. =/ offset=iniy*negativo; finx=numdatos; 1 /* fin de max-mínimo */ e jesi1 { 1 i ne ( xi, y 1 ,xi, maxy-y2 ; 1 i ne( xl-1 ,y 1 ,xi-1 ,maxy-y2+1) ; /* eje y */ line( xl,maxy-y2-offset,maxx-x2,~taxy-y2-offsot~ ; line~xi-l,rraaxy-y2-offset+l,~xx-x2+i,a-y2-off~et+l~: /* eje x */ set text sty le ( DEFAULTFONT, HORI 2-DIR, 1 1; outtextxy(xl-10,6,"Yn); outtextxy(maxx-75,15,letrerosCclaseI~; outtextxy( maxx-12, maxy-of faet-28, " X " 1; 3 -, /* f i n de ejes */ rrn */ */ */ */ */ /* escalaxy( 1 */ obtine la escala en pixeles de loo ejes X y Y E char numeroC33 ; int i,y,xxx,yyy,xPntervalo; float ii,residuo,yintervalo,rangox,rangoy; xxx=maxx-xl-xS; rang ox= f i nx- i n i x ; xi n te r va 1 o=rang ox/NUMD I VX ; if ( xintervalo< 1 ) xi ntervalo=l; un i dadx=rangox/ xxx; /* escala X */ yyy=maxy-yl-y2; rangoy-finy-iniy; yintervalo=rangoy/NUMDIVY; unidady=rangoy/yyy; /* escala Y */ /* un pixel equivale a 'unidady' */ offset=offset/unidady; for í irxintervalo; i<=rangox; i=i+xintervaloi € xxx=i Iunidadx; 1 i ne( xxx+xl ,maxy-y2-of f set,xxx+xl ,maxy-y2-of fset+6 1; strcpy( numero, "1; i toa ( i+i nix,numero, 10 1; outtextxy( xxx+xl-8,maxy-y2-off 8et+lO,numaro) ; 'I 1 for ( i i = y i n t e r v a l o ; i i < = r a n g o y : i i + y i n t e r v a l o ) € yyy=(ii+iniy)/unidady; lin~~xl-2,maxy-y2-yyy-offset,xl+4,~xy-y2-yyy-offs~t~; strcpy( numero, 1; if (yintervalo>=l) € / * escala si Y son enteros y=ii+iniy; residuo=(ii+iniy-y)*íO; if(reriduo>=6) y++; itoa(y,numero,lO); 'I 'I 1 */ else gcvt ( i i+ i ni y,2 ,numero 1; /* escala si Y son decimales outtextxy~4,maxy-y2-yyy-offset-4,nutnero); 1 /* 1 fin de escalaxy */ dibuja( 1 € int i,primero,ultimo; int aax,aay ,bbx,bby ; float auxx,auxy; for(i=O;i<=finx;i++) if(i==inix) € primero=i: i=fi nx; /* /* obtiene el primor eloutonto dentro del rango de x (finx-inix). */ for(i=primero;i<=finx;i++) if(i==finxi E ultimo=i; irfinx; /* /* obtiene el ultimo elemento dentro del rango de X. */ */ 1 1 =/ */ /* obtiene las coordenadas del punto A(aax,aay) , */ primero a graficar auxx=( primero-inix) /unidadx; auxy=datostprimeroi/unidady; aax=auxx+xl ; /* obtiene las coordenadas respecto al monitor aay=maxy-y2-of fset-auxy t circle(aax,aay,2); /* marca el punto A para que sea visible / */ for (i=primero+l;i<=ultimo;i++) C auxx=( i-inix) /unidadx; auxy-datos1 i 3 iunidady; bbx=auxx+xl ; /* line(aax,aay,bbx,bby): circle(bbx,bby,2): /* if( !mismaescala) /* 1 /* aax=bbx; aay-bby ; 1 /* fin de dibuja / * obtiene las coordenadas del punto B(bbx,bbyi */ */ obtiene las coordenada8 respecto al monitor traza una línea entre los puntos A y B marca el punto B para que sea visible /* */ */ line(bbx,maxy-y2-offoet,bbx,bbx,bby); el punto B será el punto A del siguiente trazo */ */ amplifica( 1 € char intervalo,cadenat303,cadena2C3OJ,nu~rot41; int inicio,fin,i,negativo; tecla=getchO; closegraph0; inicio=O; fin=nunuiatos; do C ventana( 1; gotoxy(25,5); cputs("GRAF1CADOR X vs Y C A S T"); gotoxy(38,7); cputa(letroro8tol~~el); window(2,11,78,20); gotoxy( 12,s); cputs("¿ Desea grnficar un intervalo de datos específico (e/ni 7 " i : intervalo=getch( 1; -- if intorvalo=='s' 1 I : (intervalc~='Q'i 1 C clrscr( 1; strcpy(cadena,"&xiiao el dato : " i ; itoa(numdatoe-S,nuaro,lOi; strcat(cad*na,nuuioro); gotoxy(l0,l); printf("De %d datos, solocione el ",numdatos); ; puts( "intervalo en X quo desoa graficar. do C gOtOXy(35,4); CpUt8(" "1; gotoxy(l4,41; cputo("A partír dol dato X ? ? ? "1; scanf("Wd*,&inioio); if (inicio<O) / * O<=inicio<=(nuardatos-2)*/ mensaje( "Minimo el dato: O", 17 1; else if (inicio>(nuardatos-J)) mensalie(cadena,23) ; ( ( 'I ~ I .. :-~~Pniclo>tnumdatos-3)1); '. strcpy(cadena,"Minimo e1 dato : ''1; itoa(inicio+3,numero,lOi; strcattcadena,numeroi ; strcpy(cadena2,"Máximo el dato : " 1; i toa ( numdatos ,numero, 10 1 ; strcat(cadena2,numeroi; 1 while-ttfnialo<0) do c gotoxy( 35,6 1 : gotoxy(l4,6); , ~ . "- ,__.... cputs( 1; cputs("Hasta el dato X = 7 7 1 "1; scanf ( "Xd",&fin 1 ; if (fin<inicio+3) / * inicio<fin<=numdatos mensaje(cadena,Zli; else if (fin>numdatos) mensaje(cadena2,Sl); 1 while ((fin<inicio+3) : :(fin>numdatosii; 'I I' */ negat i voz-1 ; offset=O; finx=fin; f i ny=O ; i ni x=i nic io; i niy=0 : for (i=inix;i<=finx; i++i i if (finy < datoslií) finy-datoslil; if (iniy > datoslil) iniy=datosCil; 1 /* /* /* obtiene los valores minimo y máximo para nueva escala. */ */ */ if iiniy<O) offset=iniy*negativo; pantalla0; escalaxy( 1; dibuja( i ; tecla=getchO; cloregraph0; 3 1 while > /* ( (intervalo == Is' i ! : (intervalo=='S' 1 ) : fin de amplifica */ rutinaarafica0 { maxminimo( i ; pantalla(); ; escalaxy( i dibuja( i ; amplifica0; 1 / * fin de rutinagrafica */ inicializa() { int i ; 1 W' 1 t = O : /* Inicializa Variables y Arreglos for (i=O;i<HAX;i++) wCil=O: for (i=O;i<MAXCOEF;i++) tcosCil=tsenCil=amplitud~il=faseCil=O; a.re=a. im=x.re=x. i w 0 ; "1; 8trCpy(l~ttetO8Cll,"SE" "1; strcpy( letrsrost0l strcpy(ietreroaE23,"COSENO "1; strcpy~lotrerosC31,"MA~NITUD"); atrcpy(letrerosC41,"FASE 1; 1 / * fin de inicializa * / ,'I I' */ -. - -toma-datos ( E .char cadenat303 ,numeroCQI J int i,j,k; _ _ i I inicializa( 1 ; ventana( ; do E gotoxy(23,41; gotoxy(40,71; gotoxy ( 5,7 ; - cputs("C A S T Transformada Coseno y Seno"); cputs(" u); cputs( "El nQmero de coeficientes de la Onda W es = " 1 ; scanf ( "Xd" ,&lw) ; if (lw>=MAXl memaa jis ( ~X&ximo 20 coef i c i en tes. ,231 ; else if (lw<2) mensaje("Mínimo 2 coeficientes.",22); while( (lw<2); : (lw>=MAX)1 ; / * valida que: 2 < lw < MAX * / I' 1 strcpy(cadena,'Mínimo de coeficientes "1; itoa(lw,numero,lO); strcat(cadena,numero); window(4,8,75,23); printf("Escriba los Xd coeficientes de W.",lw); gotoxy ( 2,2 1 ; k=3; j=4; for (i=i;i<=lw;i++) E gotoxy( k , 1 ) ; printf í "WCñdl = ",i ; scanf("Wf",&wCil); if( j==13) E k=k+15; j = 4 ; 1 else j++; ? do E gotoxy(45,15) ; gotoxy(2,lS); 1 - cputst "1; cputs("E1 nomero do coeficiontos do TCOS y TSEW es "1: scanf ( " X d " ,Stlt) 8 if (lt>=MAXCOEF) irwnra)~(~l(aximo 900 coeficientes.",241; else if (lt<lw) wnsaje(cadona,27); whileíílt<lw) ::(lt>=MAXCOEP)); / * valida que l w < = I t < MAXCOEF */ ventana( 1; gotoxy(23,8); gotoxy(21,16); numdatosrlt; 1 /* - cputs("C A S T Transformada Cosono y Seno"); cputs("Gracia8, esporo un moaaonto por favor..."); fin de toma datos /a GRAFICA ---------* / */ transformada( 1 c ------__Variablo /* CALCULA LA " 4 S P O R M A D A D1 SEW0 Y COSER0 c omp 1 e 3o au x ,aux2 ; int i,ii,j; float pj; dang=PI/(lt-1); angulo=O; for (i=l;i<=lt;i++)E x. re=cos (angulo); x. im=sin(angulo) ; I. .--- a.re=a.im=O; for (ii=l;ii<=lw;ii++) C j=lw-ii+l; aux. re=wC jl ; aux. im-O; aux2=mu 1 t í Lx La 1 ; /* A 9 polyev */ */ a=surna(taux2,baux) ; /* 1 f i n de polyev */ tcosCil=a.re; tsenC il=a. im; angulo=angulo+dang; 1 / * polar * / for (i=l;i<=lt;i++) E amplitudCil=sqrt( tcosCi3*tcos~i3+tsenCil*tsenCil 1; if (tsenCiI<O) C i f (tcosCiI<O) f a ~ e E i 3 = a t a . n ~ t s e n C i 3 / t c o s E i 3 ~ - P I ; i f ( tcosC i 1 ==O 1 fase[ i 1 =-PI12 ; i f (tcosCiI>O) faseCil=atan(tsenCil/tcosCil~; 1 else if (tsenCii==O) C if (tcosCil<O) faseCii=-PI; i f ( tcost i ]==O 1 fase[ i 3 =O ; if ( tcosC i 1 > 0 ) fase[ i ]=atan( tsenC i 3 /tcosC i 3 1; 1 else if (tsenCil>O) C if (tcooCii<O) faseCil=atan(tsenCii/tcosCil~+PI; i f ( tcosC i I ==O 1 fase[ i I =P 1/21 if (tcosCil>O) f a s e C i l = a t a n ( t s e n E i l / t c o s [ i l ) ; 1 1 /* f i n de polar */ /* */ pj=o; for (i=2;i<=lt;i++) i if 1 /* rncoef (abs(faseCil+p~-faseC~-ll~-PI) > O) C i f ( (fareCil+pj-fa6eCi-l1) < O ) pj=pj+PI*2; else if ( (fasoCil+pj-faseCi-11) > 0 ) pj=pj-PI*2; faseCil=fase[il+pj; 1 1 ( f i n de transformada ( drum /* */ /* 1 fin de drum */ muestra los coefioiontes W */ i int i s j; ventana( 1 ; margen( 1; gotoxy ( 23.3 1; cputs("C A 9 T Transformada Coseno y Seno"); gotoxy(28,5); cputs("TABALA DE COEFICIENTES U " ) ; window(ZS6,79,23); j=2; gotoxy(2*j); f o r ( i = l ; i<=lw;i++) E printf(" W [ X d l = W5.2f " , i , w C i l ) ; if ((iW4)==0) gotoxy(2,++j); - € espera( 1; € / * Fin de mcoef */ i-tseno( /* i muestra l o s valores de l a transfoutada seno */ i n t i , j , k; margen( 1; ventana( 1 ; gotoxy(23,2); cputs("C A S T Transformada Coseno y S o n o " ) ; g o t oxy ( 33,41 ; cputs( "TRANSFORMADA SENO" ; window( 2,6,79,23 1 ; j=k=l; gotoxy(k, j); for(i=l;i<=lt;i++) E p r i n t f ( " SCXdl= X7.4f " , i , t s e n C i l i ; i f ((iW4)==0) gotoxy(l,++j); i f ((iW68)==01 E j = k = l ; g o t o x y ( k , j ) ; 1 1 espera( 1; t / * f i n de m-tseno * / - x-tcoseno( 1 / * muestra l o s valores de l a tranafornada coseno i int i , j , k : ventana(); margen( 1 ; got oxy ( 23,2 1; cputs("C A S T Transformada Cosono y S e n o " ) : cputs("TRANSF0RMADA COSENO'); got oxy ( 3 1 , 4 ; window(2,6,79,23); j=k= 1 ; gotoxy í k , j 1 ; for(i=l;i<=lt;i++) C p r i n t f ( " CtWdl= X 7 . 4 f " , i , t c o s t i l ) ; i f ((i%4)==0) gotoxy(l,++jl; i f ((i%68)==0i f j = k = l ; g o t o x y ( k , j ) ; 1 1 espera( : b f i n de m-tcoseno - /* */ /* namp 1 i tud ( 1 muestra l o s valores de l a amplitud */ 1 In+. i , J , k i ventana( 1 ; margen( 1: gotoxy( 23,2 1; cputs("C A S T - Traneforaiada Coseno y Sono"); gotoxy(29,4) ; cputs("COEFICIENTE3 DE MAGNITUD"); window( 2,6,79,23 1; j=k=P: gotoxy( k , j 1; for(i=lgi<=lt;i++) E p r i n t t ( " A [Ud]= W5.2f ' , i , a m p l i t u d t i l ) ; i f ( ( i % 4 ) = = 0 ) gotoxy(2,++j); i f ((i%68)==O) C j=k=2; g o t o x y 0 c . j ) ; 1 1 /* 1 espera( i ; f i n de mamplitud */ /* a-fase( i muestra los valotos de l a f a s e E int i,j,k; ventana( ) ; margen( 1 ; gotoxy( 23,2) ; cputs("C A S T Tran8forarada Coseno y S e n o " ) ; gotoxy(30,41; cputs("C0EFICIENTES DE F A S E " ) ; window(2,6,79,23); j=k=2: gotoxy( k , j 1 ; for(i=l;i<=lt;i++) C p r i n t f ( " F t%dl= XS.2f " , i , f a 8 e C i l ) ; i f ((iX4)-O) gotoxy(2,++j); i f ((iW68)==0) E j=k=S; g o t o x y ( k , j ) ; 1 - */ */ /* impcoef ( 1 imprime loo coeficientes W */ ( int i ; ventana( 1; gotoxy ( 2 3 , 3 ); gotoxy ( 24,5 1 ; if margen( 1; cputs("C A S T - Transformada Coseno y Seno"); cputs("IMPR1MIR COEFICIENTES W " ) ; mensaje("¿ Est6 lista la impresora Cs/nl 7 " , 3 3 ) ; ( ( tecla==='s' ) : :(tecla=='S'1 ) c f p r i n t f (stdprn," \ n \ r "1; fprintf(stdprn,"Programa CAST Transformada Coseno y S e n o \ n \ n \ r " ) ; fprintf ( stdprn, n \ r TABLA DE COEFICIENTES W \ n \ n \ r " i ; for( i = l ; i<=lw;i++) f i ,wC i 1 1; fpri ntf ( stdprn, " WC Wdl= Y5.2f if ((iW4)==O) fprintf(stdprn,"\n\r"); - 'I\ 'I, 1 1 1 /* */ f i n de i m p c o e f /* imp-tseno( 1 imprimo los valores de la transfomada seno */ f int i ; ventana( 1; gotoxy( 2 3 , 3 ) ; gotoxy ( 29 , 5 1; margen( 1 ; cputs("C A 3 T - Transformada Coseno y Seno"); cputo("1MPRINIR TRAiUSFORMADA SENO'): mensaje("¿ Está lista la impraoora [s/n1 ? " , 3 3 ) ; if ((tecla=='s') ::(tecla=='S'i) C fprintftstdprn, " \ n i t '1: fprintf(stdprn,"Programa CAST Transformada Coseno y Seno\n\n\r'); TRAIQSPOR)(ADA SE#O\n\n\r"i; fpr i nt f ( stdprn ," \ n \ r for(i=l;i<=lt;i++) C fprintf(stdprn," S CXdI= %7.4f ",i,tsan[il); if ((i%4)==0) fprintf (stdprn,"\n\r"); - 3 3 1 /* fin de imp-tseno */ /* imp-tco6eno( 1 c int i; ventana( 1: gotoxy ( 2 3 , 3 ) ; gotoxy(27,S); imprima l o s valores de la tranrfoarada Coseno margen( 1: cputs("C A 3 T Tran8forwda C o w n o y Seno'); cputs("1MPRIMIR TRAWSPOfPEUDA COSEffO"); mensaje("¿ Est& lista la impre8ora ts/nl ? " , 3 3 ) ; - if ((tecla=='s')::(tscla=='S')) { fprintf(stdprn,"\n\r '); fprintf(stdprn,"Programa CAST Transformada Corono y Seno\n\n\r"); fprintf(stdprn,"\n\r TRAPOSFORXADA COSENO\n \ n \ r " 1: for( i=l; i<=lt;i++) C fprintf(stdprn," C C%dl= %7.4f ",i,tsenCil): if ((i%4)==O) fprintf (stdprn,"\n\r"); - 3 1 3 /* f i n de imp-tcoseno */ */ /* impamplitud( 1 imprime los valores de la amplitud E int i ; ventana( 1 ; g o t oxy ( 23 ,31 ; got oxy ( 25,s ; margen( i ; cputs("C A S T Transformada Coseno y Seno"); cputs("1MPRIMIR COEFICIENTES DE MAGNITUD"); mensaje("¿ Está lista la impresora Cs/nl ?",33); - if ((tecla=='s')::(tecla=='S'i) E 1; f p r i n t f (stdprn," \ n \ r fprintf(stdprn,"Programa CAST Transformada Coseno y S e n o \ n \ n \ r " ) ; COEFICIENTES DE MAGNITUD\ n \ n \ r " 1 ; fp r i nt f ( stdpr n , \ n \ r for(i=l;i<=lt;i++) E f p r i n t f ( stdprn, A C %dl= %6.3f i ,amp1i tudC i I ; if ((i%4)==O) f p r i n t f (stdprn,"\n\r"i; I' - I' 1 1 ' I , 1 /* f i n de impamplitud */ /* impfase( 1 imprime los valores de l a fase */ E fnt i ; ventana( i ; got oxy ( 23,3 1 ; g ot oxy ( 25 , 5 i ; margen( i ; cputs("C A S T Transformada Coseno y Seno"); cputs( U IMPRIMIR COEFICIENTES DE FASE" i ; mensaje("¿ Est6 lista la impresora [s/n1 ? " , 3 3 ) ; - if ((tecla=='s'):!(tecla=='S'ii C fprintf í stdprn, " \ n \r "); fprintf(stdprn,"Programa CAST Tranrforarada Coseno y Seno\n\n\r"i; fprintf (stdprn," \ n \ r COEFICIEPJTES DE FASE\n\n\r"); for(i=l;i<=lt;i++i C fprintf(stdprn," F C Y d l = %6.Sf ',i,faseCil); if ((i%4i==O) fprintf (stdprn,"\n\r"); - 1 1 1 /* fin de imp-fase */ leearchivo( 1 { FILE *fp; char nombrefl53,extensionCSl,tipoC3l,entrada~l3l,opcion; int i; arch-opewFALS0 ; ventana( 1 ; gotoxy(25,3); cputs("C A S T Lectura de Dato8 de Disco") ; strcpy(entrada," "i;etrcpy(tipo," " I ; gotoxy(l6,ó); cputs("Cua1 e s el nombro del archivo do datos: "1; scanf ( "Ws" ,entradal ; gotoxy(l6,9); cputs("Tipo binario til"); gotoxy(l6,lO); cputs("Tipo hoxadeciwal C 2 3 " i ; gotoxy(l6,ll); cputs("Tipo ascii (31 1; do E gotoxy(16,14); cputs("Teo1eo su opci6n : "1; opcion=getch( ) ; 1 while (memchr(conJunto,opcion,3)==NULL); --- */ switch (opcion 1 E strcpyí tipo,"rb"); break; case ' 1' t strcpy(tipo,"rb"); break; case '2' t case '3' : strcpy(tipo,"rb"); break; 1 strcpy(nombre,entrada); strcpy(extension, " .coe" 1 ; strcat(nombre,extension); if( (fp=fopen(nombre,tipo)) ! = NULL) C for( i=O; i<MAX; i++) / * lee arch. de coeficientes * I fread(&wíil,sizeof(float),l,fp); f c lose ( fp 1 ; strcpy(nombre,entrada); strcpyíextension," .sen'') ; strcat(nombre,extension); if( ífp=fopen(nombre,tipo) 1 ! = NULL) I for(i=O;i<MAXCOEF;i++) / * lee arch. transf. seno fread(&tsentiissizeof(float),lsfp); fclose(fp); */ strcpy(nombre,entradai; strcpy(extension, " .cos" 1; strcat(nombre,extension~; if( (fp=fopen(nombre,tipo)) ! = NULL) C for(i=O;i<HAXCOEF;i++) / * lee arch. transf. coseno fread~&tcostil,sizeof(float),l,fp); fcloae(fp) ; */ strcpy(no&re,entrada); strcpy(extension, ".mag") ; strcat(nombre,extension); if( (fp=fopen(nombre,tipo)) != NULL) E for(i=O;i<MAXCOEF;i++) / * lee arch. comf. de magnitud fread( &amp1 i tudl i I , sizeof ( float 1 ,1 , fp 1; fc 1 ose ( fp 1; strcpy ( nombre *entrada1; strcpy(extension, ".faso'); strcat(nombre,extension); if( ífpnfopen(nombre,tipo) 1 ! = NULL) E for(i=O;i<WiXCOEF;i++) / * lee arch. c-f. fread(&faooliI,sizeof~float),l,fp): fcloseífpi ; 1 1 1 1 3 do taro */ a r c h o p e n = CIERTO;/* todos los archivos fuoron leidos */ if ( ! a r c h o p e n ) mensaje("ERR0R:Imposible leer archivo.",29); else f lw=wtOI; / * asigna el nQmero d e coeficientes 91 lt=numdatos=tsenE03; / * asigna el nQrmro de datos o It * / wC01~tsenEOl~tcost03ramplltudtOl~fa~~lOl~O; if (lt>=MAXCOEF) lt=300; if (lw>=MAXi lw=20; 1 */ */ 'seri b e a r c h i vo( 1 F I L E *fp; char nombreCl5l,extensionC5l,tipoI3l,entradaCl3l,opcion; int i ; archopenrFALS0 ; ventana( 1 ; gotoxy(25,3); cputs("C A S T --- Escritura de Datos en Disco"); strcpy( nombre, ");strcpy(tipo," " 1 ; gotoxyíl6,61; cputs("Cua1 es 0 1 nombre de grupo de archivos de datos: " 1 ; scanf ( ' ' % s ',entrada) ~ ; gotoxy( 16,9 1 ; cputs( "Tipo binario I 11 1 ; gotoxy(l6,lO); cputs("Tipo hexadecimal C21"); gotoxy( 16,111 ; cputs( "Tipo asci i C33"); do C gotoxy(16,141; cputs("Tec1ee su opcibn : " 1 ; opcion-getchí ) ; 1 while (mernchr(conjunto,opcion,3i==NULL); 'I switch(opcion) i case '1' : strcpy( tipo, I'wb" 1 ; break; case ' 2 ' : atrcpy(tipo,"wb"); break; case '3' : strcpy(tipo,"wb"); break; 1 gotoxy( 16,171 ; cputs( " A V I S O : Si ya existen archivos con el nombre " 1 ; cputs(entrada); gotoxy(16,18); cputs(" serán borrados.. 'I 1 ; gotoxy(l6,20); cputs("¿ Son correctos nombre y tipo [s/n3 ? * I ; tecla=getch( 1; . .f í í tecla=='s' 1 ! : í tecla=='Q' 1 ) W E 0 I =1 w; . b e n I O 3 =tcostO 3 =nuaidatos; E /* /* escribe el n6mero de coeficientes w = / escribe el número de datos o I t , de * / amp1itudCO1=faseIOl=numdatos; strcpy(nombre,entrada); atrcpyíextension,".coe"I; strcat(nombre,extension); if( (fp=fopen(nombre,tipo)) != NULL) C for(i=O;i<MAX;i++) 1 % escribe arch. de coeficientes fwrite(&wIií,sizeof(flost)ri,tp)i fc lose ( fp 1 ; strcpy(nombre,entrada); strcpy(extenaion, .sen" i ; strcat(nombre,extension1; if( (fp=fopen(nombre,tipo)) ! = NULL) for(i=O;i<MAXCOEF;i++) E fwrite(&tsenCil,sizeof(float),i,fp); /* */ escribe arch. transf. seno fclose(fp1; strcpy(norabre,entrada); strcpy(extension,".cos"i; strcat(nombre,extension); i f ( ífp=fopen(nontbre,tipo)) != NULL) E for(i=O;i<HAXCOEF;i++) 1 % escribe arch. transf. coseno fwrite(&tcosCi3,sizoof~float~,l,fp1; fclose(fp1; */ * gotoxy(27,7); gotoxy(27,9); go toxy í 27,111 ; gotoxy(27,13); gotoxy(27,15); cputsí"1 cputs("2 cputs( "3 cputs("4 cputs( " 5 I -- ----- CALCULA TRANSFORMADA SENO y COSENO"); MUESTRA RESULTADOS"); GRAFICA RESULTADOS" ; IMPRIME RESULTADOS"); LEE/ESCRIBE ARCHIVOS" 1: -- cputs( " O TERMINAR" 1 ; if (inicio) C ayuda(0); textbackground(obscuro1); textcolor ( clarol 1 ; gotoxy(27,17); 1 do E gotoxy( 27,20 1; cputs("1ntroduzca su Opción => "1; opcion=getchO; if (opcion=='\xlB'1 i ayuda ( O 1; /* ayuda menu principal textbackground( obscuro1 1; textcolor(claro1) ; */ 1 1 while (memchr(conjunto,opcion,6)==NULL); return opcion; 1 1 % fin de menu */ /* muestra( menu para mostrar loa dato8 en el monitor */ E char opcionr0; do E ventana( i ; got oxy ( 23,41; cputs("C A 3 T gotoxy(27,8); gotoxy( 27,lo 1 ; gotoxy(S7,12); gotoxy(27,141; gotoxy ( 27,16 1; gotoxy(27,18); do E gotoxy I 27,21 1; - TRANSFORllADA COSENO Y SENO"); -- cputs(."l MUESTRA COEFICIENTES U " ) ; cputs("2 -- MUESTRA TRANSPORUADA S E N O " ) ; cputs("3 MUESTRA T R A N S F O F A COSENO"); cputs("4 UUESTRA MAGNITUD" 1; ~ p ~ t ~ ( --" MUESTRA 5 FASE"); CpUts("0 RENU PRINCIPAL " ) ; ---- cputs("1ntroduzca su Opción => "1; opcion-getch0; 1 while (memchr(conjunto,opcion,6)==NULL); switch(opcion) C caso 1 ' : m c o o f ( 1; breaks caso ' 2 ' : m-teeno( i ; break; case 3' : ai-tcoseno( 1; break; case '4'f mamplitud( 1 ; breaks case ' 5 ' : ai-fareOi brenk; 1 1 1 while (opcion!='O'); /* fin de muestra */ /* iraprlime( menu para imprimir los dato8 */ E char opcionx0; do < ventanat 1; got oxy ( 23,I ): gotoxy ( 27,8 1; got oxy ( 27, lo 1 ; gotoxy(27,12); cputs("C A 3 T cputs("1 cputs("2 cputs("3 s("4 ----- - TRANSFORMADA COSEISO Y SENO"); IMPRIME COEFICIENTES W"): IMPRIME TRANSFORMADA SENO"); IMPRIME TRANSFORMADA C O S E N O " ) ; MAGNITUD"); - strcpy(nornbre,entrada); strcpy(extension,' .mag" 1; strcat(nombre,extension); if( (fp=fopen(nombre,tipo)) != NULL) { for(i=O;i<MAXCOEF;i++) / * escribe arch. c o e f . de amplitud fwrite(&amplitudCil,sizeof(float),i,fp)l fclose(fp); */ strcpyi nombre,entrada 1,: strcpy(extension,".fas"); strcat(nombre,extension); if( (fp=fopen(nombre,tipoi 1 ! = NULL) C for(i=O;i<MAXCOEF;i++) / * escribe arch. coef. de fase * / fwrite(&faseCil,sizeof(float),l,fp); fclose(fp1 ; / * escr. arch. transf. seno y coseno * I strcpy(nombre,entrada); strcpy(extension,".grl"); strcat(nombre,extension); if( (fp=fopen(nombre,tipo)) != NULL) C for(i=O;i<MAXCOEF;i++) fwrite(&taenti3,aizeof~float~,l,fpi; for(i=O;i<MAXCOEF;i++) fwrite~&tcosEiI,sizoof(float~,l,fp~; for(i=O;i<MAXCOEF;i++) fwrite(&amplitudlil,sizeof(float~,í,fp): for(i=O;i<MAXCOEF;i++) fwrite~&faseCiI,sizoof~float~,l,fp~; 3 1 3 3 3 fclose(fp) ; a r c h o p e n = CIERTO: /* /* indica quo todos los datos * / fueron escritos an archivos*/ 3 if (!archopen1 ~ n s a j e ~ " E R R O R : I m p o 8 i b l a escribir archivo.",33); wCOl~trenCOl=tcoeCO1=amplitudtOl~fa~oEOl~O; 1 3 /* /* fin de si 108 datos fueron correetoo fin d o escribearchivo */ */ /* zhar -nu() c menu principal del programa */ char opcion; " window(1, 1 , 8 0 , 2 5 ) ; textbackground(BLINK+clarol) ; textcolor (obscuro11: clrscr( i : margen( 1 ; window(2,2,79,24); textbackground(obscuro1): textcolor(claro1); clrscr( ac& tal " C A 5 T T W F Q R H A D A COSENO Y SENO" 1 ; I - & - i . .c- -"- - . gotoxy( 27 , 16 1 ; gotoxy(27,18); do E got oxy ( 27,21 1 ; I - s 1 -- . "" ~ CpUt6("5 cputs("0 1 --- . _- 1 IMPRIME FASE" ) ; MENU PRINCIPAL ' I ) ; cputs("1ntroduzca su Opción => "1; opcion=getch( 1; f wh i l e ( memchr (conjunto,opc ion,6 1==NULL) ; switch(opcion)C case ' 1 ' : i m p c o e f ( ; break; case ' 2' : imp-tseno( 1 ; break; case '3': imp-tcoseno( 1 ; break; break; case '4': impamplitud( 1; case '5': imp-fase( 1; break; 1 f while (opcion!='O'); 1 / * fin d e imprime * / /* graficai 1 menu para graficar los datos */ E int i,offsetx; char opc i on=O ; do E ventana( 1; gotoxyí23,4); cputs( "C A S T got oxy í 27 ,81 : gotoxy( 27.10) ; gotoxy(27,12) ; gotoxy(27,lQ); got oxy ( 27,16 1; do C gotoxy ( 27.2 1 ; cputs("1 cputs( " 2 cputs("3 cputs("4 cputs("0 -- --- --- - TRANSFORMADA COSENO Y SENO\n \ n " 1; GRAFICA TRANSFORMADA SENO"); GRAFICA TRANSFORMADA COSENO" 1 ; GRAFICA MAGNITUD"); GRAFICA FASE"); MENU PRINCIPAL " 1 ; cputst " Introduzca su Opci6n => I' i ; opcíon=getch( 1; if (opcion=='\xlB'1 C ayuda ( 3 1; /* ayuda menu grafica 1 1 while (memchr(conjunto,opcion,S)rPNULL); -ai-isaw-escala=FALSO; / * limpia arreglo para graf. for(i=O;€<MAXDATO;i++) datosC€I=O; offsetx=nuauiatoo+l; switchíopcion) C case '1': claserl; / * SENO * / for(€=l;i<=numdatos;i++) datost numdatoa+i : =datosí o f f setx-i l=tsenC i 1 ; btoak; case '2': case ' 3 ' : case ' 4 ' : 1 clasei2; for(€=l;€<=nuiadatos;i++) /* COSENO */ */ */ datosCnumdatoa+€3~datostoffsetx-i3rtcoaC13; break; clase=3; / * AMPLITUD * / for(i=l;i<=nuatdatos;€++) datostnumdatos+i =datosCaffset~-il=amplitudC€3; break; ClaS0=4; / * FASE = / foríi=l;i<=nuaidatoa;€++) datos t numdatoa+ i . =datost off setx- i 3 =f asel i 3 ; break; if(mmchríconjunto,opcion,4)!=NULL) C numlatoa=numdatos*2; rut:na_graficaO; / * graficar6 nura ?atos=numdatos/2; */ 1 f while (opcion!='O'i; 1- / * fin de grafica * / -1 c;7 - rrchivos4haydatos) h a y d a t o6 ; i nt c * /* menu para l e e r o e s c r i b i r archivos en d i s c o char g r u p o C 3 1 = E ' 0 ' , ' 1 ' , ' 2 ' } ; char opcion; do { opc i on=O : ventana( 1 ; gotoxy ( 23,5 1 ; cputs( 'IC A S T cputs( " 1 -cputs( "2 cputs("0 if (inicio) gotoxy( 2 7 , l o i : gotoxy(27,13); gotoxy(27,16) ; do E -- -- - */ TRANSFORMADA COSENO Y SENO" 1; LEE ARCHIVOS" 1 ; ESCRIBE ARCHIVOS" 1 ; MENU PRINCIPAL "1; E ayuda(5); inicio=FALSO; 1 cputs( Introduzca su Opci6n => 'I 1; opcion=getchO; i f (opcion=='\xlB'i E ayuda ( 5 i ; ayuda menu archivos 1 1 w h i l e (memchr (grupo, opc ion, 3 1==NULL) : gotoxy (27,20 ; 'I /* 6WitCh(OpCion) C case ' 1 ' : i n i c i a l i z a ( i : l e e a r c h i v o ( 1; i f ( a r c h o p e n ) *haydatos=CIERTO: else E *haydatos=FALSO; mensaje("N0 HAY DATOS D19PO#IBUSm,24); break: e s c r i b e a r c h i v o ( 1; case ' 2 ' : i f (*hay-datos) e l s e mensaje("N0 HAY DATOS DISPOP41BLESm,2CI: break; 1 1 1 while ( o p c i o n ! = ' O ' ) ; /* f i n de archivo8 */ 1 */ Rain( 1 ( char ejecuta; i n t ca 1 cu 1 ado ; archopen=calculado=FALSO; inicio=CIERTO; colores( 1; inicializa( 1: do E e jecuta=menu( ; switch(ejecuta) C case ' 1 ' : t o m a d a t o s ( 1; transformada(): calculado=CIERTO; break; case '2': if (calculado) muestra( 1: break; case '3': if (calculado) graficao; break; case '4': if (calculado) imprime( 1 : break: case '5': if (!calculado) inicio = CIERTO: arch i vos ( &ca lcu lado 1 ; break; 1 i f ((!calculado)&&( (ejecuta!='O')&&(ejmcuta!r") 1 rnensaje("N0 HAY DATOS D I S P O N I B L E 3 " , 2 4 ) ; inicio = FALSO; 1 3 while (ejecuta!='O'); ventana( 1:clrscr( 1 ; /* C A S T *I C A P I T U L O 2 " F O U R I E R : TRAMSFORMADA RAP~OADE Fouari3 . REFERENCIA TEORICA DEL PROGRMU FOURIER INTRODUCC ION Una función repetitiva o periódica es igual a una suma probablemente finita 1 de senoides. Como consecuencia del principio de superposición, éste resultado, conocido como teorema de Fourier, significa que los circuitos con entrada6 no sinusoidales que son periódicas pueden analizarse con técnicas fasoriales sinusoidales. ( La expresión de una función periódica como una suma de senoides ( conocida como su representaci6n en serie de puede estar en forma ya sea trigonoudtrica o Fourier 1 exponencial. La segunda forma , que sugiere una generalización y se conoce como ' Transformada de Fourier ' , permite el análisis de circuitos con entradas no peribdicas. Cuando se habla de serie t r i g o n d t r i c a de Fourier, puede emplearse una de las dos formas; una aonsta de senos y cosenos, mientras que l a otra consta de senos con ángulos de fase. Empleando l a s propiedades de simotrta de ciertas funciones, es posible reducir e1 trabajo que se rmquiere para determinar l a representación en serie de Fourier do estas func i ones. A menudo es más sencillo encontrar la representación de una función en serie de Fourier utilizando una de sus derivadas en vez de tratar directamonte aon l a función. La clave de esta reduccibn es la funcibn Dalta y sus propiedades de muestreo. Empleando l a fórmula de Euler se desarrolla la forma compleja o exponencial de l a eerie de Fourier ; aunque menos intutiva (puesto que las sinusoides ooaplejas son menos que la intuitivas que las reales), esta for= e s mAs o-ata trigonometrica ; además se puede hacer extensiva a l concepto de transformada de Fourier, la cual permite el análisis de circuitos cuyas entradas son no periódicas. 56 Referencia Te6rica FOURIER Para el cálculo de la Transformada de Fourier se han desarrollado varios nlgoritmos , los cuales difieren básicamente, por el n\.imero y tipo de operaciones que realizan, y en consecuencia su eficiencia. Entre loo má6 conocidos son la Transformada Discreta de Fourier o D.F.T., y la Transformada Rápida de Fourier o FFT. La Transformada Rápida de Fourier es una optimización de la Transformada Discreta de Fourier, para poder efectuar rápidamente l o s ccllculos la FFT tiene como limitante que los datos de entrada en el dominio del tiempo deben ser potencias de 2 o 2 ” , esto permite que la FFT utilice métodos indexados que eliminan gran cantidad de cálculos redundantes, que sí se efectuan en la DFT. En el filtrado digital la FFT se utiliza para medir la respuesta en frecuencia del filtro a partir de los dato8 en el dominio del tiempo. TambiOn puede utilizarse para medir la respuesta en frecuencia de la señal de entrada, o la salida del filtro digital. 57 SERIE TRIGONOMETRICA DE FOURIER Se dice que una función f(t) es periódica si existe un nfimero T real positivo tal que para toda ' t ' . Si f(t) es periódica, entonces se dice quo el tiempo T ea el período de f(t). Teorema d a Fourier Dada la función real f(t), que es periódica con período T segundos, existen nomeros reales a. ,alsbl ,bz tales que : ,.... f(t) = no + a l cos wot + b, sen wot + an coa 2wot + bn sen 2w0t + at cos 3wot + br sen 3wot ... + o bien: +inf f(t) = Po + 3- n= 1 ( 8,, cos nwot + b, sen nwot ) donde wo = 2 p i / T radianes por segundo , se denomina ' frecuencia fundamental ' o ' primera armónica ' de f(t). La frecuencia nwo se denomina n-ésim armónica. La f6rmula FourieL anterior s e conoce como Serie Triuonodtrica f(t). ,... Las constantes a o , a l , b l , a z , br se denominan coeficientes de Fourier de f(t). La fórmula para e1 coeficiente de Fourier a. donominado ' valor medio do f t t ) o ' componente de cd de f(t) ' e s : f(t) dt donde loa limites de la integral pueden substituirse por cualquier intervalo de T. 50 I Referencia Tebrica FOURIER Si en la fórmula de l a serie de Fourier se multiplica primero l o s dos miembros por el factor nwot y después se integra con respecto a 't', entonces se obtiene: f ( t ) cos nwot d t ; para n = 1 . , 2 , 3 , . . . La fórmula anterior determina el coeficientes an ; los límites de integración también pueden estar en u n período arbitrario. Multiplicando ambos miembros de l a serie de Fourier por 68 obtiene de sen(nw9t) e integrando con respecto a ' t ' manera similar l a fórmula: b, =:ST T f ( t ) sen nwot dt ; para n = l,Zs3s... o donde la integral puede calcularse en un período arbitrario. Otra representación de la Serie Trigonomtbtrica de Fourier es: +inf f ( t ) = a. + Sulu An COS (nwot - 0 , ) n= 1 2 donde An * an + -1 2 bn O, = tan Y 59 ( b,/a, 1 . Referencia Tebrica FOURIER SERIE COMPLEJA DE FOURIER Aunque la serie trigonométrica de Fourier es un concepto relativamente intuitivo (ya que la representación en la mente de las senoides y cosenoides no es muy difícil), empleando una representación en otra serie, conocida como serie ' exponencial ' o ' compleja ' de Fourier podemos ( 1 I abreviar matemáticamente la representación en serie y ( 2 1 generalizar el concepto para llegar a la Transformada d e Fourier, lo cual permitir& tratar funciones no periódicas. La ecuación clave en el desarrollo de la serie compleja de Fourier es la fórmula de Euler. Apartir de : jo e - 30 e = cos O + j = cos O - 3 sen O sen O se obtiene: +inf f(t) jnwe t S W = Cn e HI=- i nf . Esta es la mrmmntacibn comr>leja d l donde wo = 2 p i / T Fourier d e f(t). En otras palabrae, e8 posible expresar f(t) como una suma de exponenolales cooplejae. Notar la forma simple de esta representacibn en series sin embargo si fuese nesesario calcular primero a,, y bn para poder obtener Cn, ya no seria sencillo determinar esta representaci6n.Por fortuna, se puede deducir una fórmula para obtener C n directamonto, empleando en el desarrollo la fórmula do Euler se obtiene : Cn = T s: -jnwe t f(t) o dt 60 . \ \ Referencia Tebrica FOURIER TRANSFORMADA DE FOURIER Aunque las funciones periódicas son muy importantes, tambien los son las funciones ' periódicas Es posible hacer extensivo el concepto de representación en serie de f(t) al caso de una función no periódica , considerando tal función como periódica con periodo T igual a infinito. *. La Transformada d e Fourier , toma una función en el tiempo f(t) y la convierte o transforma en una función de la frecuencia F ( j w ) . La Transformada Inversa d e Fourier, toma la función de la frecuencia F(jw) y al transforma de nuevo en la función del tiempo f(t). Cabe señalar que ambas transformadas son lineales. Sea f(t) periódica, con período T. serie compleja de Fourier es: +inf f(t) = La representacibn en jnwo t StllLA Cn e w-inf donde wo = 2 p i / T Cn = 's T T / 2 y c n se define como: -Jnwot f(t) e dt = T - t i 2 s: :, - jnwox f(x) e dx Substituyendo en la representación en serie de fit) se obtiene: 3nwo t +i nf n=-inf Puesto que wo = 2 p i / T, entonces l/T = wo / 2 pi +inf n- f(x) o i nf 61 .\ y 3nwo t wo -- Referencia Teórica FOURIER Si hacemos T grande, entonces la c a n t i d a d a w definida por wo = 2pi/T = n w se hace pequeña y entonces : T / Z +inf 3n wt e fix) e n=-inf W - T / Z Conforme T -> +infinito , e n t o n c e a n w -> dw y las arm6nicas discretas nwo llegan a sOr variables continuas de la frecuencia, digamos w; es decir nwo = d w -> w Además, l a suma discreta (SUMATOREA) se convierte en suma continua (INTEGRAL). Así en el límite Pa ecuación anterior toma la forma : . y por cambio d e variables : 1 f(t) = - 2Pi ::::[\ * I l l * dw f(t) e-jwt dt] -an* la cual puede expresarse como : asl l a Transformada d e F o u r i e r de f(t) se defino pot 1 F (jwl = 2Pi S - jwt + I n * f(t) - í n f 62 c) dt t .. La función F(jw) se denomina Transformada d e Fourier de f í t ) y a menudo se representa como: La ecuación descrita anteriormente : f(t) = jwt - F(jw) e dw 2pi es una fórmula para obtener f(t) a partir de la transformada de Fourier F(jw) ; a esta integral se denomina Transformada Inversa deFourier y se representa corno: En el caso de las transformadas de Fourier, el espectro de amDlitUd de f(t) es la grifica de IF(t)l contra w , y el espectro de fase es la gráfica del 6ngulo de F ( j w ) contra la frecuencia. Estos dos aspectos constituyen el esuectro d e frecuencia d e f(t). En el caso de una funcibn poribdica, el espectro discreto de amplitud representa las amplitudes ( en el caso trigonométrico) o las magnitudes (en el caso complejo) de las senoides que comprenden la funci6n. Sin embargo, para una funcibn no peribdica, el espectro de frecuoncia e s continuo y ya no representa las amplitudos o m g n i t u d e s de'las senoide8. 63 Referencia Teórica FOURIER PROGRAMA PARA CALCULAR LA TRANSFORMADA DE FOURIER El programa FOURIER calcula la transformada discreta de Fourier , empleando el metodo de : ' n log n comunmente conocido como Método d a Transformada Rápida d e Fourier o FFT. Este método es muy eficiente y l o s datos requeridos son 2" valores, donde 'n' es cualquier entero positivo. I ; Los datos de entrada son : N = n . X = { SIGN = -1 X I , X O , O 1 ... xi, , x q - l 1 ; donde q = 2" , , r,-l y X son conplejos . . Y los resultados son : R = E ro , r l , r n , I = { io, i l , ir, A = C a. F = { fo, , al , a2 , f , , fzp ... 1 Parte Real de Y . ... i q - l I Parte Imaginaria de ... , a q - ; Magnitud . ... , 1 Fase Y. I f,-1 Si X k (para k = O,l,...,q-l) representan una función de tiempo y son los datos de entrada al programa, 108 resultado8 en el caso obtenidos del programa Ya (para j = O,l,...,q-l) espectro de frecuencia de de que SIGN = -1 representan el f = Is/q ciclos por unidad dcr tiempo, donde j = O,l,...,q-l. En particular, si Xh son valores reales, entonces: es el espectro d e coseno y Ia Cy,I = - 9- 1 SvnÁ k=O sen q es el espectro seno. 64 .. 2pi ikj Xk P Refer-ncia Teórica FOURIER Para recuperar la función de tiempo xk , se puede emplear el programa FOURIER nuevamente, pero con el valor de entrada SIGN = +1 . Esto significa que , dado el arreglo de datos de entrada SIGN = -1, se hacen cálculos con el programa FOURIER , y si las resultados de la transformada se intrducen nuevamente como datos X y SIGN = I , se obtendrá como resultado del programa FOURIER el arreglo de datos que originalmente se emplearon. Es decir que si se efctuan dos llamadas susecivas del programa , ( primero SIGN = -1 y después SIGN = l 1 se regresa a los datos de entrada. X y Como ejemplo considere los datos (rea1,complejo) : SIGN = 1 ; obtendrá como resultado: Y = E ( 2 . 5 , 0 ) , (-0.5,-0.5), (-0.5,0), (-0.5.,0.51 1 (-0.5,O.S) 3 ; si ahora los datos de entrada son como sigue8 N X 3 2 ; - E SIGN = -1 ( 2 . 5 , 0 ) , (-0.5,-0.5), (-0.5,0), ; obtendrá como resul tad0 nuevamente : que %on los valores que em habian considerado como X para e1 priawr cálculo de transformada ( * ) 65 .. *- P -. B IBL IOGRAF I A DOUGLAS F. ELLIOT Sr " Fast Transform " Aca&enis Press inc. 1989. U.S.A. RAO K. RAMAHOAN HARRY F. DAVIS Fourier Series St Orthogonal Function Dover Publications Inc. 1980. New York, U.S.A. *I 'I ENDERS A. ROBINSON Multichanel Time Series Holden-Day Inc. San Francisco, U.S.A. 1967. 'I 'I WILLIAM H.HAYT Jr. & JACK E. K E W R L Y u Análisis de Circuitos en Ingenieria Mc Graw Hill de México S.A. 1975. México D.F. KENDALL E. ATKINSON An itroduction to Analysis Jhon Wiley & Sons Inc. 1978. New York U.S.A. 'I MAX A. SOBEL & NORBERT L E m R Algebra I' Prentice Hall Hispanoamericana S.A. México D.F. 1989. 'I MS-DOS, User's Guide " Microsoft Corporation U.S.A. 1987. HERBERT SCHILDT " C: Manual de Usuario Mc Graw Hill / Interamricana de EspaAa S.A. Madrid Esaña 1989. " Turbo C++ , User's Wid@ Borland International Inc. U.S.A 1992. 66 UANüAL OPERATIVO DEI, PROGRASA FOURIER I INTRODUCCION Este manual indica paso a paso la forma correcta de operación del programa llamado FOURIER, ademhs de proponer algunos algunos ejemplos. El programa FOURIER calcula la Transformada de Fourier, empleando el método comunmcsnte conocido como Método de Transformada Rápida de Fourier o F.F.T., los datos requeridos son 2" valores complejos. Además de obtener los valores complejos de la Transformada Rhpida de Fourier , ( parte Real y parte Imaginaria 1, el programa FWUIER obtiene la Magnitud y la Fase de la Transformada de Fourier. Los resultado6 derivados del c6lculo de la Transformada de Fourier, es decir partes Real e Imaginaria, Magnitud y Fase , es posible : mostrarloa en el monitor, imprimirlos, y graficarlos. I I DEFINICION TEORICA El programa FOW4IZR aaloula l a Transformeida de Fourier, n log n ' ; cowunmente conocido como empleando el método de: : ' Método de Transformada Rapfda de Fourier Este -todo es muy eficiente y los datos requeridos son 2" valores comlplejos, donde 'n' es cualquier entero positivo. l . Los datos de entrada son Y los resultados Y R I n F = C yo, = { ro, = E io, = E ao, = c fo, son yt , yz, ri, rn, i t , io, a t , az, ft, f l , t f y,-l 1 .. .... ,, r q - l ... ... ... , , , 1 i,-t 1 aq-l 1 f q - l 1 67 .. iY son complejos Parte Real de Y Parte Imaginaria de Y. Magnitud Fase . . .. . Manuaii ODerativo F O W L E R ... D o f í n i c i 4 n T o 4 r i c m . . . Si X k (para k = O,l, ...,q- 1 1 representan una funcibn de tiempo y son los datos de entrada al programa, los resultados obtenido6 del programa y j ( para j = O,l,. ..,q-1 1 en el caso de que SIGN = -1 representan el ' espectro de frecuencia ' de f = j/q ciclos por unidad de tiempo, donde j = 0 , 1 , . . . , q - I . En particular, si #k son valores -reales. -entonces: q-1 Re C y , ] = SUMA k=O es el esDectro d e coseno y Im C y , I = - 2pi i k j q- 1 SUMA k=O Xt sen q es el espectro seno. Para recuperar la Puncian de tiempo X k , se puede emplear el programa FOURIER nuovamente, pero con el valor do entrada SIGN = +l. Un ejemplo de esto se muestra al final dol manual. I 1 1 USO DEL PROGRAMA FOURIER En seguida se enlistan 108 pasos que permiten 0 1 uso correcto y eficiente del programa FOURIER. A Por principio verificar que en e1 dirco de trabajo, est9n los arahívos para usar e1 monitor on modo gráfico , príncipaimonte 0 1 aboauardo a l tipo de monitor en uso, cano son t HErPC.BOI , COA.881 , EGAVGA.BG1. B El disc0 de trabajo archivo FOURIER.EXE. C Introducir en la computadora el disco do trabajo con los archivos mencionados e itroducir 01 comanado: FOURIER <ENTER>. 68 debe contener ademdr e1 .. 3kmsurl Ombrativo FOüRIIER D El Menú Princiual y un mensaje de ayuda enmarcado p o r una ventana serán mostrados en el monitor. Después de ser leido pulse cualquier tecla para continuar con el desarrollo del programa. E Así aparecerá el Menú Prinoi-pal completo, que presenta las opciones siguientes: N L 1 2 3 4 O O G --- -- -- -- N - TRANSFORMADA DE FOURIER CALCULA TRANSFORMADA DE FOURIER MUESTRA RESULTADOS GRAFICA RESULTADOS IMPRIME RESULTADOS TERMINAR Introduzca su Opción => F _. Elegir la opción 1 : para introducir lo8 datos del teclado. Si se elige otra opción aparecerá el mensaje: Pulse cualquier tecla para continuar. G Si se desea ver el umn8aje do AYUDA del Henú y tne8trar6 oí smn8aJe que Principal pulse E, apareció al principio del p r o g r a u 10961iE#t, en general pulse para ver la AYiJüa del mnfi que se e s t 6 trabajando; existen ayudas en las opciones de: CALCULA TfPÁ239PORWADA , ORAPICAR , RESULTADOS. H Despuéa de haber introducido 108 valores complejos de X en la opcibn 1 , se puede elegir cualquiera de la opciones quo aparecen en el Mend PrinciDal. 69 .. Uanuai Operativo FOURIER I Cada una de las opciones presentadas en el MenQ Princiual son descritas a continuacibn. IV DESCRIPCION DE OPCIONES PRINCIPALES 1 -- CALCULA TRANSFORMADA DE FOURIER Permite al usuario introducir los datos requeridos por el programa a través del teclado. números QUB E muestran a l final d e cada sentencia , corresponden a un eiemulo. A l iniciar los cálculos se mostrará u n Mensaje de Ayuda el cual indica que el número ' n o debe ser tal que : 2 elevado a la potencia 'n' debe ser menor o igual a 32 , implicando que el Pulsar cualquier tecla para valor máximo será n = 5 continuar. . Si se desea volver a ver el mensaje de Ayuda oprima y después oprima culquier tecla para continuar. E, De tal forma, se pedir&n seouencialmente los datoa siguientes : n El núamro de coeficientes de l a onda X32 : n = 3 2 Se deberá introducir un nQtPsro ' n o tal que: l<= n <=5. y a continuaci6n se pedir& el signo: El signo 1-1 6 11 es 1 = A continuacibn se introducirihn cada uno de los 2" valores o coeficientes COaplt~j06de X . Escriba lor 2 XC1l.rs Xt23.re XLSl.re Xt4l.re = = = 1 2 3 = 4 n camficíemtmr aomplejor do X. XIll.fr xi21 .ir Xi33 . i m XC4l.fa = = = = 70 O b O O .. ihnual Operativo FOURIER ... Los valores complejos de X decimales, positivos o negativos. t r m n m * o ' r ~ a d a . . . c a l c u l a pueden ser : enteros , El n~rnero d e coeficientes: complejos de la Transformada de Fourier, de Magnitud y de Fase será igual a 2 n . A continuación el programa efectuará los cálculos nesesarios para obtener los valores o coeficientes de la Transformada de Fourier? Magnitud, Fase, y mostrará mientras este efectuando los cálculos el mensaje: Gracias, espere un momento por favor... 2 -- MUESTRA RESULTADOS Permite al usuario ver en el monitor los coeficientes de: Parte Real y Parte Imaginaria de la Transformada do Fourier, Magnitud y Fase. Se mostrará el siguiente MenQ se elegirá la opcibn deseada. N L O G N 1 2 3 4 5 O ----- --- - de Muestra Resultadom, y TRANSFORMADA DE FOURIER MUESTRA COEFICIEISTES X MUESTRA PARTE IHAGIñAIPIA MUESTRA PARTE REAL MUESTRA MAGNITUD MUESTRA FASE MENU PRINCIPAL Introduzca su Opción => _. Entonces se mostrarán en e1 monitor l o a c~oficiontes cortespondientes ; si se quiere detener & mumrtieg & coefioiqntes, sobre todo cuando no cabon en una s o l a pantalla ( más de 68 coeficientes i , se teclea CONTRO& a, y nuevaaunte CONTROL 3 para continuar viendo los coeficiente* yarrtnnterr; si no se oprime esta secuencia se ir&n encimando sobro los primeros coeficientes mostrados, as1 hasta terminar de mostrarlos todos. 71 .\ I k n w 1 Operativo FOURIER Al terminar d e mostrar los coefieientes correspondientes el programa se detendrá hasta que pulse cualauier tecla para continuar. y regresará al Menti d a Muestra Resultados. 3 -- GRAFICA RESULTADOS Permite al usuario ver las gráficas correspondientes a in Parte Imaginaria de la T.F. , Parte Real de la T . F . , Magnitud de la T.F y Fase de la T . F . . Como el espectro es simétrico y de la Transformada de Fourier s610 se obtiene la mitad de 81, para efectos d e uraficación , e l número d e coeficientes araficados, 8 s e l doble d e coeficientes que se obtienen de la Transformada, permitiendo ver el espectro completo; sin embargo el nomero de coeficientes obtenidos no se altera. Ea posible grdkficar todos los coeficientes o sólo un intervalo específico. Se mostrara el Menti opciones. N Graficar y se elegirá una de las L O G N 1 2 3 4 O - TRANSFORMADA DE FOURIER -- O W I C A -- GRAFICA -- ORAFICA -- -- PARTE REAL PARTE IHAGINARIA MAGNITUD GRAFICA FASE XENU PRINCIPAL Introduwra BU Opci6n => __ Al pulsar la tecla E a a p s r o c 9 r b un !!4enrali e a Ayuda el cual le notificará que es possible graficar un intervalo de dato6 específico, logrando ampliar la grdkfica atediante un cambio de escala. 72 .. Manual Operativo FOURIER Eligiendo cualquiera de las opciones, se mostrará tecla para continuar, aráfica y esperará aue pulse -u entonces se preguntará: Desea graficar un i n b r v a l o de datos específico (síni ? Al contestar afirmativamente ( 's' o ' S ' 1, le permitirá ver parte de la gráfica más claramente, ya que el intervalo especffico se graficará en todo el monitor, aumentándose la escala. Si contesta negativamente, se retornar& al Menú d a Graficar , donde se podr6 elegir otra gráfica o el Menfi Principal. Si contest6 afirmativamente se le pedirán los siguientes datos acerca del intervalo de datos a gráficar: GRAFICADOR X VS. Y -- ñ L O G N De m datos, seleccione el 5ntervalo en X que desea graficar. A partir de1 dato X = ??? 50 tiasta 0 1 dato X = ??? 125 El dato 'i' a partir del cual se graficatá, será mayor o igual a cero, y menor o igual que m-3, O <= i <= ai-3. Y el dato ' 5 ' hasta el cual se graficará, será mayor o igual a i+3 y menor o igual A m , i+3 <= f <= m. En caso contrario aparwer6n famisafes da error, indicando 108 limites permitidom. Después de introducir correctamente los limites del intervalo a graficar, se sioetrar& la gráfica correspondiente a una nueva escala. Cada vez aug) 80 termi- 31 g-fl car, E& QWe rar4 ~ u a g pulse u n a t e c l a , y volverá a preguntar si desea graficar un intervalo de datos especifico. 73 144187 4 -- IMPRIME RESULTADOS Permite a l usuario imprimir los coeficientes complejos de X , las partes Real e Imaginaria de l a Transformada de Fourier, a s í como Magnitud y Fase de la misma. Se mostrará el siguiente Men6 d e ImDrime Resultados, y se elegirá la opción deseada. N L O G N 1 2 3 4 5 ------- O - TRANSFORMADA DE FOURIER IMPRIME COEFICIENTES X IMPRIME PARTE REAL IMPRIME PARTE IMAGINARIA IMPRIME MAGNITUD IMPRIME FASE MENU PRINCIPAL Introduzca su Opción => - Una vez puleada la opción, se indicará en el monitor el nombre de l o a coeficientes a imprimir, y preguntar&: ¿ Est6 lista l a impresora Caín1 ? Esto le permite a l usuario poner en línea l a impresora el papel en l a misma, cuando e8t& liato contestar afirmativamente ( Is' o 'SI 1 y se imprimirán todos los coeficientes de l a opci6n elegida. A l terminar de mandar a imprimir l o a coeficientes o si se contestó negativamente , retornará al Men6 d a Imurirns Resultados. y / o colocar 74 .. .iCanual Oxmratiuo FOURIER V EJEMPLOS Dado el conjunto de valores complejos X y SIGN = -1, se y si los efctúan cálculos con el programa FOURIER ; resultados de la Transformada se introducen nuevamente como datos X y SIGN = 1 , se obtendrá como resultado del programa FOURIER el conjunto de valores X que originalmente se Es decir que si se efeckuan dos llamadas emplearon. susecivas del programa, primero SIGN = -1 y después SIGN =l, o viceversa, se regresa a los datos de entrada. Como ejemplo considere los datos X (rea1,complejo) : N = 2 ; X = € (1,O) , (2,O) , (3,O) , (4,O) 3 ; SIGN = 1 ; obtendrá como resultado: Y = (2.5,0), (-0.5,-0.5), (-0.5,0), (-0.5,O.S) 1 (-0.5,0.5) 3 si ahora los datos de entrada son como sigue: N = 2 ; X = € ( 2 . 5 , 0 ) , (-0.5,-0.5), SIGN = -1 (-O.S,O), ; obtendrá como resultado nuevamente : Y = E (1,O) , (2,O) , (3,O) , (4,O) 1 ; que son los datos que 8 8 habían considerado UOIQO X para primer cálculo de Transforaada de Fourier ( 8 ) . 01 Mediante el Plena . d IamrLqlL b sultrrdoa so imprimieron los los coeficientes complejos do entrada X I la6 partcso la Uagnitud y la Fase de la Imaginaria y Real de la T . F . , T.F.; correspondientes al ejomplo anterior. 75 ; .--- .-.-.. I. Programa NLOGN - Transformada de Fourier TABLA DE COEFICIENTES X XClI.re= XC3l.re= 1.00 XCíl.im= 3.00 XCSI.irn= XC23.re= XC43.r0= 0.00 0.00 2 . 0 0 XESl.im= 0.00 4.00 XC43.ime 0.00 SIGNO = 1 Programa NLüGN - Transformada de Fourier PARTE IMAGINARIA I Ci1= 0.0000 I C21= -0.5000 Programa NLOGN I - C 3 3 ~ 0.0000 I C41= 0.5000 Transformada de Fourier PARTE REAL R Cll= 2.5000 R C 2 3 = -0.5000 Programa NLOGN R - C 3 1 -0.5000 ~ R C41= -0,5000 Transformada d e Fourier COEFICIENTES DE MAGNITUD M C13= 2.500 M C23= 0.707 Programa NLOGN W C31= 0.500 H C41= 0.707 - Transformada de Fourier F t33a -3.142 COEFICIENTES DE FASE F Cl3= 0.000 F C23= -2.356 F (41- -3.927 Programa NLOGN - Transformada de Fourier TABLA DE COEFICIENTES X XCll.re= XC3l.re= 2.50 XCil.im= XC3l.im= -0.50 XC2l.r0= -0.50 XC43.re= -0.50 0.00 0.00 XC2l.im= - 0 . 5 0 XCQl.im= 0.50 SIGNO = -1 Programa NLOGN - Transformada de Fourier PARTE IMAGINARIA I c11= 0.0000 I C21= 0.0000 Programa NLOGN - I C33= 0.0000 I 143- -0.0000 Transformada de Fourier PARTE REAL R ill= 1.0000 R C21= R C33= 2.0000 Programa NLOGN - 3.0000 R (431 4.0000 Transformada de Fourier COEFICIENTES DE MAGNITUD n c13- 1.000 H 123s 2.000 Programa NLOGN M C41= H C31= - Transformada de Fourier F t33m 3.000 4.000 COEFICIENTES DE FASE F ill= 0.000 F t23= 0.000 0.000 F C 4 3 ~-0.000 REFERENCIA TECNICA DEL PROGRAlu FOURIER SECUENCIA Y DESCRIPCION DE SUBRUTINAS complejo suma(a,b) Funciones para operaciones aritméticas con números complejos. complejo resta(a,b) comp le io nul t ( a, b 1 complejo divide(a,bl margen( 1 Enmarca la ventana que se ecuentra activa. ventana( 1 Abre una ventana en todo el monitor. mensaje(cadena,largo) Abre una ventana sobre el 'cadena' y asigna un carater del teclado a la var. 'tecla', permite m o s t r a r ios diferente8 mensajes. ayudaínivel) Mostrará un mensaje de acuerdo al nivel de ayuda, presionando ESC. mostrar6 el mensaje. pantalla0 Inicializa el modo grclfico. max-minimo( 1 Encuentra 108 valorea máximo y mínimo de Y , para determinar la escala de graficacibn. Traza 108 ejes XY,y el nombre de la grbfica. Obtine l a escala en pixeles de los ejes X y Y, para poder graficar c/u de l o s puntos. 78 Referencia T k n i c a FDURI-ER dibula( 1 Grafica un punto, traza una linea con el punto anterior y otra con el eje X . amplifica0 Graficará un intervalo de datos especifico, ampliando la escala de graficaci6n. rutina-grafica( i Secuencia de rutinas para graficar. tomadatos( 1 Pide datos a usuario para calcular la transformada de Fourier. fouriert 1 CALCULA LA TRANSFORMADA RAPIDA DE FOURIER mcoef( 1 Muestra los coeficientes complejos de entrada X . m-imag ( 1 Muestra la parte imaginaria de la T. de Fourier. m-real í 1 Muestra la parte real de la T. de Fourier. m a m p 1 i t ud ( 1 Muestra los valores de la amplitud. m f ase ( 1 Muestra los valores de la fase. impcoef ( i Imprime los coeficientes complejos de entrada X . Imprime la parte imaginarla de la T. de Fourier. imp-real ( i Imprime la parte real de la T. de Fourier. i m p a m p i i tud( i Imprime los valores de la amplitud. imp-fase( 1 Imprime los valores do la fasm. 79 . Ref ermac i a Técnica FOUR I ER menu( i MenQ principal del programa. muestra( 1 Menú para mostrar los datos en el monitor. imprime( 1 M e n 0 para imprimir los datos. graf ica( 1 Menú para graficar los datos. main( 1 E calcuIado=FALSO; inicio=CIERTO; do { ejecuta=menu( 1 ; switch(e5ecuta) E case ' 1 ' : if (!calculado) inicio = CIERTO: toma-datos( 1; fouriero; ca lcu 1 ado=C IERTO ; break; case ' 2 ' : if (calculado) muestra(); break; cage ' 3 ' : if (calculado) g r a f i c a o ; break; case l 4 ' : if (calculado? imprime0; break; 1 if ((!calculado)bb(ejecuta!='O'1) mensaje("N0 HAY DATOS DISPONIBLES",24); inicio = FALSO; 1 while (ejecuta!='O'); ventana( 1;clrscr( ) : 1 Fin de rutlna principal main(). RUTINA P DEFINICION D E VARIABLES RAPIDA DA FOURIER 2 F.F.T. X N SIGN Y REAL I MAG AMPLITUD FASE = (XO, X1, X2, = n; = 1 6 -1; ... W ,Xq-l) ... u donde q=2 Yi, Y2, ,Yq-l); = Parte real de l a transformada d e Fourier; = Parte imaginarla de la transformada de Fourier: = Coeficientes de Amplitud: = Coeficientes de Fase: = (YO, 80 Referencia T6cnica FOURIER COMIENZA wk.re=hold.re=O; wk.im=hold.im=O; 1 x=p ow ( 2 ,n 1 ; PARA (i=l;i<=n;i++) mfil=pow(2,(n-i)); PARA í 1 = 1 ; l<=n; I++) E nblock=pow(2, (1-1) I ; 1 block= 1 x/nbloc k; lbhalf=lblock/2; k=O ; PARA (iblock=l;iblock<=nblock;iblock++) C fk=k; v=s i g no*2*P I * fk/ 1 x ; wk.re=cos(v) ; wk. irn=sin(v) ; i star t=l bl oc k* ( ib 1ock- 1 1; PARA (i=l;i<=lbhalfti++)Z j=istart+i; jh=j+lbhalf; xi jhl=xC jl-xt jhl*wk; xC jJ=xC jI+xt jhl*wk; 1 PARA ( i = 2 ; i<=n;i++) < h=i ; SI (k<mCil) i = n + l ; OTRO k=k-wC i 3; 1 k=k+mC hl ; 1 1 k=O ; PARA ( j = l : j<=lx; j + + ) E SI (k>=j) C hold=xC jI ; xt jI=x[ k+ll ; xC k+ 1 3 rho1 d ; 1 PARA íi=l;i<=n;i++)( h=i; SI 1 (k<mCiI) i=n+l; OTRO 1 k=k+mC h 3 ; k=k-mC 1 3 ; flxaux. re-f lx; flxaux. i m = O ; 81 \. .-. SI (signo>O) PARA (i=l:i<=lx;i++) i aux=xC i I ; xC il=divide(&aux,&f lxaux) ; 3 PARA ( 3 i = l ; i<=lx;i++) E real[ ii=xC i I . re; imagC i I=xC i I . im; Fin de F.F.T. Polar (i=l; i<=lx;i++) E magnitudCil=sqrt( realCil*realCil+imag~il*~magCil1; SI (imagCiI<O) E SI (realCil<O) fasetil=atan(imagEi3/rsalCil)-PI; SI (realCil==O) faseCil=-PI/S; SI (realíií>Oi faseCi3=atan(imagCil/realtil~; PARA 3 OTRO SI 3 (imagCil==O) E S I (realCil<Ol faseCii=-PI; SI (realCiI==O) faseEil=O; S I (realCiI>O) faseCil=atan(i~gCil/realCil)f OTRO S I (imagCil>O) C SI (realCiJ<O) fase~il=atan(imagCiI/roaltil~+PI; S I (realtil==O) faseCil=PI/2; S I (realtiI>O) fasetil=atan(iragti3/roaltil~; 3 3 Fin de polar Drum pj=o; PARA (i=2;i<=lx;i++) E S I ( (abs(faeeCiI+pj-faseti-ll)-PI) > O ) S I ( (faseíil+pj-faseti-ll) < O ) pj=pj+Pf*2; OTRO S I ( (faestil+pj-fasoíi-lI) > 0 ) p)-pJ-PI*S; 1 3 fasetil=faseCil+pj: Fin de drum TERM I NA 82 i /* Programa para calcular l a Transformada de Fourier, empleando el mtodo conocido como 'n log n' o Tranaformada Rápida de Fourier (F.F.T.) FOURIER . X N = - SIGN = */ (XO, Xi, X 2 , n; 1 6 -1; Y REAL I MAG AMP L I TUD = = FASE = # i nc 1 ude #i nc lude # i nc lude # i nc lude # i nc 1 ude # i nc 1 ude # i nc lude +i nc lude = = n ... ,Xq-1) donde q=2 ; ... ( Y O , Y i , Y2, ,Yq-1); Parte real de la transformada de Fourier; Parte imaginaria de la transformada de Fourier; Coeficientes de Amplitud; Coeficient-ee de Fase; <stdlib.h> <stdio. h> <math. h> <mom. h> (conio. h > <string.h> <ctype. h > <graphice. h> /* /* nQrnero de divisiones del eje X nSaiero de divisiones del eje Y #define +dofine +define #define NUWDIVX 10 NUWDIVY 10 CIERTO 1 FALSO O +define +define +define #defino #define MAX 6 WAXCOEF 101 MAXDATO 210 PI 3.141592654 o s p e r a 0 while(!(kbhitO)); g e t c h 0 ; typedef struct <float re, fa;) complejo; /* */ */ definici6n de NQmoro Complejo a complejo xCWAXCOEF3 ,xxCMAXCOEFI 8 float m C M A X C O E F l , r e a l C M A X C O E F l , i ~ g C ~ X C O E F l , ~ g n i t u d C ~ X C O ~ F l , f a s e ~ ~ X C O E F float dang,angulo,flx; int n,lx,signo; float datoaCMAXDATO1; int archopen,clase; i nt m i s m a e s c a 1 a ; int numdatos; /* arrogio dando 8 8 t A n los datos a grafioar / * numoro de datos a graficar */ / * delimitan e1 rango on X y Y de los */ int inix,finx; / * puntos que so grafiuaran */ float iniy,finy; float unidadx,unidady; / * corrimiento en pixeles del e j e X * / f 1 oat off set ; int maxx,maxy; / * delimitan el area disponible para */ int xl,x2; /* trazar la gráfica. */ int yl,y2; / * ytx1,yl) origen(xl,y2) x(x2,y2) * / char con juntot6l= C ' 1' , '2',' 3' ,' 4 ' ,' O ' ,' 5 ' I ; char letrerosC53Cl01; / * nombre de la gráfica */ char almacenC6001: / * almacena el area de ventana, máximo * / / * 7 renglones o 7x80 caracteres. */ char tecla; int inicio; ~ <*~.IX _I_ _*-+.. nn */ complejo suma(a,b) complejo *a,*b; c complejo c: c.re=a->re+b->re; c.im=a->im+b->im; return c; /* 1 fin d e suma complejos */ comp 1 e jo resta ( a, b 1 complejo *a,*b; I complejo c; c.re=a->re-b->re; c. imra->im-b->im; return c; /* 1 fin d e resta complejos */ comp 1 e jo mu 1 t ( a , b i complejo *a,*b; c complejo c: c.re=(a->re*b->re)-(a->im*b->im): c.im=(a->re*b->im)+(a->im*b->re); return c; /* 1 fin de multiplica complejos * I comp 1 e j o di v i de ( a, b 1 complejo *a,*b; c complejo c; float den; /* denominador comQn */ den=b->re*b->re+b->im*b->im: i f (den!=O) C c.re=(a->ro*b->re+a->im*b->im~/den; c.im~(b->re*a->iai-b->i~*~->rm)/d~n; 1 else i c.re=O; return c: c.im=O; 1 /* void margen( 1 enmarca la ventana que se ecuentra activa */ { struct text-info r; int i,alto,largo; gettextinfo(lr1; alto=r.winbottom-r.wintop; for(i=l;i<largo;i++)putch(Oxcd1; insline0; for(i=l;i<largo;i++) putch(0xcd); for(i=2;i<alto;i++)C largo=r.winright-r.winleft; gotoxy( l,alto+l) ; putch(Oxc8) ; putch(0xbc); gotoxy( 1,alto-1) ; gotoxy(1,lf; putch(Oxc9 1 ; putch(0xbb); putch(0xbai ; gotoxy(largo+l,i); putch(Oxbal;putch(Oxba); 1 gotoxy(largo+l,alto); putch(0xba); gotoxy(2,2); I/* fin de margen */ ventana( C clrscr0; windowíl,l,80,25); text bac kg r ound ( GREEN+BL I NK ; textcoior (BROWN) ; clrscrt : margen( 1i 1 fin de ventana * / /* /* abre una ventana del tamaño de todo el monitor, y la enmarca */ */ /* 11mnaa5e(cadena,largo) char *cadena; int largo; < struct text-info a; struct text-info n; int x,y; /* /* abre una ventana .obre 01 'cadona' y auigna * / un carater del teclado a l a var. 'tecla' */ /* /* 'a' dato8 do ventana actual */ ' e ' datos de ventana nueva, por abrir gettextinfo(&a); x=((a.winright-a.winleft)-(larg0+3)1/2; x=a w i n 1 eft +x ; y=((a.winbottom-a.wintop)-3)/2; y=a.wintop+y; . n. winlef t=x; n.wlnright=x+largo+3; n.wintop=y; n.winbottoai~y+2; textbackground(WH1TE) : clracr( 1; gotoxy(3,S); tecla=getch( i : textcolor(BLl4CK) ; margen( 1 ; cpu t 8 í cadena 1; puttext(n.winleft,n.wintop,n.winright,n.cen); textbackground(GREEN+BLINK) ; textcolor(BROW4)8 window(a.winleft,a.wintop,a.winright,a.winbotto~); 1 /* mensaje */ */ /* ayuda(nive1) int nivel; mostrará un mensaje de acuerdo al nivel de ayuda E /* s t ruc t text-i nf o a ; struct text-info n; int x,y,largo,ancho,j; /* */ 'a' dato8 de ventana actual * / ' 8 ' datos de ventana nueva, por abrir */ largo=55; anchor3; gettextinfo(&a); x=((a.winright-a.winieft)-(largo+3))/2; x=a.winleft+x; y=((a.winbottom-a.wintop~-4anchm+l-l)/2; y=a.wintop+y; n. winleft=x; n.wintop=y; n.winbottom=y+ancho+l; n w i n r i g h t=x+ 1 argo+3 ; gettext(n.winleft,n.wintop,n.winright,n.winbotto~,al~cen); window(n.winleft,n.wintop,n.winright,n.winbottom); textbackground(W1TE); textcolor(BtACK); clrscr( i ; margen( 1; . switch (nivel) E /* case O: j=2; mostrará mensaje deacuerdo al nivel de ayuda /* */ menu principal */ gotoxy(3,j++);cputs("Si no hay datos disponibles, elija la opcibn 1"); introducir los coeficientes compleJos X , ' ) ; gotoxy(3,j); cputs("y obtener los Coef. de Ttansf. de Fourier."): break; gotoxy(3,j++);cpute("para case 1 : j=2; /* menu tomadatos */ gotoxy(3,j++);cputs("El nQnraro In' debo r e t tal que: 2 elevado a la"); gotoxy(3,j++);cputs("potencia n ama manor o igual a 32; por 1 0 ' ) ; gotoxy(3,j); cputs("cua1 e1 valor máximo es n = S . " ) ; break; case 3: j=2; /* menu grafica */ g o t o x y ( 3 , j + + ) ; c p u t s ( " P a r a cualquier grafica seleccionada, puede graficar "1; g o t o x y ( 3 , j + + ) ; c p u t s ( " a 6 1 0 una parte de ella, eligiendo un intervalo dentro"); gotoxy(3,j++);cputs("del rango de datos del eje X , ampliándose la gráfica."); teclangetch0; j=2; /* uagundo annsaje de menu grafica */ gotoxy(3,j++);cputa("Al preeentar Q/U dri l a 8 grbficas el nhmro de ccmf. "1; gOtO~y(3,j++);cputs("graficadoses el DOBLB:, permitiendo ver el eopeotro " 1 ; gotoxy(3,j++):cputs("completo. El n G u r o de ccnf. perlaanece sin cambio. "1; break; 1 tecla=getch( 1; puttext(n.winleft,n.wintop,n.winr~ght,n.winbotto~,ai~cen); textbac kg round ( GREEN+BLINK 1 t textoolor(BR0WN) i window(a.winleft,a.wintop,a.winright,a.winb~ttom); 1 /* f i n de ayuda */ /* >anta1la( i 1 inicializa el modo grhfico */ i n t graphdriver ; i nt graphmode ; char pathdrivert int error = -1; 3 = "I* i detectgraph(&graphdriver,&graphmode); initgraphl&graphdriver,&graphmode,path-driver); error = gr-sultO; if ( error < O 1 C: clrscr( 1; printf ( "Error en initgraph : %s",grapherrormsg(error) 1; exit( 1): 1 cleardeviceí 1; maxx=getrnaxx( 1; maxy=getmaxy( i ; x1=40; x2=16 ; /* /* /* /* y1=15; y2=25 ; define lo separado que estarhn los ejes del marco de la pantalla. marco del monitor */ encuentra loo valores m4xioiro y mínimo */ /* rsctang le ( O ,O, maxx,maxy 1; rectangle~2,2,~arrxx-2,1~axy-2~: /* 1 fin do pantalla maxminirno( c */ */ obtiene el máximo de X obtiene el aráximo de Y */ /* i int i,negativo; nagat i vo- 1 ; fi ny=O ; tinx=nuradatos/2; Off6 e t m O ; i n i p 0; inixrnl; for (i=inix;i<=finx: i++) C if ífiny < datostil) finy=datosCil; if (iniy > d a t o ~ t i l ) iniy=datostil; 1 if (iníy<Oi 1 /* /* obtiene los valores minimo y iiidximo para nueva escala. /* traza off8atriniy*negativo1 fin de mx-minimo */ 1 ine( xi,y1 ,xl,iaaxy-y2) ; /* eje y */ */ 1 i ne ( xl ,maxy-ya-of fset, maxx-x2, maxy-y2-of foot i i 1 ine( xl-1, maxy-y2-of fset+l . ~ x x - x 2 + 1,maxy-y2-offaet+l) ; /* eje x */ ejes( 1 c /* /* 108 ejes i ine( xl-1, y 1,xl-1 ,maxy-y2+1) ; settsxtotylo(DEFAULTFO"ORIZoIR,I); outtsxtxylxl-10,6,"Yn); outtsxtxy(raaxx-7S,l!3~letrerosíclase3~; out textxyi m x x - 1 2 , W x y - o f f6et-28, " x" ; -1 /* de ejes */ Q7 XY */ */ */ */ */ /* escalaxy( 1 */ ohtine l a escala en pixeleo de io8 eje8 X y Y E char numerot 31 ; int i,y,xxx,yyy,xintervalo; float ii,residuo,yintervalo,rangox,rangoy; xxx=maxx-xl-x2 ; rangox=finx-inix; xintervalo=rangox/NUMDIVX; i f ( xi n ter va 1o< 1 1 xi nter va 1 o= 1 i unidadx=rangox/ xxx: yyy'maxy-yl-y2; rangoy=finy-iniy; yintervalo=rangoy/NUMDIVY; unidady=rangoy/yyy; /* /* escala X */ /* escala Y */ un pixel equivale a 'unidady' */ offaet=offsmtlunidady; ejeso; f o r (i=xintervalo;i<=rangox;i=i+xintervalo) € xxx= i / un i dadx; line~xxx+xl,maxy-y2-offset,xxx+xl,iaaxy-y2-off~et+6~; strcpyi numero, u ) ; itoa(i+inix,nurnero,lO); outtextxy~xxx+xl-8,nxy-y2-off8et+lO,nu~ro~; 3 for (ii=yintervalo;ii<=rangoy;ii=ii+yintervaloi € yyy=(ii+iniyi/unidadyi line~xl-2,raaxy-y2-yyy-offsgt,xl+4,~~-y2-yyy-offsot~; strcpy(nun\ero, u ) ; if (yintervalo>=l) E /* esoala si Y son enteros y=ii+iniy; reoiduor(ii+iniy-y)*lO; if(residuo>=6) y++; itoa(y,numero,lOi i 3 1 /* else gcvt(ii+iniy,2,nuenero); /* oeoala si Y son decimales outtextxy(4,rnaxy-y2-yyy-offset-4,numoro); 1 fin de escalaxy */ */ */ /* /* dibuja( 1 E gratioa un punto, traza una línoa con el punto antorior y otra con 01 o j o X */ */ int i,priinero,ultimo; i nt aax,aay ,bbx, bby ; float auxx,auxy; for(i=O;i<=finx;i++) if (i==inixi C pr€mero=i: i-rfinx; 1 for(i=primero;i<=finx;i++) iftip-finx) € ultitno=i; imfinx; /* /* /* /* obtione 01 prifaor eleatento dentro del rango do x (finx-inix). */ */ obtione el ultimo elemento dentro rango de x. */ */ de1 1 /* -- obtiene las coordenadas del punto au xx= í p r i mero- i ni xi /un i dadx i V: QQ A(aax,aay) , primero a graficar */ aax=auxx+xl ; /* obtiene las coordenadas respecto al monitor /* marca el punto A para que sea visible f aay=rnaxy-y2-~ffs1~t-auxy; circle(aax, nay,2)i */ for (i=primero+l;i<=ultirno;i++) C auxx=( i-inix) /unidadx: auxy=datosC i I /unidady; /* / * obtiene las coordenadas del punto B(bbx,bby) */ */ bbx=auxx+xl ; / * obtiene las coordenadas respecto al monitor bby=maxjr-)rS-of fset-ataxy ; /* line(aax,aay,bbx,bby); circle(bbx,bby,ai; i f ( ! mi s m a esca 1 a 1 1 /* /* aa x= bbx ; aay=bby : 1 fin de dibuja traza una línea entre l o s puntos A y B marca el punto B para que sea visible /* */ */ */ line(bbx,maxy-y2-offset,bbxDbby): el punto B será el punto A del siguiente trazo */ */ /* amplifica0 graficará un intervalo de datos */ E char intervalo,cadena~303,cadena2t30l,numeroC41; i nt in ic io, f i n ,i ,negat i vo; tecla=getch( 1; cloamgraphí 1; inicio-0; fin=numdatoa; do C ventana( ) : gotoxy(25,5); cputs("GRAFICAD0R X V 8 Y N L O G N"); gotoxy(38,7); cputs(l~trerooCclase1~; window(2,11,78,20~; gotoxyt 1 2 , 5 ) ; cputs("¿ Desea graficar un intervalo de datos espocífico (s/n1 ? "1; intorvalo=getch( 1; -- if ( (intervalo=='s' 1 I l(intervalo=='S' 1 ) C clrscri 1; 8 t r o p y ( a & * ~ , " ~ X f R O 01 dato : "1; ítoQ(nuadstor-9,nuawro,lO); gotoxy(l0,l); PtrCat(CQdORÍ, nurero) ? printf(*Do rrd datos, aolecione el ",numdatoe); puts("interva1o en X que dmaoa graficar."); do C gotOxy(35,4); gotoxy(l4,4); CpUt8( " *)i cputs("Apartir drl dato X = ? ? ? "1; scanf("Wd",&inicio): if (ínicio<li / * O<=inicio<=(nuLadatos-2~*/ meneaje("M1nimo el dato: 1",17); else if (inicio>(nurndatos-3)) iaensaje(cadena,23); 1 while ((inicio<l)::(inioio>(nu~ato~-3))); strcpy(cadena,"Hínimo e l dato s " 1 ; itoa(inicio+3,nuraeroD10): strcat(cadena,numoro); strcpy(cadona2, "Máximo el dato : " 1: itoa(nurndatos,numero,lO); R9 strcat(cadena2,numero); do C gotoxy(35,6); gotoxy( 1 4 , 6 ) ; cputs(" ; cputsi "Hasta el dato X = ? ? ? " 1; scanf( "Xd",&fin); if (fin<inicio+3) / * inicio<fin<=numdatos * / mensaje( cadena, 21 1 ; else i f (fin>numdatos) mensaje(cadena2,21); 1 while ((fin<inicio+3)I :(fin>numdatos)1; 'I nega t i vo=- 1 ; offset=O; f i nx=f i n ; f i ny=O ; inix=inic io; iniy-0; /* /* /* for (i=inix;i<=finx; i + + ) C if (finy < datostil) finy=datosEil; if ( i n i y > datoslil) iniy=datosCil; obtiene los valores mínimo y máximo para nueva escala. */ */ */ 1 if (iniy<Oi offset=iniy*negativo; pantalla(); escalaxy( ; d i bu ja í ; teclaegetch0; closegraph( 1; 1 1 while 1 /* ( (intervalo == fin de amplifica '8' 1 I I (intervaio=='S' */ /* rutfnaarafica0 t maxminimo( 1; pantalla(); eocalaxy( 1; dibuja( 1; amplifica( ; 3 / * fin de rutinaarafica toma-datocr( 1 I /* ; secuencia de subrutinas para graficar */ */ pido dato8 a usuario para calcular transformada */ complejo aux; fnt i, j , k ; aux. re=aux. im=O; for (i=O:i<MAXCOEF;i++) mCil=O; for (i=O;i<MAXCOEF;i++i E xCil.re=xxCfl.re=O; x~iI.ím=xxtil.i111=0; /* Inicializa Arreglos 1 for (irO;i<MAXCOEF;i++) realCil=iniagtil=8aagnltud~il~fa8o~il~O; ; s t r c p y ~ l e t r e r o r C l l , " I ~ ~ . "1; strcpy(letrerost01," strcpy(letreroíC21,"REAL "1; strcpy(letrero8t31,"MAGNITUD")I strcpy( letrerosC41, "FASE "1; ventana( ) ; */ do C gotoxy(23,2); got oxy ( 5,4 ) ; gotoxy(40,5); gotoxy ( 5,5 1; cputs("N L O G N - Transformada de Fourier"); if (inicio) ayuda(1); n"); cpute(" cputsl" (I ; cputs("E1 nQmero de coeficientes X=2 ; n = ? ' I ) ; scanf ( "Wd" ,En1; if (n>=HAX) mensaje("MAxirno n = 5; o 32 datos.",25); else if ín<li raensaje("Minimo n = 1; o 2 datos.",24); while((n<l)::(n>=MAX)); / * valida que: 1 <= n <= MAX * / 1 flx=pow(S,n); lxiflx; do E gotoxy(20,7); gotoxy(5,7); cputs(" 1; cputs("E1 signo 1-1 6 11 ea = I @ ) ; scanf ( "Yd",&signo) i if ((signo!=l)&&ísigno!=-l)) mensaJe("E1 signo 6610 es -1 6 1",23); while ((signo!=l)&&(signo!=-li 1; /* valida que: signo 1 3: -1 6 1 */ window(2,8,78,23); printf ( "E6criba los %d coeficientes compleajos do X . " , 1x1 ; got oxy ( 4,21; k=Q; j = Q ; for ( i = l ; i<=lx;i++) I printf ( "Xtldl .re= " ,i 1; scanf í "%f I' ,&aux. re); gotoxy( k, 5 ; scanf ( "Yf ,Eaux. ira) ; gotoxy(k+17,5); printf("Xt%dl.iap *,i); xi i Isxxt i Imaux; if( j==i3) C k=k+36; j.54; 1 else j++; if(i==20) € k=4; j=4: 1 1 ventana( i ; gotoxy(23,8); gotoxy(21,16); numdatos=lx; ? /* -- cputs("N L O G iY Transformada de Fourier"); cputs("Graciae, @spore un momento por favor..."); fin de toma datos / * -------*/ fourier( i c Variable GRAFICA /* CALCULA LA T F O - A complejo wk, hold, q; comple io f lxaux,aux: float v, f 1 x, p j ; int h,i,j,k,l,fk,jh; int nblock,iblock,lblock,lbhalf,istart; wk.re=hold.re=q.re=O; wk.imthold.im=q.im=O; f 1 x=pow( 2 , n ; lxsflx; for(i=l;i<=n;i++) mt i ]=pow( 2 , ( n-i 1) ; I 91 ---------* / DE FOURIER =/ for(l=l;l<=n;l++){ nblock=pow(2, (1-1) 1; 1 block- 1 x/ nbl oc k; lbhalf=lblock/S; k=O ; for( iblock=l;iblock<=nblock;iblock++) € fk-k; v=s i g no* 2*P I * f k/f 1 x ; wk. re=cos( v ) ; wk. im=sin(v) ; istart=lblock*(iblock-1); for(i=l;i<=lbhalf;i++)C j=istart+i; jh=j+lbhalf; aux=xC jh3; q=mul t í &aux,&wk i i aux=xC 53 ; xC jhI=resta( &aux,&q 1; xt j 3 =suma( &aux, &q 1; 1 for(i=2;i<=n;i++) C h=i ; if(k<rnCil) i=n+l; else k-k-mC i I ; ? 3 3 k=k+mC hl ; k=O ; for( j=l; j<=lx;j++)E if(k>=j) C holdrxt 33 ; xCfl=xtk+ll; xC k+ll =hold; 3 for(i=l;i<=n;i++) E h=i; if (k<m[ 1 3 1 i=n+l; else k-k-mt i 3 ; 1 k=k+mt h 3 ; 1 flxaux.ro=flx; f lxaux. im=O; E if ( pi igno>O1 for ( i = 1 ;i =1x; i++ aux=xt i 3 ; xt i Irdi vide( Sraux, &f lxaux) : 1. 3 for (i=l;i<=lx;i++) 1 € real t i i=x[ i I . re; imagC i I =xC i I im; . 92 /* fin de niogn */ /* --- polar --- * / for íi=l;i<=Lx;i++) f magnitudtil=sqrt( r e a l C i l * r e a l ~ i l + i a s a g ~ i l * i ~ g1:~ i ~ if (imagCil<Oi E if (realCii<O) fase~il=atan(imagCil/realCil~-PI; if (realCii==O) faseCil=-PI/2; if (realCil>O) faseCil=atan(imagCil/real~il); 1 else if (imagiil==O) i if (realCil<O) faseti]=-PI; i f ( rea 1 C i 1 ==O ifase[ i Ir0i if (rsaiIi3>0) fassfi3=ntan(imagCiI/rea1Cili; 1 else if (imagLíI>O) E if (reaiCiI<O) faeeCil=atan(imagtil/realCil~+PI; if ( reai L i ]==O 1 fase[ i I=PI/S; if (realCií>O) f a e e C i l = a t a n ( i i a a g C i 3 / r e a l C i l ) ; 1 /* 1 pj=O; for (i=L;i<=lxri++) if 1 /* drum (abs(faseCiI+pj-faseCi-ll)-PI) > O ) if í (faseCil+pj-faseCi-ll) < O ) pS=pj+PI*2; else if ( (faseCii+pj-faeeCi-11) > O ) pj=pj-P1*2; fin de fourier mcoef( c /* */ */ { faaeCil=faseCil+pj; I 1 ( fin de polar /* --- fin de drum --- * / */ /* i int i.3: ventana( 1; gotoxyt 23,21; : got oxy ( 28.4 i sruomtra los coeficientes W rnargení 1i cputs("N L O CY Fl Treneforarada do Fourier"); cputs("TABALñ DE COEPICIEWTIñS X " ) ; -- wi ndow( 2,6 79,23 i ; j=l; gotoxy(1,jig for ( i=l; i < = l x ;I++) t printf(" XtSdl.ro= % 5 . 2 f a , € p x x C i l . r e i ; printf(" X L % d l . f a i r 15.2f a ,i,xxt 11. im) ; if ((i12)==0)goto#y(l,++j); if ((i%68)==0) C jolt gotoxy(1,j); 1 1 1 /* espera( 1 s fin de rncoef */ */' /* -imag( 1 muestra la parte imaginaria de la transformada */ int i, j, k; margen( 1 ; ventana( 1 ; cputs("N L O G N Transformada de Fourier"); gotoxy(23,2); got oxy ( 33,4 ) ; cputs("PARTE IMAGINARIA"); window( 2,6,79,23 1 ; j=k=l; gotoxy( k, j ) ; for(i=l;i<=lx;i++) I I CXdI= X7.4f i ,irnag[ i I 1; p r i ntf ( if ((iX4)==0) gotoxy(l,++j); if ((i%68)==0) I j=k=l; gotoxy(k,j); 1 -- 'I, 'I 1 espera( 1 ; / % fin de m-imag */ -real ( 1 /* muestra la parte real de la transfomada */ i n t i, j,ks ventana( 1; margen( i ; cputs("N L O G N Transformada de Fourier"); gotoxy (23,21 ; 1 ; cputs( "PARTE REAL" gotoxy í 3 I, 4 1 ; window(2,6,79,23) ; j=k=l; gOtOXy( k, 3 1; for(i=l;i<=lx;i++) C printft" R C % d 1 = W7.4f ",i,realCil); if ( (i%4)==O) gotoxy( l,++j) ; if ((iY68)==0) C j=k=l; gotoxy(k,j); 1 -- 1 espera( 1 ; /* fin de at-real */ /* ' a m p1 i tud ( 1 muestra los valores de l a amplitud */ int i , j,k; margen( 1; ventana( 1; gotoxy(23,2); cpute("N L O a N Transformada de Fourier'); cpute("C0EFICIENTES DE MAGNITUD"); gotoxy ( 29,4i ; window(2,6,79,23); j=k=2; gotoxy( k, j) ; for(i=l;i<=lx;i++) I ,i ,magn i tudC i I 1 ; p r i nt f ( " A t %d I = %5.2f if ((iW4)==0) gotoxy(2,++j); if ((iW68)==0) { j=k=2i gotoxy(k,j); 1 -- 'I 1 t -.srpera( ; /* fin de in-amplitud */ /* 1-fasei muoatra los v a l o r e 8 de la taso int i, j , k ; ventanat 1 ; margent 1; gotoxy(23,2); cputs("N L O G N Transformada de Fourier"); cputs( "COEFICIENTES DE FASE" 1; got oxy ( 30,Q 1 ; window(2,6,79,23); j=km2; gotoxy(k,j); f for ( i= 1 ;i <=1 x; i++ 1 printf(" F C%dl= W5.2f ",i,fase[il); i f ((i%4)==0)gotoxy(2,++j); if (íi%68)==0) f j=k=2; gotoxy(k,j)i 1 -- 1 ' espera( 1; /*..,fin de m fase */ QA */ /* impcoef( i imprime io6 coeficientes X */ E int i; ventana( 1 ; gotoxy ( 23,3 1 ; gotoxy(24.5); margen( 1 ; cputs("N L O G N -- Transformada de Fourier"); cputsí"IMPRIM1R COEFICIENTES X " ) ; mensaje("¿ Está lista la impresora [s/n3 ? " , 3 3 ) ; if ((tecla=='s') :(tecla=='S')) E fprintf(stdprn,"\n\r 1; fprintf(stdprn,"Programa NLOGN - Transformada de Fourier\n\n\r"); fprintf(stdprn,"\n\r TABLA DE COEFICIENTES X\n\n\r'); for (i-1; i<=lx; i++) C fprintf (stdprn, XCXdl .re= %5.2f ' I , i ,xxC i I . re) ; " ,i ,xxt i 1 im) ; fpr i nt f ( stdpr n, Xi Xdl i m= %5.2f if ((i%2)==0) fprintf(stdprn,"\n\r"); I) I' 'I 1 1 /* fin de i m p c o e f */ /* irap-imag( 1 C int i ; ventana( 1: gotoxy(23,3): goto%)t(29,5): . SIGNO = Xd\n\r",signo); fprintf (stdprn," \ n \ r 1 . imprime la parte imaginaria de la tranafomada */ margen( 1; cputs("N L O G N Transformada de Fourier"); cputs("1MPRIMIR PARTE IMEJINARIA"); Está lista la impresora Cs/nl ? " ,331 ; menoaje( -- 'I¿ if ((tecla=='r') ::(tecla=='S')) E fprintf(stdprn,*\n\r I' 1; fprintf(etdprn,"Program NLOGN - Transfor :ada do Fourier\n\n\r'); PARTE IMAGI IARIA\n\n\r"); fprintt {stdprn, "\n\r tor( i n l ; i < = l x ; i++) C fprintf(stdprn," I C%dl= %7.4f ",i,im g C i l ) ; If ((iWQ)==O) fprintf (stdprn,"\n\r") 1 3 3 /* fin da imp-ia\srg imp-roa1 ( */ /* 1 imprime la par"s -ea1 de la transformada € int i; ventana( 1 ; gotoxy(23,31; gotoxy(27,S); margen( 1; -- cputs("N L O G N Transformada do Fourier"); -aputo( IXPRIXIR PARTE REAL" ? ; mensaje( " L EstA lista la impresora Cain3 ? " , 3 3 1 ; if ((t0Cla=-'8') ::(tecla=='S')) C fprintf(stdprn,"\n\r "1; fprintf(stdprn,"Programa NLOGN - Transformada de Fourier\n\n\r"); PARTE REAL\n\n\r"); fprintf í stdprn, " \ n\r fort i=l; i<=lx;i++i € fprintf (stdprn," R t%dl= %7.4f i,realC 13 i ; if ((iW4)==0) fprintf (etdprn,"\n\r"); 'I, 1 1 1 /* fin de imp-real */ (IC= */ _".. /* impamplitud( 1 imprime los valores de la amplitud */ t int i; ventana( i ; gotoxy( 2 3 , 3 ) : gotoxy(25,5); if margen( i t cputs("N L O G N -- Transformada de Fourier"): cputsí"IMPRIM1R COEFICIENTES DE MAGNITUD"); mensaje("¿ Está lista la impresora [s/n1 ?",33i; ( (tecia=='s' 1 I : (tecia=='Q' 1 ) C fprintf (stdprn, \ n\r 1; fprintf(stdprn,"Programa NLOGN Transformada de Fourier\n\n\r"); COEFICIENTES DE MAGNITUD\n\n\r"i; fpr i ntf ( stdprn, \ n\ r f o r ( i=l; i<=lx;i++) I fpr i nt f ( stdpr n , M C Xd 1 = X6.3f ,i ,magni tudC i I i i f ( ( i 964 1==O 1 fpr i nt f ( stdprn, " \ n\ r " ; 'I - I' 'I 1 1 I' 1 /* */ fin de impamplítud impfase( /* 1 imprime los valores de la fase */ E ' int i; ventana( 1; gotoxy(23,3) i gotoxy ( 25,5 1; margen( ; cputs("N L O G N Transformada de Fourier"); cputsí"IMPRIM1R COEFICIENTES DE FASE"); mensaje("¿ Está lista la impresora Cs/ní ? " ,331 ; -- if ((tecla=='s'i I:(tecia=='S')) C fprintf (stdprn," \ n \ r "1; fprintf(stdprn,"Programa NLOGN Transformada de Fourier\n\n\r"lt COEFICIENTES DE FASE\n\n\r"); fprintf(stdprn,"\n\r for(i=l;i<=lx;i++) E fprintf(stdprn," F tWdi= W6.3f ",i,faoeCil); i f ( ( iY4 ==O 1 fpr i nt f ( s tdprn ," \ n\r ' I i ; - */ */ textbac kg rbund ( BLÍ NK+WHíTE 1; clrscrt ; toxtoolor (BLACK): atargon( ) ; gotoxy( 2 3 , s ); window(2,2,79,24); textbackgroundíl3LACK)i textcolor(WH1TE); c l r 8 c r O ; cputs("N L O 0 N - TRANSFORMADA DE FOURIER"); gotoxy ( 27,9 1: gotoxy(27,ll)g gotoxy ( 27,13 ; gotoxy ( 27,15 : gotoxy ( 27,17 1; cputpi("1 -oputci("2 cputs( "3 cputs("4 cputP("0 if (inicio) -- ---- 1 -..."" CALCULA TRANSFORMADA DE FOURIER"); MUESTRA RESULTADOS"); GRAFICA RESULTADOS" 1: IMPRIME RESULTADOS"); TECP13INAR"); ayuda(0); textbac kground ( BLACK : textcolor(WH1TE) ; 98 __"..___ do c gotoxy ( 27,20 ; " X _'_I". _ I I " . . " _. __ cputs("1ntroduzca su Opci6n => "1; opcion=getchO; / * ayuda menu principal if (opcion=='\xlB') C ayuda ( O 1 ; textbac kg round ( BLACK) ; textcolor(WH1TE); */ 1 1 while (memchr(conjunto,opcions5)==NULL): 1 /* return opcion; fin d e menu * / /* muestra( 1 c char opcion=O; do C ventana( 1; got oxy ( 23 4 1 : gotoxy(27,8) ; gotoxy( 27,lo 1 ; gotoxy(27,12) ; gotoxy(27,14); gotoxy( 27,16 i ; gotoxy(27,18); do i gotoxy(27,21); menu para mostrar los datos en el monitor */ - cputs("N L O G N TRANSFORMADA DE FOURIER"); CpUt6("1 -- MUESTRA COEFICIENTES X " ) ; cputs( "2 MUESTRA PARTE IMAGINARIA''1: cputsí "3 -- MUESTRA PARTE REAL" 1 ; cputsí "4 -- MUESTRA MAGNITUD" 1; cputs("5 MUESTRA FASE"); MENU PRINCIPAL " i ; cputs("0 -- --- cputs("1ntroduzca su Opci6n => "i; opcion=getch( i ; 1 wh i 1 e ( memchr ( conjunto,opc ion,6 ==NULL) : switch(opcion1 E case '1': m c o e f ( 1; break; case '2': m-imag0: break; case '3': mareal( 1; break; case ' 4 ' : mamplitud( 1; break; case ' 5 ' : m f a s e ( 1 ; break) 1 1 1 while (opcion!='O'i; /* fin de muestra */ /* imprime( 1 c char opcion=O; do C ventana( ; gotoxy( 23,4): gotoxyí 2 7 , 8 1; gotoxy(27,lO); gotoxy(S7,12); gotoxy(27.14); gotoxy (27,16 1; gotoxy í 27,18); do E gotoxy( 27 21 1: cputs("N L O O N ------ CpUt8("1 CpUts("2 cput~("3 CpUts("4 CpUt8("5 CpUt8("0 -- - menu para imprimir TRlf3L3FO-A X"); IWRIHE BAaTE IMA(311YARfA"); IHPRIRE PARTE R R A L " ) ; IWRIXE PlAGMITUD"); IWRIXE F M E " ) ; #$W PRIPOCIPAL "1; IllPRIIlE COEFICIK"E3 97 dato8 DE FOURIER'); cputs("1ntroduzca su Opción => " 1 ; opcionagetchi 1; 1 whi le ( memchr ( con junto,opc ion,6 i ==NULL) ; switch(opcion) C case ' 1 ' : i m p c o e f í ; break; case ' 2' : imp-imag( ) ; broak; caso '3': imp-real ( 1 ; break: case ' 4 ' : impamplitud( 1; break; case '5': impfase( 1 ; break; 1 1 while (opcion!='O'); 108 */ /* 1 fin d e imprime */ /* graf ita( 1 c i nt i ,offaetx; char opclon=O; do c ventana( 1 ; gotoxy(23,4); cputs("N L O G N got oxy ( 27 , 8 1; gotoxy(27,lO) ; gotoxy(27,12) ; gotoxy( 27,14 1 ; gotoxyí27,16 1; do c gotoxy ( 27,21 1; cputs("i cputs( "2 cputs( " 3 cputs( " 4 cputs( "O ---- --- - menu para graficar los datos */ TRANSFORMADA DE FOURIER\n\n"); GRAFICA PARTE IMAGINARIA")! GRAFXGZA PARTE REAL" ; GRAFTCA NAGNITUD" 1 ; GRAFICA FASE") ; MENU PRINCIPAL ; 'I) cputs("1ntroduzca su Opcibn => * ' I : opcionrgetchí); if (opcion=='\xlB'i /* ayuda menu grafica * / ayuda ( 3 ; 1 wh i le ( memchr ( conjunto,opc ion, 5 ==NULL) ; mismaescala=FALSO; for(i=O;i<MAXDATO;i++) datostil=O: / * limpia arreglo para g r a f . * / off set xanuuuia tos+1 ; awitchíopcion) { case '1': claserl; / * IHAGINARIA * / for(i=l;i<=nuatdatos;i++) datos~nusadatos+i3=datostoffs~tx-il=i~gtil: break; case ' 2 ' : claser2; 1 % REAL * / for(i=l;i<=nuiadatos;i++) datosCnumdator+il=datostoff~etx-i~~realtil; break; case ' 3 ' : ClaS0=3; / * MAGNITUD */ for(i=l;i<=numdatos;f7+) datostnumdatos+il~da~o8toff~etx-il=1nagnitud~il; break; case '4': claser4; /* FASE * / for(i=i;i<=numdatoe;i++) datoolnumdatoa+~3~datostoffsetx-il~fasetil; break; 3 if(wemchr(conjunto,opcion,4)!=WLL) 3 1 w h i l e (opcion!='O' 1 ; ? /* fin de grafica */ 98 4 nunbatoo=numdatos*2; rutínagraficaf); /* grafícarQ nudatoe=nudatos/S~ */ main( 1 { char e Jecuta; i nt ca lcu lado=FALSO; inicio=CIERTO; do C e jecuta=menu( ) ; switch(ejecuta1 C case ' 1 ' : if (!calculado) inicio = CIERTO; toma-datos( 1 ; fouriero; calculado=CIERTO; break; muestra( 1; case '2': if (calculado) break; graf ica( 1 ; case ' 3 ' : if (calculado) break; case ' 4 ' : if (calculado) imprime0; break; 1 if ((!calculado)&&(ejecuta!='O')) wnoaje("N0 HAY DATOS DISPONIBLES",24); inicio = F A L S O ; 3 while (ejecuta!='O'); ventanat 1;clrocr( 1; 1 /* F O U R I E R */ 99 C A - ------- P I T U L O MSCRIPCION C0MPEM)IO DE PROORAMAS. EJEMPLOS. LISTADOS DE PRO-. \. Prouraiaas oara Series de Tiemoo DESCRIPCION GENERAL Los temas comprendidos por los programas considerados en este proyecto, son diversos y muy extensos, dependiendo del grado o profundidad del estudio que se est6 efectuando. El objetivo de los programas es servir como ayuda en el estudio y solución de problemas relacionados con Análisis de Series de Tiempo. Por lo tanto pueden 601" usados como algoritmos básicos para el desarrollo de programas más completos que cumplan con todas las necesidades del ususario. Debido a la diversidad de temas involucrados , el análisis y desarrollo teórico requerido no es presentado en esta obra; sin perder por ello su aplicación, ya que existen diversos textos que cumbren de manera abundantemente con estos temas. La bibliografia incluida, presenta una lista de ellos con su colocación estandar para facilitar s u consulta. Algunos de los temas relacionados con éstos programas son : operaciones sobre arreglos y matrices, polinomios , análisis espectral , filtros digitales spike , análisis do espectros, coeficientes de corelación y autocorrelación, y un graficador de datos X Y. Y . . Los datos de entrada requeridos por los p r o g r a m s son descrito8 en el inicio del liatado de cada uno de éstos, además se incluyen ejemplos para la mayoría de ellos. La rutina principal de cada uno está basada en el algoritmo bdaico. Para correr los prograaaas no 86 requiere de una computadora especial; en la mayoría de los programas os posible imprimir los datos y resultados, y en alguno8 otro., l o s datos y resultado8 son leídos o escritoo en archivos en disco. Los archivos fuente se incluyen en el disco marcado con el título de: Archivos Puente *.G En el compendio presentado a continuacibn, se ofrece una lista de los programas, una brovo deacrlpclÓn de la funoi6n que realizan y las subrutinas que incluyen ( en letra8 mayi.isculas 1. Más adelante se muestran en el mismo orden del compendio , ejemplos para ejecutar los programas. A la izauierda d e l nombre de cada uno de los programas listado8, se indican las páainas d d gjemulo y del listado. 10 1 _I_^- .. Proaraias Para Series de Tiemo COMPENDIO DE P R O G W " PROGRAMAS PARA ANALISIS DE SERIES DE TIEMPO 'I 137: ARITMET1CA.- Realiza operaciones aritmdticas con nt3meroS complejos. 139: MAINE .- Permite la inversión de s i mé t r i ca ; 141: NORMEH .- Normaliza 142: NORM1 .- Normaliza 143: NOREUG .- dividib-idolo También normaliza u n arreglo, por el elemonto ds,grande una matriz u n arreglo, dividiendo cada del arreglo. elemento por el valor r.m.6 un arreglo, dividiéndolo por el primer elemento del arreglo. del arreglo. 144: CROSS 107, 145: FOLD 107, 146: POLYDV .- Calcula la correlación cruz de do8 vectores, a partir del coeficiente de autocorrelación cruz para corrimiontos en el tiempo. Este progr-aaira ewpisa como subrutina DOT , la cual calcula el producto punto de dos vectores. .- Realiza la multiplicación de polinomios, también llarnada convolución. .- deconvoluci6n, EfectJa la divioi¿n do dos polinmi08 ¿ con coeficientes rmales o complejosi incluye l a s 8ubrutincrs ZERO que inicializa con ceros un arreglo y MOVE la cual copia u n cierto n J m r o de elementos de un arreglo a otro. 108, 147: PSRQT .- Encuentra primeros m+l " coeficientes de la raiz cuadrada de 108 pol inomio. 102' un .. Prouramaa Para Series de T i m o 148: POLRT 35: POLYEV 109, 151: FADDEJ .- Calcula las raices de un polinomio con coeficientes reales. .- Efectiia la ovalución de polinomios con coef icientss reales o comple jos. .- Invierte una matriz no necesariamente simetrica, empleando el método de Faddeev & Somiinskii; emplea las subrutinas: MOVE, BRAINY,ZERO y SCALE. i l l , 154: EUREKA .- Encuentra 112, 156: INVTOP .- EfectQa 114, 158: TRIANG .- Obtiene 114, 159: SPUR 160: MATRAN 162: COSTAB 76, la solucibn de las llamadas ” ecuacicmes normales de canal simple” ; relacionadas con problemas de predicción y filtros por series de canal simple. la inversión de una m a t r i z Toplitz, empleando como subrutinas a EUREKA y a IHPULS la cual forma la respuesta impulso en un vector a partir de una posición. la factorización triangular de una m a t r i z y eu tranopuosta. .- Calcula la suma de la diagonal de una matriz. .- Emplea la perinutación ordénada en l a transpuesta do una matriz rectangular. .- una A partir do una longitud de onda genera tabla de cosenos. 163: SINTAB .- A 164: COSP .- Calcula 01 k-Ooimo valor de una transforaacián de seno 6 coseno. partir do una longitud de onda genora una tabla do senos. 83: FOURIER.- Calcula la Trnn~formadade Fourier; a partir del d t d o “ n log n” ¿ tranaformadr rQpida de Fourier. Emplea arit-tica compleja y permite graficar: parte real, parte imaginaria, magnitud y fase. Incluye las subrutinas POLAR y DRUM. c 103 166: TRIG .- Calcula Fourier 167: DRUM .- u n valor de la Transformada de a partir de sumas de ihngulos en f ó rmu 1 as t r i g onomé t r i c a s . Calcula la fase de una curva continua. 35: CAST .- Calcula 168: POLAR .- Calcula 115, 169: SHAPE .- Calcula 117, 172: SPIKE .- Calcula 119, 175: SPIKER .- Calcula 120, 179: SHAPER .- Calcula el filtro "weaveshaping" 6 de forma de onda, similar a SHAPE pero más 27, las transformadas Seno y Coseno a partir de los coeficientes de una forma de onda. Emplea aritmetica compleja y las subrutinas POLAR, DRUM y POLYEV. Además grafica: transformadas, magnitud y fase. Los resultados pueden ser escritos en disco y / o en la impresora. los coeficientes de fase de un vector complejo el filtro "weaveshaping" Ó de forma de onda, emplea la8 subrutinas do CROSS,EUREKA,DOT,FOLD y ZERO. el filtro "spiking", en la posición bptima de 'spike'; emplea las subrutinas de: IMPULS, SHAPE, EUREKA, DOT, FOLD, MINSN y ZERO. el filtro "spiking", en la posición bptima de 'spike', similar a SPIKE pero más eficiente, emplea l a e subrutinas de: INPULS, SHAPE, EUREKA, DOT, FOLD, MINSN, ZERO y además SIDE. eficiente, emplea las subrutinas de CROSS, EUREKA, DOT, FOLD, UINSFJ, SHAPE, ZERO y aüe,cehe SIDE. 184: COSTR .- Calcula 185: SMOOTH .- desarrollos Calcula una 186: AUGURY l a transformada dol cosono a partir d e coeficientes empíricos de autocorre lac i ón. e s t i m c i á n dol espectro, por de "smoothing operation a del períodograma, a partir de la fórmula de Hammi ng-Tukey .- . Calcula la predicción multicanal Winor. 104 .. 1 9 2 : OMEN 121, .- Rutina auxiliar para AUGURY, emplea subrutinas: MAINE, BRAINY y HEAT. 1 9 7 : SISMOGRAMA 1 2 2 , 1 9 9 : BRAINY las .- Calcula un sismograma marino sintético, a paritr de un grupo de coef ic4erttes de ref iexión. .- polinomiales, Desarrolla una multiplicación de matrices es la contraparte de la rutina FOLD, sólo que para multicanal. 2 0 1 : MACRO .- Calcula la correlaci6n cruz para mufticanal, con muestras de series de tiempo de p-canal. 1 2 3 , 204: MACR0EJ.- 1 2 6 , 207: MACRO2 Calcula In correlacibn cruz multicanal con datos para un ejemplo; genera un archivo Ymu~stras.dat* con los datos y otro "coeficim.dat" con los coeficiontes de correlaci6n. Permite imprimir los archivos generados. .- Subrutina creada para leer e imprimir archivo6 generado8 por e1 programas 108 XACROEJ. 209: DATOS 129, 210: .- Con lo8 dato. dol ejoatpo del XACROEJ croa el archivo "d8t08.d8ta, el cual e8 utilizado CQBK) archivo do datos de entrada por e1 programa IACROGRL. HACR0GRL.- Veroi6n d o genoral de MACRO, permito seleccionar el tipo do archivo con 108 datos; genera los archivos "raedicion.dat" y nccorrola.datn. Permito imprimir los archivor generadoe. 1 3 2 , 2 1 4 : HEAT .- 133, 216: HEATEJ .- Caloulr la oorrolaeibn cruz empírica un ejemplo, confsidersndo datos Calcula la oorrelacion aruz de eorio8 do tiempo, aon núrnmro de muestras distinto do elementos de la serie do al n8-m tiempo. Permite imprimir lo. teoultados. para 108 generadas por 0 1 programa MACROEJ en el archivo "rn~08tras.dat". Permite imprimir los archivos generados. 105 .. _ I P Proatamms mara Series de TiemDo 219: QUADCO 136, 223: COHERE .- Calcula el espectro de cuadratura y autoespectro, de una función de correlacibn multicanal. .- Calcula magnitud y atraso de fase de coherencia de dos series de tiempo. la 226: GRAF1CA.- Grafica puntos en X vs. Y, toma los datos de archivo y los almacena en una Matriz CdatoslCcanalICtablal; grafica c/u de los canales juntos o separados, además de poder graficar únicamente una parte de l a gráfica, aumentando así la escala. Este graficador es similar al empleado por los programas FOURIER y CASTGRL. 235: GRAFIC2.- Es un graficador muy similar a GRAFXCA, cambiando el orden de lectura de los datos de archivo, está diseñado para graficar los archivos generados por los programas MACROEJ y MACROGRL. Alguno6 programas referentes al Análi8ia d e Q e t i o ~ 82 Tiemng permiten al usuario imprimir lor resultado8 obtonido8, sin embargo los que carecen do osta opcibn puodon imprimirdirectamonte dol monitor , introducióndo do =nora simultbnoa los comandos siguientes: <SHIFT> <PRINT SCREEN> . 106 EJEMPLOS PARA LOS PROGRA)(AS DE ANALISIS DE SERIES DE TIEHPO FOLD - Convolucián Escriba el Orden de 105 polinomios A 2 y E! respectivamente. 3 Escriba los coeficientes del polinomio A . c11 = 1 C2-J = 2 Escriba los coeficientes del polinomio B. c11 = 1 c-] c31 = -1 = (3.5 Producto de polinomio pi )c E : C 1 3 1 .(3:)(:1C 2 1 1.000 c31 -1 .5(:)(:) C 4 1 P O L Y D V Escriba N, M y L respectivamente. P I L 1 5 Escriba los coeficientes d e DIVISOR. Cll.rea1 = 1 Cll.imag.= (3 C2l.real = -0.5 C21. imag. = O Escriba io5 coeficientes de DIVIDENDO. C11-real = 1 ClI.imag.= C) Coeficientes del cociente 9. QCiI = c 1.0000 , Q.OO0O 3 QCZI QCS3 QC41 QC51 = C = C = C = C 0.5000 0.2500 0.1250 0.0625 , (:).O000 , , O.CiócSó 3 1 O.(:)OOO 0.00130 3 1 , 1 .o00 P S U R T Matriz I n v e r s a . 109 ADJUG ADJUG ADJUG ADJUG ADJUG L1.1 E 1 7 Ci.1 CL3 C 1 1 E31 C 1 1 C41 C2J C27 ADJUG C i z l ADJUG C 2 7 ADJUG Cil C23 C31 C41 ADJUG C 3 1 C 1 1 ADJUG CJI E 2 1 ADJUG C31 E31 ADJUG C 3 1 c41 ADJUG C 4 1 E 1 1 ADJUG C 4 1 Cizl ADJUG C 4 1 C 3 3 ADJUG C 4 3 C41 E U R E t: A Escriba longitud del filtro. Z ' & Escriba los coeficientes de autacorrelacían. C i l = ir', c21 = 4 Escriba los coeficientes del lado derecho. c 1 1 = ,.L -, c27 = <:I 111 I N V T O F ' E s c r i b a e l orden de l a m a t r i z : T p l i t z . 5 Escriba l a pi-imera fi1.a de la m a t r i z d e T p 1 I . t ~ . c11 = I(:) C2-J = 4 c31 = 1 C43 = 4 c51 = 4 Matrix Inverasa : 112 113 S P U R E s c r i b a el a r d e n de la matriz. 3 Escriba MEllClI MCZlC11 M C 3 7 C Y. 3 MC 1.1 CLI MC2lC23 MC3lC21 MC1lC3l MC2lC31 MC3ICS3 las c o e f i c i e n t e s d e la Matriz(i,j). = 5 = 6 = 7 = 3 = 4 = 5 = 1 - 2 = 9 S u m a de la D i a g o a n l ie.(X) S H A P E Los c o e f i c i e n t e s C de la a c t u a l s a l i d a del f i l t r o s o n : CC31 = -1.(:)14832 C1.21 = 0 . i 8 H i . 3 4 CC11 = 1.350507 El rangcri de e r r o r cci.acir6tico e n t r e d e s e a d a y a c t c i a l es : 115 0.6789634 Escriba e1 n i h e r n de coeficientes d e A (rni-1) = 2 C H A P E Los coeficientes del filtro de forma AC11 = (:).63388(3 AC21 = 0.699454 d e onda son : El rariqo d e error cctadrdtico entre deseado y actual es : 0.8825136 Los C o e f i c i e n t e s d e l a onda de e n t r a d a B son: Los c o e f i c i e n t e s del f i l t r o 'spike' s o n : La p o s i c i ó n b p t i m a d e ' s p i k e ' es : 12 El r a n g o d e e r r o r ciiadratico e5 : Los c o e f i c i e n t e s de '5' 0.2861007 son : 117 S P I t: L.05 E Coeficientes de 1.a onda de e n t r a d a E 5on: L.as coeficientes del filtro ‘spike‘ son : La posición O p t i m a d e ‘spike’ e5 I 12 E l rariyo de e r r a r cuadrAtico e5 : 0.2862729 Los co~ficientesde ‘5’ san : E:,%pern i...in momenta p a r f a v n r . . C P I K E R Los Coeficientes de la onda d e entrada E{ son: Los coeficientes del filtro 'spiker' son : Los coeficientes del 'E' son : La posición ó p t i m a de 'spike' es : 5 El a r r e g l o de errores es : E l error minimo es el Error C S I = (3.1(:)2(1094 El error de rango cuadrático es = 0.09(:)Cr908 Los coeficientes de 'espacio' san : !3 I4 k P E R E s c r i b a el nilmero c i ~ coeficientes d e A (m+l) = 5 Los c o e f i c i e n t e s C d e la a c t u a l s a l i d a d e l f i l t r o s o n : CC21 = 0.198428 CC31 = 0.07430C) CC41 = 0.425139 CC61 = 0.85(3364 CC71 = Ci.895027 CC81 = (5.332212 C:C1(31 = -0.076546 CC111 = -0.012018 CC11 = (2.297755 CC53 = 0.776816 CC9.1 = --Ci.(l91?91 E l e r r o r m i n i m o es el E r r o r [81 = : (:~.1200710 El error de rango c u a d r á t i c o es = : 0.0769016 120 - “ . _ l f - I l y l l _ SICMOGRAFO MARINO O p e r a d o r d e P r e d i c c i ó n de Error --(11 1 O(:) (3(3 . 121 :E C- r i b a NRA , N C A y I-A respect i vamente. 3 2 -.... ?I 2 3 Escriba las LB = 1 CIICll = CllC21 = c23c11 = [2][2] = LB I coeficientes de B Clcl Crenyl Ccoll. (3 (3 1 )(: 2 C l l C 1 l = (:I c 1 1 c 2 1 = 3. c21c11 = 1 c21c21 = 1 LB = 3 CiICIl = 1 CilC21 = 1 C 2 1 C i l = (1) C 2 I C 2 1 = (3 L o s coeficientes de C. t l A C Ft í3 -- Ejemplo Proyrama M A G R O - Ejemplo TABLG DE M U E S T R A S X = Y X C I l = 54.06 X C 2 3 = 35.06 X C 3 1 = 19.06 XC41= -11.94 XES]= -15.94 XC61= -39.94 XC71= -26.94 XC81= 45.0tS X C I O l = 79.06 X C 1 1 1 = 38.C36 X C 1 2 1 = 21.O6 XC91= 107.06 X C 1 3 Y = -8.94 XC143= -23.94 X C 1 5 1 = -36.94 XC161= -22.94 XC181= 85.Ci6 XC191= 84.06 XC2(:il= 7 1.O6 XC173= 36.r.i6 X C 2 1 ] = 43.i:)h X[22]= 2(].(:)& X[23]= 13.(>6 X [ 2 4 ] = (:).(]6 X C 2 5 1 = -5.94 XC261= -25.94 XC271= -30.94 Xt281= -40.94 X C 2 ? 1 = -42.94 XC301= -39.94 x c 3 1 1 = -32.94 X C 3 2 1 = -12.94 X C 3 3 3 = -1.94 XC341= -3.94 XC351= 1.06 XC361= -4.94 XC371= -18.94 XC381= -36.94 XC391= -38.94 XC401= -44.94 XC411= -46.94 XC421= -45.94 XC431= -41.94 XC441= -34.94 XC4SIz -32.94 XC461= -11.94 XC471= -0.94 XC481= -5.Y4 XC4?1= -16.94 XL501= -22.94 X C S l I = -30.94 X C 5 2 1 = -39.94. X C 5 3 1 = -42.94 XC541= -44.94 X C 5 5 1 = -38.94 XC561= -29.94 XC991= 15.06 XC601= 20.06 XC577= -10.94 XC581= 3.06 XC611= 24.06 XC623= 1 . 0 6 XC637= -18.94 XC641= -38.94 X C t ? 5 1 = --33.94 XC6hl= 10.06 XC671= 75.06 XC681= 91.(I)& XC691= 56.ct6 XC7(:)1= 39.i:)6 XC711= 16.06 XC721= -?.94 X[7J]= . r ~ . 9 4 XC741= -55.94 XC751= -31.94 XC761= -6.94 XC781= 51.O& XC791= 77.06 XC801= 49.06 XC771= 15 .O6 XC811= 19.06 XC821= 17.06 XC833= 7.06 XC841= -7.94 XC851= -25.94 X C 8 6 1 ~-39.94 XCS71= -42.94 XC881= -23.94 XCY11= 49.06 XC921= 30.06 XC891= 8.06 XC901= 47.06 XC931- 12.(36 XC941= -2.94 XC951= 0 . 0 6 XC961= -16.94 XC971= -30.94 XC981= -39.94 XC991= -9.94 XC10(31= 27.06 X C l ( : ) í l = 9 1.O7 XC1023= 49.67 X C 1 ( 3 3 1 = -60.93 XC1041= -93.93 X C l ( 3 5 1 = -63.93 XClC)61= -63.93 XC1(371= -91.93 XC1081= 22.07 X C 1 1 1 1 = 34.07 X C 1 1 2 1 = 1(:)2.(37 XC1(:)91= 38.07 XC1101= -43.93 X C 1 1 3 2 = 23.07 XC1141= 67.07 X C l 1 5 1 = 1cS4.(37 XC1161= 109.07 XCl177= 174.07 XClI81= 82.07 XC1191= -63.93 XCIZ(~)l= -63.93 X[12t]= -t33.?3 X[12L]= -&3.92 X[123]= -51.93 X[124]= -6S.93 X C 1 2 5 Y = -26.93 XC13611= -49.93 XC1271= -52.93 XC1281= -35.93 xc1291= -44.93 xc1301= -33.93 X C 1 3 1 1 = -52.93 X C 1 3 2 1 = -37.93 X C 1 3 3 3 = -63.93 X[134]= -34.93 X C 1 3 5 ] = -16.93 X[136]= -27.33 XC1371= -28.93 XC1381= -46.93 XC1393= -6T4 . 93 X C 14.01= -60 93 XC1411= -57.93 X C 1 4 2 1 = : -45.93 X C 1 4 3 1 = -48.93 XC1443= --63"92 X C l 4 5 7 = -60.93 XC1461= -54.33 XC1471~ 0.07 XC1481= 62.0'7 XC1497- -25.93 x[15(:)1= - 3 t : i . C ? 3 X[I51:1:: 7.07 X C 1 5 L ] = . -:y?"c?:., X C i . 5 4 1 = -41 - 9 3 X C 1 5 5 1 = --5(3.92 XC1561= -28.9:5 x1:1531= -43.93 --- . 123 824 P r a g r a m a P! A C H Q C Q E FI C I ENTEZC - Ejemplo DE CORFIELRC T ON G T A B L n DE MUESTRAS X = Y X C l l C l l = 54.06 XClICÍ-I = 91.07 XCllC31 = -31.97 X[2][1.] = :55.(56 X[2]C2] = 49.íj7 XC21C31 -35.97 xc31cy1 = -31.97 XC3][1] = 19.<jh X[3]C21 = -&:).Y3 93 xc41c31 = 99.03 XC4lC11 = -11.94 XC4lCil = --t=lT X C 5 I C 1 1 = -15.94 XC57C23 = -6TCJ 93 xc51c31 = -34.97 X[&][J.] = -39.C34 XC6:IC:XJ -63.93 XC6IC31 = -97.97 XC'7lClI = -2c4.94 XC711:2l = -51.,93 xc71c31 = 23.(33 X C S l C 1 1 = 45.06 XC87C21 = 22.07 XCElC31 = -47.97 XC7lC11 = 1Ci7.06 XCYlC21 = 38.07 XC9lC31 = 15.03 xc1(:)]C11 = 7c?.t:,& xc1[:)1C3l = -43.93 xc1(:~Ic31 = -70.97 x c 1 1 1 c 1 1 = 313.c.,¿ X C i l l E 2 7 = 34.07 xc111c31 = Y.C)3 X C l 2 1 C 1 1 = 21.06 XC121C2l = 102.07 XC12lC31 = -47.97 XC13lClI = -8.94 XCl3lC21 = 23.07 XClS7t31 = 24.03 XCl4lCil = ia.94 XC14lCLl = 67.07 XC14lC31 = 29.03 XC151C11 -36.94 XC15lCLl = 104.07 XC15lC31 = 54.03 XC16lC11 = -22.94 XClblC21 = l(79.07 XC16lC31 = 118.03 XC17lC11 = 36.06 XC17lC21 = 174.07 XC17lC31 = 73.Ci3 XC18lC11 = 85.06 XCl8lC21 = 82.07 XC18lC31 = -27.97 XC19lCll = 84.06 XCl91C21 = -63.93 XC19lC31 = 43.03 XC2OlC11 = 7l.C)ó XC207C21 = -63.93 XC2OlC31 = -28.97 XC213Cll = 43.06 XC21lC21 = -63.93 XC21lC31 = 62.03 XC22][1] = 2(:).(56 XC22lC21 = -63.93 XC22lC31 = -5.97 XC231C11 = 13.Ct6 XC23lC21 = -51.93 XC231C31 = -27.97 XC24lC11 = 0.06 XC24lC23 = -63.93 XC24lC31 = -51.97 XC2SlC31 = -1.97 XC25lC11 = -5.94 XC25lC21 = -26.93 XC26lCJ.l = -25.94 XC26lC21 .= -49.93 XCZ6lC31 = -19.97 XC271c11 = -30.94 XC27lC21 = -52.93 XC27lC31 = 12.03 -35.93 XC281C33 = -18.97 XC28lC11 -40.94 XC28ltZl xc291c11 = -42.94 xc297c21 = -44.93 XC29lC31 = -12.97 XC30lC11 = -39.94 XC3C)IC21 = -33.93 XC3OlC31 = 15.03 XC31lC31 = -38.97 XC31ICll = -32.94 XC31lC21 = - 5 2 . 9 3 xc321c11 = -12.94 xc321c21 = -37.93 xc321c31 = -11.97 XC33][1] = -1.94 XC33lC:?1 = -6.7 93 XC33][3] = 101.tj3 XC341Cll = d.94 XC34lC21 = -34.93 xc341c31 = -44.97 XC35lC11 = 1.Oh XC35lC21 = -16.93 XC35lC31 = -16.97 XC36lC11 = -4.94 XC36lC21 = -27.93 XC34lC31 = -16.97 XC37lC11 = -18.94 XC371C21 = -28.93 XC37lC31 = 58.03 XC38lC31 = -70.97 XC38lCll = -36.94 XC38lC21 = -46.93 XC39lCll = -38.94 XC39lC21 = -h3.93 XC39lC31 = -16.97 XC40lClI = -44.94 XC4OlC21 = -60.93 XC4OlC31 = 9.03 xc411c11 = -46.94 xc411c21 = -57.93 xc411c31 = 54.03 x[:42lclI = -45.94 XC42IC21 = -45.93 xc421c31 = 1.03 X C 4 3 3 C 3 7 = 79.03 XC43lC11 = -41.94 XC43lC23 = -48.93 XC44lC11 = -34.94 XC44lC21 = -63.93 XC44lC31 = -49.97 XC45lC11 = -32.94 XC45lC21 = -60.93 XC451C31 = -27.97 XC461C11 = -11.74 XC46lCLl = -34.93 XE461C31 = &:).O3 XC47lCil = -0.94 xc47:1c21 = (>.(:I7 xc471c31 = -75.37 XC481C11 = -5.94 XC48lC21 = 62.07 XC48lC3l = -54.97 XC49lC11 = -16.94 XC49lC21 = -25.93 XC49lC31 = 4.03 xC5(:ilc11 = -22.94 xc501c21 = -:30.93 xc501c31 = 13.Ct3 x c 5 1 1 c 1 1 = -30.94 XC511E21 = '7.07 xc311c31 = -7.97 X C 5 2 l C 1 1 = -39.94 XC52lC21 = -39.93 xc521c31 = -11.97 XC59lCll = -42.94 xc531c21 = -43.93 xc531c31 = 21.0.3 XC541Cl.l = -44.5'4 XC54lC21 = -41.93 XC54lC31 = -15.97 x c 5 5 1 c 1 1 = -38.94 XC55lC21 = - r3 -L -i .93 xc551c31 = -18.97 .4. . --? . . i -? 127 I _ " I - --*, . - -- - *---...*. ". - d . 128 t l R :í R O - GENERAI- Escr-iba l o n g i t u d de C o r r e L a c i O n C r u z : P r o g r a m a M R C I4 U TABLA -I 1Ci General DE MUESTRAS X = Y X C l I = 54.06 X C 2 1 = 35.ci6 X C 3 3 = 17.06 XC41= -11.94 XCSI= -15.94 XC61= -39.94 X C 7 1 = -26.94 XC81= 45.06 X C 9 1 - 107.(:)6 XClt:)l= 79.06 X C 1 1 1 = 38.06 X 1 1 2 1 = 21.O6 X C 1 3 7 = -8.94 XC141= -23.74. X L 1 5 1 = -36.94 XC16'J= -22.94 X C 1 7 1 = 36.(:)6 X C 1 8 1 = 85.06 XC191= 84.06 X C X ) I = 71.06 X C 2 j . ] = 43.(3& X [ S 2 ] = 2(:i.(j6 X C 2 3 ] = 13.(j& XC24]= (:).(:)&, X C 2 5 1 - -5.94 XC261- -25.94 XC271= -3ct.94 X C 2 8 1 = -40.94 xc291= -42.94 XC301= -39.94 X C 3 1 1 = -32.94 xc2;21= -12.94 X C 3 3 1 - -1.94 'xC341= -3.i?4. XC351= 1.06 XC361= -4.5'4 X C 3 7 1 = -18.94 XC387= -36.94 XCS91= -38.94 XC401= -44.94 XC411:; -46-94 XC421- -45.94 XC431= -41.94 XC441= -34.94 XC451= -32.94 XC461= -11.94 XC471= -0.94 XC481= -5.94 X C 5 1 3 = -30.94 X C 5 2 1 = -39.94 XC491- -16.94 XC501= -22.94 ' x C 5 3 1 = -42.94 XC541= -44.94 XCSSl= -38.94 XC561= -29.94 X C 5 7 1 = -10.94 XC583= 3.06 XC591= 15.06 XC601= 20.(:)6 XC617= 24.06 XCb21= 1.06 XC631= -18.94 XC641= -38.94 XC6.71~75.06 XC687= 91.O6 X C 6 5 1 ~-33.94 XC661= 1(:).[35 XCts91= 56.06 XC701= 39.06 X C 7 1 1 = 16.06 X C 7 2 1 = -9.94 X C 7 3 1 - -22.94 XC741= -35.94 XC751= -31.94 XC761= -6.94 XC791= 77.06 XC8(:)1= 49.06 XC771= 15.06 XC781= 51.O6 XC831= 7.06 XC841= -7.94 XC811= 19.06 XC821= 17.i:)h XC851= -25.94 XC861= -39.94 XL871= -42.94 XC8€31= -23.?4 XL891= 8.C)h XC9(57= 47.06 XC:911= 49.Ci6 XC9i-I- 30.06 XC937= 12.Oh XC941z -2.94 XC951= 0.C)b XC361= -16.94 XC97lz -30.94 XC981= -39.94 XC991= -9.94 XC1001= 27.06 XL1(:)13= 91.O7 XClí:i2]= 47.07 XCj.(:)3]= -60.93 XCií:)4]= -53.93 XC].í35]= -63.93 X[1(:)h]= 6 ' 4 - 93 XC1(371= -51.93 XC1081= 22.07 X C l C i C ? I = 38.07 XC110]= -4. "J. 93 X C 1 1 1 ] = 34.07 X C l l 2 1 - l(jZ.(j7 XC1 131= 23.C17 X C l l 4 1 = 6'7.07 X C 1 1 5 1 = 1(:)4.(:)7 XCl.l61= 109.C)7 XK1.171= 174=07 X C 1 1 8 1 = 82.07 XK1197= "-63.93 X C 1 2 ( j I z -h7d 9-:' ,.J X[1,>?1]., ~ 77, X C - J 2 2 ] = -153.93 X C i 2 3 ] = -51.93 XC124]= -6.d 9-,.J? 3 == -173 9-7 XI- 1 R ]= - 35 *y-:. 7 ...: . i \ I8 Y f 629 - Prcqr-ama M A C !? 13 -- General -I-*..--- I 131 --- 1.05 E:e;crii h a NRY, cueficientes de X C1x3 Crenc~l [col] PJCY y 1.Y respectivamente. r l L ,7 *r PI L Escriba los coeficientes de Y Cly3 tren57 Ccol7 LY = 1 c13r.11 . tlIC21 C2lCl.l c21c21 LY = 2 CllC11 tllC21 t23Cll c23cza Escr-j.b a la longitud de la correlación c r u z L G : 3 Programa H E A T TABLA D E COEFICIENTES C LC 132 c .. H E k "í- - Ejemplo Escriba la l o n g i t u d d e la c o r r e l a c i b n c r u z L G : 10 F a v o r r - 1 ~e c p e r a i - un momento... T A B L A DE MIJESTRAS X = Y XC13C11 XEf'lC1.7 xc31 I: 1 1 xc41c11 xc51c11 xc6Ic11 xc71c11 XC8lC11 xc91 c 1 1 x c 10 1 c 1 1 XC11lC11 xc121c11 xc131c11 xc141 c 1 1 x c 151c 1 1 XC 1 6 1 C11 xc171 t 1 1 XC181 c 1 1 xc191c11 xc201c11 xc211c 1 1 xc221c11 x E231 c 1 1 xc241c11 x c25 1 c 1 1 X C261 C 1 1 x c271 E 1 1 X C281 C 1 1 x c291 c 1 1 x c301 c 1 1 xc311c11 x c321 c 1 1 xc331c11 x C34lC 1 1 x c 35 1 c I. 1 X E36 1 C 1 1 x c371 c 1 1 XC38lC11 x c391 c 1 1 XC4(:~lcll x c 4 1 IC 1 1 xc421c11 x c43 1 c 1 1 54.06 XClICZl 91.07 XCl?l:33 -31.97 X[2]Cf] 49.07 hff]C3] -35.97 19.06 XC31C21 --bC).SS XC3lC31 -31 - 9 7 -11.94 XC41C21 -53.93 xc41c71 99.(53 -15.94 XC51C21 -63.93 XC5lC31 -34.97 XC6lC21 -63.93 XC6lC31 -97.97 -39.94 -26.94 XC7lC21 -51.93 XC71C31 23.03 45.06 X C 8 l C 2 1 22.(37 XI8lC31 -97.97 107.06 XC9lCrLl 38.07 XCSlT7;l 15.03 79 .O6 X C 1 (11 C 21 -4 C.; .?if X C 1 (1) 1 C 3 1 7O . 9 7 38.06 XC11lC21 34.07 XC11lC31 9.03 21.06 XC12lC21 102.07 XC12lC31 -47.97 -8.94 XC131C21 23.07 XC131C31 24.113 -23.94 XC14lC21 67.07 XC14lC31 29.03 -36.94 XClSIC21 104.Q7 XC15lE31 54.03 --q ~ ~ XC16lC21 ~ 9 4 109.07 XC16lC31 118.03 36.06 XC17lC21 174.07 XC17lC31 7 3 . 0 3 85.66 XC18lC21 83.07 XL18lC31 -27.97 84.06 XC19lC21 -63.93 xc191c31 43.(13 XC2OlC21 -63.93 XC2OlE31 -28.97 71 .O6 43.06 XCZllC21 -63.93 XC21lC31 6 2 . 0 3 2(:).0& X[22][2] -67 93 XE22lC31 -5.97 13.06 XC231C21 -51.93 XC231C31 -27.97 0.06 XC24lC21 -63.93 XC24lC31 -51.97 -5.94 XC25lC21 -26.93 XC25lC31 -1.97 -25.94 XC26lC21 -49.93 XC26lC31 -19.97 -30.94 xc271c21 -52.93 xc271c31 12.03 -40.94 XC28lC2.1 -35.93 XC28lC31 -18.97 -42.94 xc291c21 -44.93 xc291c31 -12.97 -39.94 xc301c21 -33.93 xc301c31 15.03 -32.94 XC31lC21 -52.93 XC3llC31 -38.97 -12.94 X[32][2] -37.9-7..I xc321c31 -11.97 -1.94 XC33lE21 -63.93 XC33lC31 l(31.03 -3 .94 XC34lC2l -34.93 xc341c31 -44.97 1.0h XC353CZI -16.93 XC351C31 -16.97 -4.94 XCt;61C21 -27.93 XC36lC31 -16.97 -18.94 XC37lC21 -28.93 XC37lC31 58.03 -36.94 XC38lC21 -46.93 XC38lC31 -70.97 -38.94 XC99lC21 -63.93 XC3911-31 -16.97 -44.94 XC4C)IC21 -6C1.93 XC4C)IC31 9.03 -46.94 XC41lC21 -57.93 XC41lC31 54.03 -45.94 XC42lC21 -45.93 XC42lC31 1 " (:I3 -41.94 XC4*;lC21 -48.93 xc431c31 7 9 . 0 3 y r w i r i 1- ~ -L~ ,-B~LLK.L.-; 1.. . - t 2 3 , m x r 4 4 1 c -TI -49.97 35.í:)& - LJ. I-I 133 c - 3 2 . y4 xc451c21 -11.94 XC46lCLl -(3 Y 4 x c 4 7 1 c 2 1 -5.94 XC483C21 -S6.Y4 XC49lC21 -22.94 X f 5 0 1C 2 1 -30 94 XC51lC21 -39.94 XC5ZlC21 XC53lC21 -42.94 -44.94 XC54lC21 -38.94 X C 5 5 1E 2 1 -29.94 XC56lC21 1C) 94 X C 5 7 l C 2 1 3.06 XC58lC21 15. (56 X C 5 9 l C 2 1 2i] 0 6 X C 6 0 1E 2 1 24. 06 XC6llC21 1.06 XC62lC21 -18.94 XC63lC21 -38.94 XC64li23 -77 A d . 94 XC65lC21 3. O 06 XC66lC21 75 06 X C 6 7 l C 2 1 9 1 06 XC68lC21 56 (36 X i 6 9 l C 2 1 39 136 X C 7 0 1 E 2 1 16.06 XC71lC21 -9.94 x c 7 2 1C 2 1 LL.94 XC73lC21 -35.94 XC74lC21 -31.94 XC751~21 -6.94 XC76lC21 15 06 XC771C21 5 1 06 X C 7 8 l C 2 1 77. (36 X C 7 9 l C 2 1 49. 06 X C 8 0 1 C 2 1 19. (36 X C 8 1 l C 2 1 17 06 X C 8 2 1 C 2 1 7 06 XC83lC21 -7.94 XC84lC21 -25 94 X C F 3 5 1 t 2 1 --39 (34 X f S 6 7 t 2 1 xC873C:ll -42.94 XC87lC21 -rnT X C O 8 7 c 1:I L a . 94 xC8í31c21 x c 9 9 3 I:. 11 8 (76 x i : 8 9 1 c 2 7 Y.1 . l C )I: [: 1 1 47 0 6 X C 9 0 1K 2 3 XC.l.ntl1 49 O6 x c 9 1 1c 2 1 .-r " 'i [ <3 "> . . i 3. 1. . 1. 3 ;59 Ob XC921CLI xcyy:][:1] 1L i:)b xc433c21 --2 94 i. r: 94 7 I:i :I xc941c21 x C 9 5 1c 1:I 0 oA XC95lC'rl X f 9 6 1 C I . 1 -16.94 XC.96IC21 x c 97 3 c 1 I .- 3 (5 ,y 4 X C 9 7 l C 2 1 x i 98 3 1:: .-?-?C> 94 X C 9 8 3 C 2 1 C? 94 X C 93 . C 11 X C 9 9 1c 2 1 X L 4 5 3 C 17 x c 4.6 1c 1:I x c471C 13 XC481C11 x C 491c 11 xC5~:~1C11 xc513c11 x c 5 2 1 E 11 X C 5 3 l C 11 xes41c 11 X C 5 5 1 C 11 X C 5 6 1C 1 1 XC57lCll X C 5 8 1 C 11 x c 5 9 1 c 11 XC6OlC11 X C 6 l I C 13 X C 6 2 1 E 11 XC63lCll XC64lE11 XC65lC11 X C 6 6 1C 1 3 x c ( 2 7 1c 11 X C 6 8 1 C 11 XC69lC11 x c 7 0 1 c 11 x c 7 1 I C 11 x c 7 2 1 c 11 x c731c 11 x c741c 11 x E 7 5 1c 11 XC76lEll x c771C 11 X E 7 E I I c 11 x t79 1c 11 x C 8 0 3 t 11 X C 8 1 I C 11 Y; c 8 2 :I c 13 X C831C 11 X C841C 11 x C85 3 I: 11 2: C 8 h 3 c l :I . . . - . . . . .. --- . . . . . L1 . I : . . . t . .) . e ~ Froqrama 1-1 E A T .- Ejemplo G C ~ I C 1 l C 1 1 -23480.89 GC51C1IC21 21825.23 Gt5lC11C31 19236.81 9203.84 GC51C23CL-I 39321.84 GL5lC2lC31 -270(:)4.61 GC5lC2lCll 8257.38 (s1.5lC3lCll 3138.49 GC51C31C21 24483.04 GC5IC31C31 GC6lC1lCll -36839.91 GC6lC1.ICZl 15487.16 3433.87 GC6lC21 CZI 24305.12 GC61 C21 C 1 1 GC6lC3lCll -1121.90 GC61C31C21 24960.39 GC63CllC31 26885.71 GC61 C21 L31 -1S891.20 GCblC33CSI -1853Ci.36 GC7lC1lClI -29361.52 GC7lCllC21 28052.71 GC7lC2lCll 11327.70 GC7lC21C21 16148.31 GC7lC3lCll 4226.97 GC7lC31C21 -15377.86 GC7lCllE31 22032.97 GC7lC2lC31 -49618.20 82233.60 GC71C31C31 GC81 C 1 1 C 1 1 GC8lC21C11 GC8lC3lCll 27 -5983.72 GC81 C 11 C 2 3 . 488C)C). 4799.21 22118.03 GC8lC21C21 9333.69 GC8lC3lE21 -6542.64 GC 81C 1 3 E31 20742.14 GC8lC21C31 -16616.73 GC8lC3lC31 -17112.41 G C 91 C 22739.85 19302.87 12473.20 1 1C 1 1 GC9lC2ICll GC9lC3lClI GC 91 C 11I : 21 GC91i2lC21 GC9lC31C21 70274.16 G C 9 1 C 1 1 C 3 1 1 1450.(1) 1 5142.24 GC9~C2IC31 9848.70 7938.74 GC9lC3lC31 -24421.87 GC 1 0 1 I:11 C 1 1 4S819.62 GC 1 0 1 C 1 1 C21 864O8.16 G C 101 C 11 C31 -7236.09 GC101~2lC11 6854.48 GCl(:)lC2IC21 13063.64 GC10lCZlC31 -13532.31 3470.40 Gt16lC3lC23 -13269.57 GC1OlC31C31 -34044.25 GC101C37C11 C O H E R E Para SCl,n,nl escriba L y N : 2 2 Escriba los coeficientes de S C 1 1 Crengl Ccoll LS = 1 C1lClI = 5 C l l C 2 1 = -1.5 c23 c 11 c21c21 LS = 2 C1lClI c 11 c21 c21c11 C2lC21 = o = 4 = -9 = -0.5 = o = 2 Programa C O H E R E Tabla de Coeficientes S 5.0000 O. O000 - 1.5000 4.0000 LS = 2 -9.0000 o. O000 -0.5000 2.0000 Programa C O H E R E Tabla de Coeficientes C LC = 1 O .3556 180 . O 0 0 0 O . 3354 1.0000 LC = 2 -1.0000 180.0000 0.1179 O . 5000 . 1. ARITMETICA a Efectúa aritmtica de números complejos include <stdiib.h> include <stdio.h> include <conio.h> yrpedef struct {float rel im; 1 complejo; Dmplejo suma(a,bi 2omplejo *a,*.b; c complejo c; c.re=a->re+b->re; c.im=a->im+b->im; return c; /* fin de suma complejos */ omplejo resta(a,b) romplejo *a,*b; E complejo c ; c.re=a->re-b->re; c.im=a->im-b->im; return c; /* fin de resta complejos */ omplejo mult(a,b) complejo *a,*b; c complejo c; c.re=(a->re*b->re)-(a->im*b->im)~ c.im=(a->re*b->im)+(a->im*b->re); return 'c; /* */ fin de multiplica complejos omplejo divide(a,b) complejo *a,*b; { complejo c ; float den; /* denominador c o m h den-b->re*b->re+b->im*b->im; if (den!=O) E c.re=(a->re*b->re+a->im*b->im)/den; c.im=(b->re*a->im-b->im*a->re)/don; 1 else E c.re=O; return c; /* 1 c.im=O; fin de divide complejos */ */ main( 1 c comp 1 e jo nux1 ,aux2,nux3 ; clrscr( 1; printf ( " \ n Escriba el número complejo A.\n\n"); printf(" A.rea1 = cscanf("%f",&auxl.re) ; printf("\n"); printf(" A.imag.= cscanf ( "%f & a u x l . im) ; pr i ntf I: * \ n \ n" ; ' I ) ; ' I ) ; 'I, printf ( Escriba el nthnero complejo B.\n\n"); printf(" B.real = " 1 ; . cscanf ( "%f ,&nuxi!. re 1 ; print f ( 'I \ n" 1 ; printf(" B.imag.= cscanf ( "%f" ,&aux2. im) ; printf("\n\n"); 'I 'I + I ) ; aux3=mul t (&auxl ,&aux2) ; printf("\n A * B = CY7.4f , %7.4fI\n",aux3.re,aux3.im); aux3=d i vide ( Eauxl ,&aux2 1 : printf("\n A / B = CY7.4f , %7.4fI\n",aux3.re,aux3.im); aux3=sutna ( &auxl ,&aux2 1 ; printf("\n A + B = tY7.4f , %7.4fI\n",aux3.re,aux3.irn); aux3=resta(&auxl ,&aux2) ; printf("\n A - B = CK7.4f , X7.4f3\n',aux3.re,aux3.im); /* 1 1138 COHPLEJO */ /* MAINE .Rutina que calcula la inversa da, una matriz oimtrica. N = Orden de la matriz. A = Matriz. B = Matriz Inversa. */ #include #include #include # i nc 1ude <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 7 int atMAXItMAX1; float btMAXItMAX1; int n; matriz-inv (1 € float ek; int i, j,k,m; bt 11C13=i/aC 1 3 C l I ; for (m=2;m<=n;m++) C k=m- 1 ; ek=atml Cm1 ; for (i=l;i<=k;i++) for ( j=l;j<=k; j++ 1 ek=ek-rC in1 C i I +b[ i 3 3 1 ti.* jl t rnl ; if (ek==O) bCmitml=O; else bCmlCml=l/ek; for ( i = l ; i<=k;i++) € for (j=l; j<=k;j++) if (ek!=O) bCm3 t i l=bC i I t ml ; bCil~rI-bLil~m1-btil~ jl*aC jltcaI/ok; 1 for (i=l;i<=k;i++) for ( j=l; j<=k;j++) bt i I L jl=b[ i l t jl+bt il [ r l * b t m l C j l * e k ; 3 1 /* fin de matriz-inv */ main( 1 € int i,j; printfi'lil A I W $ \ n \ n ' ) ; clrocr0; gotoxy(20,5); for (i=O;i<MAX;i++) for (j=O;j<MAX;j++l a t i l C j I = ~ b ~ i l C j l ~ O ; s printf(" Escriba el Orden d e l a Matriz.\n"); scanf í "Wd" ,sin); / * T m de dato8 * / printf(" Escriba los coeficientes de A Crongl Caoll.\n'); € for (i=l;i<=n;i++) for (jpl;j<=n;j++) C printfí" A tWd3 tWd3 = ",í,j); scanf("Xd",&aCilCjl); 1 , 3 p i 7 in 139 cirscr0; gotoxy(l5,S); printfi" M a t r i z Invoraa.\n\n"); for (i*l;i<=n;i++) { for ( j = i ; j<=n; j++) { printf(" B CWdl CYdl = %6.3f\n",i,j,bCiltjJ); 3 3 3 /* g e t c h a r O ; g e t c h a r ( );clrscr( 1; f i n d e main * / /* 140 MAINE */ /* NORMEM Normaliza un arreglo por el RMS del mismo LX = Longitud del arreglo X = Arreglo a normalizar */ #include #include # i nc 1 ude # i nc lude <stdlib.h> <stdio.h> <coni o.h> <math.h> #define MAX 10 float xCMAXl , r m s = O ; int i , lx=O; for (i=O;i<MAX;i++) xCiI=O.O; clrscr0; gotoxy(20,5); printf("N O /* Inicializa rogistro /* Toma de dato8 R M E M\n\n"i; printf(" NQmero de elementos = "1; scanf ( " X d " ,&lxi ; printf(" Escriba los coeficientes de X. \n"); for (i=l; i<=lx;i++i C printf(" XCXd3 = ",ii; cscanf ( "%f &xC i 1 i ; printf( " \ n u1; */ 'I, 1 for (i=l;i<=lx;i++i rms=rms+xCi3*xCiI; rms=sqrt(rms); for ( i = 1 ;i <=1x ;i ++ ixi i 1 =xC i 3 / rms ; /* Cálculo do l a funci6n printf("\n El arreglo X normalizado es : \n"); for (i=l;i<=lx;i++) printf(" XtYdl=W6.2f ",i,xtiIi; 1 getchar0;getcharO;clrscrO; */ */ /* NORM1 Normaliza un arreglo por el primer elemento del mismo. LX = Longitud del arreglo = Arreglo a normalizar X */ #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX main( 10 1 { float xCMAX3 ,primero=O; int i , lx=O; for (i=O;i<MAX;i++) xCil=O; clrscro; gotoxy(20,5); printf("N O R M / * Inicializa registro I\n\n"); printf(" N6mero de elementos = scanf ( " X d " ,&l xi ; printf(" Escriba los coeficientes. \n"); for ( i=l; i<=lx;i++) { printf(" CWdl = ",i); cscanf ( "%f &xC i 1 1 ; printf ( "\n"1 ; ' I ) ; ' I , 1 prirnero=xC 11 ; for (i=l;i<=lx;i++) xCil=xCil/primero; printf("\n El arreglo normalizado e s : \ n u ) ; for (i=1;i<=lx; i++) printf ( Cldl % 6 . 3 f " , i ,xC i l l ; 'I 1 getchar0;getcharO;clrscrO; 142 /* Toma de datos */ */ . X ~ , I Y /* " . . I A - *- . , - , _ < _ I I , " I " ~ NORMAG Y -I------ Normaliza un arreglo por el elemento más grande del mismo. LX = Longitud del arreglo X = Arreglo a normalizar */ #include #include #include # i nc 1 ude <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 10 float xCMAX1 ,grande=O,aux; int i , 1 x 4 ; for (i=O;i<MAX;i++) xCil=O; clrscr0; gotoxy(S0,5); printf("N O / * Inicializa registro R M A G\n\n"); printf(" NQmero d e elementos = "1; scanf ( "Wd",&1 X I ; printf(" Escriba los coeficientes. \n"); for (i=l;i<=lx;i++) C printf(" CWdl = ",i); cscanf ( " W f ,&xC i 1 I ; printf ( "\n"1 ; 'I 1 for (i=l;i<=lx; i++) { i f ( xi i 1 <O 1 aux=-1 *xC i 1 i else aux=xCiI; if (grande < aux) grande=aux; 1 for (i=l;i<=lx;i++) xCil=xCil/grande; 1 printf("\n El arreglo normalizado es : \no'); for (i=l;i<=lx; i++) printf(" Eldl %6.3f", i ,xCiI i ; getchar( I;getcharO;clrscrOg 143 /* Toma de datos */ */ /* */ CROSS LX X LY Y LG G Correlación cruz de dos vectores. = longitud de X = m #include #include #include #include ... + (yO,yl, ... ,yn) longitud deseada de (gO,gl, ... , g k ) = (xO,xl, ,xm) = longitud de Y = n = = = 1 1 la correlacibn cruz = k + 1 <stdlib.h> <stdio.h> <mem.h> <conio.h> #define MAX main( + 7 1 1 { float xCMAX3 ,yCMAXl ,gCMAXl; int lx, ly,lg, i t 9 ,menor; for (i=O;i<MAX;i++) xCil=y[i]=gCi]=O; 1 x=l y= 1 g=o ; /* Inicializa Arreglos clrscr0; gotoxy(20,5); printf("C R O S S\n\n"); printf ( Escriba LX, LY y LG respectivamente. \ n n1; scanf("YdWdKd",&lx,&ly,&lg); printf(" Escriba los coeficientes del vector X . \ n " ) ; for (i=O;i<lx;i++) C printf(" Cldl = ' I ,i); cscanf ( "%f ,&xC i 1 1 ; printf("\n"); */ I' de data6 */ Producto punto */ 1 % Torna I' 1 printf(" Escriba los coeficientes del vector Y.\n"); for (i=O;i<ly;i++) C printf(" CXdl = ",i); cscanf ( "Xf ,&y[ i 3 1 ; printf("\n"); 'I 1 for ( j = O ;j<lg;j + + ) { if (ly < (lx-j)) menor = ly; else menor = lx-j; 1 gC ji=O; for(i=O;i<menor;i++) g C j 3 = g t j 3 + x t ~ + i 3 ~ y t i l ~ printf("\n Vector de correlaci6n cruz : \n"); for (i=O;i<lg;i++) printf(" CKdI K7.5f ",i,gCiI); 1 getchar0;getcharO;clrscrO; 144 /* /* */ FOLD Multiplicación de polinomios LA A LB B = longitud de A = orden m = (aO,al, ,am) = longitud de B = orden n = (bO,bl, ,bn) LC = longitud de C = m+n-1 c CONVOLUCION. ... ... = (CO,Cl, #include #include #include #include ... ,c IC) <stdlib.h> <stdio.h> <mem.h> <conio.h> #define MAX main( 6 10 1 { float aCMAXl,bCMAXl,cCMAXl; int la,lb,IC,i, j,k; for (i=O;i<HAX;i++) aCil=bCil=cCil=0; la=lb=lc=O; /* Inicializa Arreglos */ clrsc r 0 ; gotoxy(20,5); printf("F0LD - Convolución\n\n"); print f(" Escriba el Orden de l o a polinomios A y B respoctivamente.\n"); scanf ( "WdWd",&la,flb) ; / * Toma de datos * / printf(" Escriba los coeficientes d e 1 polinomio A.\n"); for (i=O;i<la;i++) i printf(" CWdl = ",i+l); cscanf("Wf",&aCil); printf("\n"); 1 printf(" Escriba los coeficientes dol polinomio B.\n"); for (i=O;i<lb;i++) { printf(" CXdl = ",i+l); cscanf ( "Wf &bC i 1 1 ; printf ( "\n"); 'I, 1 1c= 1a+1 b- 1 ; for (i=O;i<=la;i++) for (j=O;j<=lb;j++) i k=i+ j; c E kl =c C kl+a C i 1 *bC j1 ; 1 1 printf("\n Producto de polinornio A * B :\n"); for (i=O;i<lc;i++) printf(" t%dZ %6.3f ",i+l,cCil); getchart );getchar( );clrscr( 1; 145 /* POLYDV N DVS M DVD L */ Q División de polinomios = n + l = (bO,bl, = m + l = (aO,al, = k + l = (qO,ql, #include #include #include # i nc lude ,bn) ... ,ami ... ,qk) Deconvolución. <stdlib.h> <stdio.h> <mem.h> <conio.h> #define MAX main( ... 6 10 /* 1 polydv(n,dvs,m,dvd,l ,q) */ E float dvdCMAX1 ,dvsEMAXl ,qCMAXl ; int n,m,l,i,k,isub,j; for (i=O;i<MAX;i++) dvsCil=dvdCil=qCil=O; n=m= 1=O ; /* Inicializa Arreglos */ clrscr0; gotoxy(20,5); printf("P O L Y D V\n\n"); printf(" Escriba N, M y L respectivarnente.\n"); / * Toma d e dato8 scanf ( "WdWdKd",&n,&m,&l) ; printf(" Escriba los coeficientes de DIVISOR.\n"i; for (i=l;i<=n;i++) { printf(" CKdl = ",i); cscanf ( "Xf ,&dvsC i 1 i ; printf("\n"); */ I' 1 printf(" Escriba los coeficientes de DIVIDENDO.\n"); for ( i=l; i<=m;i++) C printf(" tXd1 = ",i); cscanf ( "Kf ,&dvdC i 1 1 ; printf("\n"); I' 1 if ( m < 1) for (i=l;i<=m;i++) qCil=dvdCil; else for (i=l;i<=l;i++) qCil=dvdCil; for (i=l;i<=l:i++i C qCil=qCil/dvsCll; / * Segun texto * / if (i!=l) C k=i; if ((n-ll<(l-i)) isub = n-1; else isub = 1-i; for (j=l:j<=isub:j++) C k++; qCkl=qCkl-qCil*dvsC j+ll; 1 3 1 printf("Coeficientes del cociente Q.\n"); for (i=l;i<=l;i++) printf(" C%dl %7.4t",i,qCil); getchar( );getchar( );clrscr( 1: 1 14s /* Muow o l o ~ n t o s* / /* PSQRT N C M Encuentra los m+l primeros coeficientes de la raíz cuadrada. = n + l = (cO,cl, = m + l = íaO,al, A ... ... ,cn) Polinomio ,am) R a í z Cuadrada */ #include #include #include #i nc lude <stdlib.h> <stdio.h> <conio.h> <math. h> #defino MAX main( 10 1 c float ctMAXl ,aCMAXl; float pa,ta,ps,ih; int n,m,i, j,k; for (i=O;i<MAX;i++) cCil=aCil=O; n=m=O ; /* Inicializa Arreglos */ clrscr0; gotoxy(20,5); printf("P S Q R T\n\n"); printf ( 'I Escriba N y M respectivamente. \ n u1 ; scanf ( "%d%d",&n,&m) ; / * T o m de datos * / printf(" Escriba los coeficientes del POLINOMIO, con c0 > O . \ n " ) ; for (i=l;i<=n;i++) C printf(" C%dl = ",i); cscanf("Xf",&cCil); printf ( "\n"1 ; 1 at11 = sqrt(ctl1); ta = 2*aClI; at23 = cC2l/ta; at31 = (cC3l-aC2l*aC21)/ta; for (i=4; i<=m;i++) C if ((i-n)>O) pa=O; else pa=cCiI; ps=o ; ih=i/2; for (j=2;j<=ih;j++i C k=i- j ; ps=ps+aCjl*aCk+ll; 1 1 pa=pa-2*pa; if ((2*ih-i)!=O) aCíl=pa/ta; pa=pa-(atih+lI*atih+ll~; printf("Coeficientes de l a Raíz A.\n"); for (i=l;i<=m;i++) printf(" A C l d I %7.4fu,i,aiiI); 1 getchar0;getcharO;clrscrO; 147 /* POLRT Calcula raíces reales de un polinomio. ... XCOF = (aO,al, ,am) , a0 ! = O . = Orden del polinomio. M COF = Polinomio auxiliar de orden m+l. ,re Zm) , raíces reales. ROOTR = ( r e Z l , re 22, ROOT1 = (im Zl, i m 22, ,im Zm) raíces complejas. IER = Código de error. ... ... Las raíces ñon de la forma: Zi = re Zi #include #include #include #include + im Zi j , para i=1,2, ... ,m . <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 10 #define CIERTO 1 #define FALSO O xcofCMAX1 ,cof IA 1 ,rootreCMAXl ,rootimCMAXI; n,m,ier; float int t o m a d a t os ( E int i; 1 /* Inicializa Arreglos */ for (i=O;i<=MAX;i++) xcof C MAXI ncof CXAXl=rootreCMAXl =root imC MAXI=O ; c l r s c r 0 ; gotoxy(20,5); printf("P O L R T\n\n"); / * Toma de datos printf(" Escriba el orden del polinomio.\n"); scanf ( "%d" ,&m) ; printf(" Escriba los coeficientes del POLINOMIO, con a0 ! = O . \ n " ) ; for (i=i;i<=(m+l);i++) E printf(" C%dl = ",ii; cscanf ( "%f ,&xcof C i 1 1 ; p r i nt f ( " \ n 1; */ I' 'I 1 /* 1 fin t o m a d a t o s */ valida0 E ier = O ; n=m; if (xcofEn+ll == O ) ier = 4 ; else if ( n <= O ) i e r = 1 ; else if ( n > 3 6 ) i s r = 2 ; 1 / * fin valida * / evalua0 C float xo,yo,x,y, xpr ,ypr ,ux,uy,v,yt, xt ,u,xt2,yt2,dx,dy; float sumsq,temp,alpha,kji; int ifit,nx,nxx,nZ,i,1 , in, ict,itemp; int eti45,eti50,eti55,eti6O,etil4O,sal; 1 i " ~ IC . .. .. 148 -- eti45=eti50=eti55=eti60=CIERTO; eti 14O=FALSO; xpr=ypr=k ji=O ; ifit=O; nx=n; nxx=n+l; n2= 1 ; for ( i = l ; i<=n+l;i++) cof E n+2-i I=xcofC i I ; do i / * C I C L O * / if (eti45) C xo = 0.00500101; yo = 0.01000101; ? i n=O ; if (eti50) C x=xo; x=xo; xo=- 10*yo; y=yo; yo=- 10* x; ict=O; i n=i n++; 1 if (eti55) ifit=l; eti45=eti55=eti50=eti6O=FALSO; /* Reestablece banderas de CICLO */ ux=uy=v=yt=O; xt=l; u=cofCn+lI; /* 6 0 * / if (u!=O) C / * if u=O go 130 * / for (i=l;i<=n;i++) C l=n- i + 1 ; xta=x*xt-y*yt ; yt2=x*yt+y*xt; v=v+cof c 1 1 *yt2; u=u+cofC ll*xt2; ux=ux+i*xt*cofC13; uy=uy-i*yt*cofCll; / * fi * / xt=xt2; yt=yt2; 1 sumsq=ux*ux + uy*uy; / * if sumsq=O go 110 * / if (sumaq ! = O ) E dx=( v*uy-u*ux) /sumsq; x=x+dx; dy=- ( u*uy+v*ux 1/ sumsq ; y=y+dy I if ( (abs(dy) + abs(dx) - 1E-5) >= O ) C ict=ict+l; / * etibO=CIERTO if (ict<500) eti60rCIERTO; else if (ifit!=O) I x=xpr ; y=ypr ; */ ? else if ((in-5)>=0) ier=3; 1 C else for (l=l;l<=nxx;l++) ternp=xcof C k j i - 1+ 1 3 ; x c o f E k j i - l + l l ~ ~ ~1f1C; cofC1l=temp: /* C 100 = / 1 1 /* else 1 i temp=n; n=nx; nx=itemp; if (ifit==Ol eti55=CIERTO: / * if ifit!=O go 120 if sumsq !=O */ */ if (ifit==O) etiSO=CIERTO; . else C /* 110 if ifit=O /* x=xpr; y=ypr; otro go go 50 */ 120 */ ? if ( (!eti55) & (!etiSO) & (ier==O) & (!etióO) 1 C 149 if I /* ( (abs(x/y)-lE-Q) a 1pha=x+ x ; sumsq=x*x+y*y ; n=n-2; eti 140=CIERTO; >= O ) C I 1 if u !=O */ else E /* x=O ; 130 */ nx-- ; nxx--; I if ( (!eti55) 6( (!eti50) if (!etil40) E y=sumsq=O ; alpha=x; n-- ; & (!eti60) & (ier==O) /* 135 1 E */ I cof C 21=cof C 21+alpha*cof C 1 3 ; / * 140 * / for (1=2;1<=n;l++) cof C 1+1 l=cof C 1+1l+íalpha*cof C 1 3 1- ( sumsq*cof t 1-1 1 ; etil40=FALSO; sal = FALSO.; do C rootimCn23=y; rootreC n23=x; n2++ ; if(sumsq==O) sal=CIERTO; else C y=-y ; sumsq=O ; I I while (!sal); if (n>O) eti45=CIERTO; I / * if !eti55 & !eti50 if (ier!=O) break; I /* "I while ( */ (eti45) ::(etiSO) I:(eti55)!:(eti60) fin evalua i ; /* c i c l o */ */ main( 1 E int i; toma-datosí 1; valida( 1; if (ier==O) evalua(); if (ier==O) C printf í "Coeficientes reales de la r a í z son: \ n " 1; for (i=l;i<=m;i++) printf(" C%dl %f, ",i,rootrsEil); printf("\nCoeficientes imaginarios de la raLz son:\n"); for (i=l;i<=m;i++) printf(" CXdl %f, ",i,rootimCil); I else printf("\n E R R O R Xd",ier); c l r s c r ( 1: 150 I /* FADDEJ Rutina que invierte un matriz no nesesariamente simtrica, empleando el mtodo de Faddeev & Somiinskii. N = Orden de la Matriz. A = Matriz a de n x n. " = Matriz Inversa. = Determinante de a. AINV DET ADJUG = (Adjugate) = adj A = (det a) inv (a). = Coeficientes del polinomio característico. P */ #include #include #include #include #include <stdlib.h> <stdio.h> <mem.h> <conio.h> <math.h> 5 #define MAX int aCMAXIEMAX1; float ainvCMAXlCMAX1 ,adjugCMAXICMAXl; float polaCMAX1; i nt det-a, n; brainy( { /* i Realiza e1 producto d e dos matrices */ int i , j , k ; 1 % Subrutina for (i=O;i<=n;i++) for (j=O;j<=n;j++) ainvCilC jl=O; Zero */ for (i=l;i<=n;i++) f o r (j=l;j<=n;j++) for ( k=l; k<=n;k++ 1 ainvC i 1 C jI=ainvC i I C j ]+al i 3 C kl *ad jug[ kl C j3 ; 1 /* fin brainy */ scale(esca1ar) f 1 oa t esca 1 ar ; /* Multiplica una matriz por un oscalar */ c int i , J ; for (i=l;i<=n;i++) for (j=l;j<=n; j++i ainvC i 3 C jl=escalar*ainvC i 1 1 j l ; 1 /* fin d e sacale */ toma-datos( 1 int i, j; clrscr0; gotoxy(20,S); for (i=O;i<MAX;i++i f o r (j=O;j<MAX;j++) printf("F A D D E J\n\n"); /* Inicializa Variables */ aCilCjl=ainvCilCjl=adjuqCllCjl=O; for (i=O;i<MAX;i++) polacil-O; I - , - . n x d n k - W . J . n de l a Matriz : " I ; 151 / * Toma de datos */ - scanf ( "Xd",&n 1; printf("\n Escriba los coeficientes de A Crengl Ccoll.\n"); for (i=l;i<=n;i++) C for (j=l; j<=n;j++) { printf(" A CKdI C%dl = *',i,j); scanf("Kd",&aCilC jli; 3 /* 1 1 fin tomadatos */ faddej() { int i,j,k; /* /* Subrutina MOVE(n,a,ainv) * / for ( i = l ; i<=n;i++) for ( j = l ; j<=n;j++) ainvC i 1 E jl=aC i 1 C jl ; fin d e MOVE * / for (k=l;k<=n;k++) C for (i=l;i<=n;i++) p o l ~ a ~ k l = p o l ~ a C k 3 + a i n v C i 3 E i l ; pol-aC kl=polaC kl /k; if (k!=n) € / * Subrutina MOVE(n,ainv,adjug) * / for (i=i;i<=n; i++') for (j=l;j<=n;j++) adjugCilCjl=ainvCilCjl: / * fin d e HOVE * / 1 1 for (i=l;i<=n;i++) a d j u g C i 3 C i l = a i n v C i l C i 3 - p o l ~ a C k l ; brainy() ; Subrutina MOVE(n,adjug,ainv) */ for (i=l;i<=n;i++) for (j=l;j<=n; j++) ainvCilCjl=adjugCilCjl; /* fin de MOVE * / if (abs(polaCn1) >= 1E-30) scale( l/pol-aCnIl; d e t a = p o l a C nl ; if ((n%2)!=1) € deta=-deta; for (i=l;i<=n;i++) f o r (j=l;j<=n;j++) /* adjugCilCjl=-adjugCilC~l; 1 ? /* fin faddej */ resultado( i E int i, j; clrscr0; gotoxy(l5,5); printf(" Matriz Invetra.\n\n"); for (i=l;i<=n;i++) C for (j=l;j<=n;j++) C printf(" A-INV CXdl CXdl = %6.3f\n",i, j,ainvCilC jl); printf("\n");getcharO;getcharO; f o r Cd=l;i<=n; i++) E f o r ( j = l ; j < = n ;j + + ) E p r i n t f ( " ADJUG C%dl C%dl = %6.3f\n",i,j,adjugCiICjl); 1 1 p r i n t f ( " \ n D E T E R M I N A T E = %d\n",det-a); printf("\n Polinomio Característico d e A " ) ; f o r ( i = l ; i < = n ; i + + ) p r i n t f ( " %6.3f " , p o l a C i l ) ; g e t c h a r ( );getchar( );clrscr( 1; 1 / * fin resultado */ main() E toma-datos ( i ; f a d d e j ( 1; resultado0; 1 _- - /* */ EUREKA Solución a ecuaciones normales de canal simple LR R = Longitud del filtro = m. = Coeficientes de autocorrelacion = (rO,rl,...,rm). G = Coeficientes de lado derecho. F A = Coficientes del filtro = (fO,fl,...,fm). = Operador de prediccíon de error. #include #include #include #include <stdlib.h> <stdio.h> <mem.h> <conio.h> 10 #define MAX fa- poiydvín,dvs,m,dvd,l,q) main( 1 */ c float rCMAXl,gCMAXl,fCMAXl,aCMAXl; float v,d,q,hold; int j,k,lr,l,l1,12,13; for (j=O;j<MAX;j++) rCjI=gCjl=fCj3=aCj3=0; clrscro; gotoxy(20,5); /* Inicializa Arreglos */ printf("E U R E K A\n\n"); printf(" Escriba longitud del filtro.\n"); /* Toam d o datos scanf ( "Kd",&lr 1 ; printf(" Escriba los coeficientes de autocorrelaclon.\n"); for (j=l; j<=lr;j++) C printf(" Cldl = " , 3 ) ; cscanf("%f",&rC jl); pr i nt f ( \ n" 1; I' 1 printf(" Eacriba los coeficientes del lado derecho.\n"); for ( j = 1 ; j<=lr: j++1 1 printfí" CKd1 = ",j); cscanf ( " K f " ,&gC j1 1 ; printf("\n"); 1 v=rC 11 ; d=rt21; aC 13=1; fCll=gCll/v; q=f C 11 * r C 21 ; if(lr!=l) C for (1=2:1<=1r;l++) atlI=-d/v; if ( 1 ! = 2 ) { l i p (1-2)/2; 12=11+1; for (j=2;j<=12;j++) { hold = aCj1; k=l-j+l; a[ jl-aC jl+aCll*aCkl; aCkl=aCkl+aCll*hoid; 1 if ((2*11)!=(1-2)) at12+11=aC12+13+aC11*aC12+11; 1 -_. v=v+aC 1 1 *d; - * r i i - ( d i i -n i / v ? 154 -- */ 134-1 ; for (j=l;j<=13;j++) C k=l- j + l ; fC jl=fC jl+fCil*aCkl; 3 if (l==lr) break; else C d=q=O ; for (j=l; j < = l ; j++) k=l-j+2; d=d+aC j1 *r C kl ; q=q+fC jl*rCkl; C 1 3 ? printf("\n Coeficientes del Filtro.\n"); for (j=l;j<=lr;j++) printf(" C%dl %8.6f, ",j,fC jli; printf("\n\n Coeficientes de prediccíon de error.\n"); j,aCjl); for (j=l;j<=lr;j++) printfi" C%dl %8.6f, printf("\n"); ' I , 1 getcharO;getchar( );clrscrO; 3 155 /* INVTOP Cálculo de la inversa de matriz Tplitz. = Orden de la matriz. = Primera fila de la matriz d e Tplitz. LR R */ (2 = Matriz Inversa. SPACE = Arreglo auxiliar de trabajo. #include #i nc lude #include #include <stdlib.h> < stdi o.h> <mem.h> <conio.h> #define MAX 10 #define MAX2 20 int lr,h: float rCMAX21 ,qCMAXlCMAXI ,spCMAX21 ,sp2CMAX21; /* Eureka LR = Longitud del filtro = m. R = Coeficientes de autocorrelncíon = (rO,rl,...,rm). = Coeficientes de lado derecho. = Coficientes del filtro = (fO,fl,...,fm). = Operador de prediccíon de error. G F A */ Soluci6n ecuaciones normales d e canal simple. toma-datosí 1 E int j , k ; lr=h=O; for (j=O;j<(2*MAX);j++) sp[j3=sp2CjI=O: for (j=O;j<MAX;j++) f o r ( k=O ;k<MAX;k++) qC j í 1 kl=O; for ( j = O ;j<MAX;j++) rC jl=O; clrscr0; gotoxy(20,5); /* Inicializa A r r e g l o s */ printf("1 N V T O P\n\n"); printf(" Escriba el orden de l a m a t r i z Tplitz.\n"); /* Toma de datos scanf ( "Xd",&lr) ; printf(" Escriba la primera f i l a de l a matriz de Tplitz.\n"); for (j=l;j<=lr;j++) E printf(" tWdl = ",j); c scanf ( " Xf ,&r C J 1 1 : pri ntf ( 'I \ n" 1; */ 'I 1 /* 1 fin t o m a d a t o s eureka( */ ) E float v,d,t,hold; int j,k,l,ll,l2,13; v=rC 11 ; d=rC21; sp2C 11=1; q~hlCll=spCll/v; t=qChlCll*rC21; if(lr!=l) C l<=lr:l++) €56 - I__ Sp2c lI=-d/v; if (11=2) f 11= (1-2)/2; 12=1 l + l ; for (j=2;j<=lS;j++)E hold = sp2Cjl; k=l- j+i; sp2C jl=sp2C j3+sp2ClI*sp2Ckl; sp2CkI=sp2Ckl+sp2C ll*hold; 3 if ((2*11)!=(1-2) 1 sp2C12+1l=sp2C12+11+~p2Cll*sp2Cl2+ll; 3 v=v+sp2C 1 3 *d; qChl~ll=(~pC1l-t)/~; 134-1 ; for ( j = i ; j<=13;j++) C k= 1- j+ 1 ; qCh3Cj3=qChlCjl+qChlCll*sp2Ckl; 1 if (l==lr) break; else C d=t=O; for ( j-1; j<=l: j + + ) C k=l-j+2; d=d+sp2C jI*rCkl; t=t+q C h 1 I:j 1 * r C kl ; 3 1 1 ? 1 int i,k; toma-datosí ) ; for (k=l;k<=lr;k++) C for (i=l;i<=lr;i++) spLil=O; spC kl=l; h=k; eureka( 1 ; /* Subrutina IHPUL.3 */ 1 printf ( " \ n Matriz Inveraaa :\ n "1; for (i=l;i<=lr;i++) C for ( k = l ;k<=lr ;k++ i pr intf ( " t Xd,Xdl X8.6f printf("\n"); 1 getchar~);getchar~);clracrO; 1 157 " ,i ,k,qC i 1 t kl 1; /* TRIANG Matriz transpuesta de un matriz triangular. N = Orden de la matriz. TOP = Matriz dada. */ S = Matriz triangular. SAPACE = Matriz auxiliar. #include #include #include #include <stdlib.h> <stdio.h> <math.h> <conio.h> 10 #define MAX main( 1 I float topCMAXICMAX1 ,sCMAXICMAXl ,spaceCMAX*MAXI; f 1oat e,x ; int n,l,i, j,k,im,ip; for (j=O;j<MAX;j++) / * Inicializa Arreglos for (i=O;i<MAX;i++) top~jlCil=sC~lCi1=0; for (i=O;i<MAX*MAX;i++) spnceCiI=O; */ clrscr0; gotoxy(20,S); printf("T R I A N G\n\n'); printf(" Escriba el orden de la Hatriz.\n"); / * Tom de datos scanf ( "%d" ,Ln 1 ; printf(" Escriba los coeficientes d e l a Hatriz(i,j).\n"); for (j=l;j<=n;j++) for (i=l;i<=n;i++l I printf(" CXd,%dl j,i); cscanf ( " W f ,&top C j3 C i 1 1; printf("\n"); */ 'I, 'I 1 for (i=l;i<=n;i++) I ip=i+l; i m=i 1 ; sCi3Cil=sqrt~topCilCil-spacetil~; if (n==l) break; else C for (k=ip;k<=n;k++) i e=o ; if (im!=O) for (l=l;l<=im;l++l e~e+8Cllfi3*S~1ICkl; x=( top[ il[kl-e)/aC i 3 C il; apace[ kl=opaceC k i + x * x ; sC i 1 C kl=x; - 1 1 ? printf(" Matriz Inverasa :\n"); for (i=l;i<=n;i++) C f o r ( k= 1 ;k<=n;k++ 1 p r i ntf ( printf("\n"); ? getchar( ):getchar( );clrscr( 1 C Wd, %dl 1; I58 % 6 . 3 f , " ,i ,k,st i 3 C kl 1; /* SPUR Suma de la diagonal de la matriz. N = Orden de la matriz. TOP = Matriz dada. */ = Suma de la diagonal. SPUR #include #include #include #include <stdlib.h> <stdio.h> <math.h> <conio.h> #define MAX main( E 10 1 float top[:MAXI C MAXI ,SI:MAXI C MAXI ,space[:MAXI ; f 1 oat e,x , spur=O ; int n, 1 , i, j , k , im,ip; for / * Inicializa Arreglos ( j = O ; j<MAX;j++) for (i=O;i<MAX;i++) topEjl1i3~sCjlCi1=spaceCil=O; */ clrscr0; gotoxy(20,5); printf("S P U R\n\n"); printf(" Escriba el orden de la rPlratriz.\n"): / * Tom de datos scanf ( "Xd",&n 1 ; printf(" Escriba los coeficientes de l a Hatriz(i,j).\n"); f o r íj=l;j<=n;j++) for (i=l;i<=n;i++) E printf(" MC%dlC%dl = ",i,9): cscanf ( " X f " , &top[ i 1 E j1 1 ; pr i nt f ( \ n" 1; */ 'I 1 for (i=l;i<=n;i++) I spur=spur+topCilCil; ip=i+l; im=i-1; sCilCil=~topEi3~il-spaoe[il)l if (n==l) break; else E for (k=ip;k<=n;k++) C e=O ; 1 1 1 if (im!=O) for ( l = l ~ l < = i r n ; l + + )e=e+aE13[13*8[11tk3; x=(topCiI[kl-e); space[ kl=apaeei k l + x * x i sC i I C kl=x; 1 printf("\n Suma de l a Diagoanl W6.2f getcharí );getcharO;clrscr( 1; ",spur); /* MATRAN = Ndmero de filas. N M */ Emplea permutaciones sobre la transpuesta de una matriz rectangular hacia arriba. = NGmero de columnas. MATRIX = Matriz dada. MATRIX = Matriz transpuesta. #include #include #include #i nc lude <stdlib.h> <stdio.h> <math.h> (coni o.h> #define MAX main( 10 1 { float matrixCMAX*MAXl; float keep,katch; int n,m,i,j,k,ij,ji,l,t,jless; for (i=O;i<MAX*MAX;i++) matrixCil=O; cltscr0; gotoxy(20,Si; printf("M A T R A N\n\n"); printf(" Escriba el nhmero de filas y columnas reapectivamente.\n*); / * Toma de datoo * / scanf ( "XdXd",&m, &n 1; printf(" Escriba loa coeficientes de la Matriz(i,j).\n*); for (t=l;t<=(m*n);t++) C printf(" CXdl = ",t); cscanf ( "Xf",&matrix[ tl 1; pr intf ( " \ n" i ; 1 k-m*n-1; for (i=l;i<=k;i++) matrixCil=(matrixCi1/2)*2; for (1=2;l<=k;1++) E if ( matrixC13==((matrixC13/2)*2) 1 € keep=matrixCll; ij=i; do E jless=(ij-l)/m; i=ij-jless*m; j=jlesa+l; ji=j+(i-l)*n; katchematrixl jil; matr i xC j i 3 =keep+ 1 ; keep= katch ; ij=ji; )while (ij!=l); 1 3 j=i; pr intf ( " \ n Matriz Transpuesta :\ n" 1 ; for ( i=l; i<=m*n; i++) C printf(" Cldl K7.4f ",i,matrixCil); if (j==n) E printf("\n"); j=l; 1 1++: I60 1 1 g e t c h a r ( 1 ; g e t c h a r ( 1 ;clrscr( 1; /* COSTAB Genera una tabla de longitud de onda de Coseno. TABLE = Tabla de Coseno (COS~,COS,COS 2,cos 3 , . ..,cos (2*m) 1; */ = m+l. M #include #include #i nc lude #include <stdlib.h> <stdio.h> <coni o.h > <math.h> #define MAX2 20 #define PI 3 . 1 4 1 5 9 2 7 main( E 1 float tableCMAX21 ,angulo; int i ,rnm,m,fm; for (i=O;i<MAXS;i++) tableiil=O; clrscr0; gotoxy(20,5); printf("C O 3 T A B\n\n"); printf(" Escriba el valor de M , donde M=m+l \n"); scanf ( "%d",&m) ; printf("\n La tabla de Cosenos es :\n\n"); Angulo - Valor\n\n"1 ; printf ( 'I fm=m+m-2; mm=m+m- 1 ; for (i=l;i<=mm;i++) C angulo = ((i-l)*2*PI)/fm; tabletii=cos(angulo); 17.5f \ n ",angulo, table[ i 3 1: printf(" '117.Sf 1 getcharO;getchar( );clrscrO: 1 162 . /* SINTAB Genera una tabla de longitud de onda de Seno. TABLE = Tabla de Seno (sin0,sin ,sin 2,sin 3,...,sin */ M #include #include #include #include (2*m) = m+l. <stdlib.h> <stdio.h> <conio.h > <math.h> #def ine MAX2 20 #define PI 3.1415927 main( 1 E float tableCMAX23,angulo; int i,mm,m,fm; for (i=O;i<MAX2;i++) tableCil=O; clrscr0; gotoxy(20,5); printf("S I N T A B\n\n"); printf(" Escriba el valor de H, donde H=m+l scanf ( "%d" ,&m) ; printf("\n La tabla de Senos es :\n\n"); printf(" Angulo - Valor\n\n"); \n"); fm=m+m-2 ; mm=m+m- 1 ; for (i=l;i<=mm;i++) { angulo = ((i-l)*L*PI)/fm; table~iJ=sin(angulo); X 7 . 5 f \n",angulo,tabletil); printf(" X 7 . 5 f f getchar0;getcharO;clrscrO; f 1; /* */ Calcular el k-simo Seno o Coseno. COSP valor de una transformación de TABLE = Tabla de Cosenos (cosO,cos,cos 2,cos 3,...,cos (2*m1 1; ó Tabla de Senos (sinO,sin,sin 2,sin 3,...,sin (2*m) 1; M = m+l. #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <math.h> /* #define MAX2 20 #define PI 3.1415927 valor m6ximo de ' 2 * m ' */ float c,tabletMAX23,dataCMAX23; int m , n , k ; char opcion; cosenoí 1 c float angulo; int i,mm,fm; fm=m+m-2; mm=m+m- 1; for (i=l;i<=mra; i++) C angulo = ((i-i)*S*PI)/fm; tableCil=cos(angulo); /* 1 1 fin de coseno seno( C */ 1 float angulo; int i,rnrn,fm; fm=m+m-l; mm=m+m- 1; for (i=l;i<=iam;i++) { angulo = ((i-íi*S*PI)/fm; tableCiI=ftin(angulo); 1 /* 1 f i n d e seno tomadatos( 1 */ c int i; for (i=O;i<MAXL;i++) tableCil=O; opcion='c'; gotoxy(20,5); printf("C O S P\n\n"); clrscr0; printf(" Escriba el valor d e n = "1; scanf ( "Wd" ,En) ; n++; printf("\n Los Coeficientes del Vector X son:\n"); for (i=l:i<=n;i++) C printf ( " XL%dl = i 1; scanf ( "%f",&datal 1 3 1 ; ' I , 1 6 Coseno (cl : "1; opcion=getcharO;opcion=getcharO; Escriba el valor m = dese "1; scanf("%d",&m); --.-nprintf(" -Asrma - de valor a ( O < = k <= m ) : printf(" Desea valor d e Seno ( S I m++; ' I ) ; 164 -- scanf ( "Xd",&k) ; k++; if (opcion=='s'1 seno( 1; else coseno( ) ; /* 1 fin de toma datos */ resultado0 E printf("\n El Xd Q valor en transformación de",k--1; i f (opcion=='s'i printf(" seno es : X7.5fn,c); else printf(" coseno es : %7.5f",c); getcharí );getchar( );clrscr( 1; 1 / * fin de resultado * / cosp( 1 c int i t j,kk,rnm,mmm; j=i; c=o; kk=k- 1 ; mm=m+m- 1 ; mmm=mm- 1 ; for(i=l;i<=n;i++) E c=c+datat i 3 *tablet j3 ; j=j+kk; if ( ( j-mm) >O 1 j=j-mmm; 1 1 /* fin de cosp */ main() c toma-datosí 1; COSP(); resultado0; 1 165 /* */ TRIG X LX W #include #include #include # i nc 1 ude Calcula el valor de la Transformada de Fourier, por fórmulas trigonomtricas de suma de ángulos, para senos y cosenos. = = = ... (xO,xl, ,xn). Longitud de X . Frecuencia Angular. <stdlib.h> <stdio.h> <conio.h> <math. h > #define MAX2 20 main( 1 { float x~MAX23,sinnw,sinw,cosw,cosnw,seno,coseno,t,w; int lx,i; for (i=O;i<MAX2;i++) xCil=O; clrscr0; gotoxy(20,5); printf("T R I G \ n \ n " ) ; printf(" Escriba la longitud L X \ n " ) ; scanf ( "Wd",&lx) ; printf("\n Los Coeficientes del Vector X son:\n"); for (i=l;i<=lx;i++) { printf(" tWd1 = ",i); cscanf("Wf",&xtil); pr i ntf ( \ n" i ; I' 1 printf(" Escriba la frecuecia angular W \ n " ) ; cscanf ("Xf",&w) ;printf ( " \ n " ); cosnw=l ; si nnw=O ; sinw=sin(w) ; cosw=cos ( w 1; seno=coseno=O ; for ( i = l ; i<=lx;i++) C coseno=cosono+cosnw*xC i 1 ; seno=seno+sinnw*xtil; ~==CO~W*COS~W nw*sinnw; -S~ sinnw=cosw*sinnw+sinw*cosnw; cosnw=t; 1 p r i n t f í " El valor para Coseno es : %7.5f\n",coseno); : W7.5f \ n " ,seno 1; printf(" El valor para Seno es 1 getchar0;getcharO;clrscrO; 166 Calcula la fase de una curva continua. DRUM /% #include #include #i nc lude #include */ <stdlib.h> <stdio.h> (conio. h> <math.h> #define MAX3 20 #define PI 3.141559265 main( E 1 float faseCMAX31,pj; int l o n f a s e , i; for (i=O;i<MAX3;i++) faseCil=O; clrscr0; gotoxyí20,5); printf("D R U M\n\n"); printf(" Escriba la longitud del Vector de Fase:\n"); scanf ( "%d" ,&lonfase) ; printf("\n Los Coeficientes del Vector de Fase aon:\n"); for (i=l;i<=lonfase;i++) E printf(" CXd3 = ",i)i cscanf("%f",&faseCii) i printf ( "\no') i ? pj=O; for (i=2;i<=lonfase;i++) E if ( (abs(faseCil+pj-faseCi-ll)-PI) > O ) E if í (faseCil+pj-faseti-11) < O ) pj=pj+PI*S; else if í (faseCil+pj-faooCi-ll) > O ) pj=pj-P1*2; ? faaeCi3=faseCil+pj; 1 printf("\n Los Coeficientes del Vector de Fase aon:\n"); for (i=l;i<=lonfase;i++) printf(" t%dl %7.5f ",i,faseCiI); getchar( );getcharO;clrscrí 1; ? 167 /* POLAR #include #include #include #include Calcula los coeficientes de fase d e un vector complejo <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 10 #define PI 3.14159265 main( 1 I float ximCMAX1 ,reCMAXl ,ampCMAXI ,phzCMAXI; int i , l ; clrscr0; gotoxy(20,5); printf("P O L A R\n\n"); for ( i=O;i<=MAX;i++i ximC i l=reC i ]=amp[ i l=phzC i ]=O; printf(" Escriba la longitud del Vector de Fase:\n"); ; scanf ( "%d" ,& l i printf("\n Los Coeficientes Reales del Vector son:\n"); for (i=l;i<=l:i++) E printf(" CXdl = " , i i ; cscanf ( "%f ,&re[ i 1 i ; pr i ntf ( \ n" 1 ; 'I 'I 3 printf("\n Los Coeficientes Imaginarios del Vector son:\n"i; for (i=l;i<=l;i++) E printf(" C%dl = I',i); cscanf ( "%f &ximi i 1 1 ; printf ( ''\n"); 'I, 3 for (i=l;i<=l;i++) E ampCil=sqrt( reCil*re~il+ximCil*ximCil 1; if (ximCil<O) E if (re[ il<O) phzC il=atan(ximC il/reC ill-PI; if (reCiI==O) phzCil=-PIIS: if (reCiI>O) phzCil=atan(ximCil/reCil~: 3 else if (ximCiI==O) E if (roCil<O) phzCil=-PI; if iroCil==O) phzCil=O; if ( ret i 1 >O 1 phzC i ]=atan( ximC i 1 /ret i 1 i ; ? else if (ximCiI>O) { if í ret iI<O) phzC iI=atan( ximC il/ret 11 )+PI; i f ( re[ i ]==O phzi i l=PI/2; if íreCil>O) phzCil=ate (ximCiI/retil); ? 3 printf("\n\n Los coeficientes Reales del Vector son:\n"); for (i=l;i<=l;i++) printf(" CWdl W7.5f ",i,reCil); printf("\n\n Los Coeficientes Imaginarios del Vector son:\n"); for íi=l;i<=l;i++) printf(" CWdl %?.Sf ",i,ximCil); printf("\n\n Los Coeficientes de Fase son:\n"); CIdl W7.5f i ,phzl i I ) ; for ( i=l; i<=l;i++) printf ( getchar( );getchar( 1;clrscrO; 'I 3 'I, /* 168 POLAR */ */ /* SHAPE Calcula el filtro "weaveshaping' 6 de forma de onda. = B LD = LA = Onda permitida en la entrada al filtro. Longitud d e B igual a n+l. Onda permitida que es la deseada a la salida del filtro. Longitud de D igual a k + l . Longitud de A, ó número de coeficientes del filtro, igual a m+l. A = C = LC = CASE= Coeficientes del filtro de forma d e onda. Onda permitida que es la actual salida del filtro. Longitud de C igual a m+n+l. Rango cuadrático del e r r o r entre el actual y el deseado. LB = = D */ #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 8 #define MAX2 20 float bCMAX1 ,dCMAXl ,aCMAXl ,cCMAX21 ,spaceCHAX23; float ase; int lb,ld,la,lc; toma-datos( i E int i ; for (i=O;i<=MAX-l;i++) bCil=dCil=atil=O; for (i=O;i<=HAXS-l;i++) cCil=O; clrscr0; gotoxy(20,S); printf("S H A P E\n\n"); printfi" Escriba el nQmero de coeficientes d e B (n+l) = "1; ecanf(*%d",&Ib); printf("\n Los Coeficientes de la onda d e entrada B son:\n"); for ( i = l ; i<=lb;i++) E printf(" B[%dl = '',i); scanf("%f",&bCiJ); 3 printf("\n Escriba el número de coeficiente. d o D ( k + l ) = "1; rcanf('%d',lld); prfntf("\n Los Coeficientes d e la onda doroada D a la salida son:\n'); for (i=l;i<=id;i++) C printf(" DCldl = ",i); scanf(*Xf",&dCil); 3 3 printf("\n Escriba 0 1 número de coeficientes d o A ( m + l ) = "1; 8canf("%dn,&la); I * fin d e t o m datos * / resultado0 E int i; clrscr( 1; gotoxy(20,3) ; printf ( " S H A P E\n\n"i ; printf("\n Los Coeficientes d e la onda d e entrada B son:\n"); for ( i=l; i<=lb; i++) E printf(" BCWdl = K6.4fB',f,bCi1i; 3 -^_I-y printf("\n\n Los Coeficientes de l a onda deseada D a la salida son:\n"); for (i=l;i<=ld;i++) E 169 -.. -.PY__-___ rintf(" DtXdI = X6.4f8',i,dCil); -u r 1 printf("\n\n Los coeficientes del filtro de forma de onda son : \n"); for(i=l;i<=la;i++) printf(" AEXdI = X8.6f ",i,aCiI); printf("\n\n Los coeficientes C de la actual salida del filtro son : \ n " i ; for(i=l;i<=lc;i++) printf(" CEXdI = X8.6f ",i,cCiI); printf("\n\n El rango de error cuadrático entre deseado y actual es : " 1 ; printf(" %8.7f",ase); printf("\n\n Los coeficientes de 'space' son : \n"); for(i=l;i<=2*la;i++) printf(" spCXd1 = X8.6f ",i,spaceCiI); g e t c h a r O ; g e t c h a r O ; c l r s c r ( 1; /* 1 fin de resultado */ cross(lx,ly,lg,x,y,g) int lx, ly,lg; f 1 oat * x , * y , *g ; E int i, j,menor; f o r (j=l;j<=lg;j++) E if ( l y > (lx-j+l)) menor = lx-j+l; else menor = ly; gC jl=O; for(i=l;i<=menor;i++) gC jl=gC jl+xC j+i-ll*yCil; 1 /* 1 fin de cross /* Producto punto */ */ eureka(lr,rr,gg,ff,aa) int Ir; float *rr,*gg,*ff,*aa; E float v,d,q,hold; int j,k,l,l1,12,13; v=rrCll;d=rrC23; aaCll=l; ffCll=ggCll/v; q=ffCll*rrC23; if(lr!=l) C for (1=2;1<=lr;l++) I aaC 13=-d/v; if (1!=2) I 113 (1-2)/2; 12=11+1; for (j=2;j<=12;j++) C hold = aaCj1; k=l-j+l; aaC jí=aaC jl+aaCll*aaCkl; aaCkl=aaCkI+aaCl1*hold; 1 if ((2*11)!=1-2) aat 12+13=aaC 12+1l+aaC 13*aaC 12+11; 1 v=v+aaC 11 *d; ffc lI=(ggC 11-q 1/v; 13=1- 1 ; for (j=l;j<=13;j++) C k=l-j+l; ffC jl=ffC jl+ffC 1 l*aaC kl ; 1 ~ - I - if (l==lr) break; else C d=q=O ; for (j=l;j<=l;j++) { 170 r k=l- j+2; d=d+aaC jl*rrCkl; q=q+ffC jl*rrCkl; /* 1 1 1 1 1 fin de eureka */ shape( 1 c i n t i, j,k; float dd,ag; dd=ag=O : cross(lb,lb,la,b,b,space); cross(ld,lb,la,d,b,&spaceClal); eureka(la,space,&spaceClal,a,&spaceC2*lal~; for(i=l;i<=ld;i++) dd=dd+dCil*dCil; for(i=l;i<=la;i++) ag=ag+aCil*spaceCla+il; if (dd!=O) ase=(dd-ag)/dd; else ase=O; lc=la+lb-1; for(i=l;i<=lc;i++) cCil=O; for (i=l;i<=la;i++) for (j=l;j<=lb;j++) { k=i+j-1; c C kl =cC kl +aC i 1 *bC j 3 ; 1 1 /* fin de shape */ main( 1 i tomadatos( 1; shape( 1; resultado( 1; 1 171 /* subrrutinas DOT */ /* subrrutina FOLD */ / * SPIKE = LB = LA = B A Calcula el filtro "spiking" ,para una óptima posición del 'spike'; Onda permitida en l a entrada al filtro. Longitud de B igual a n+l. Longitud de A, 6 ni5mero de coeficientes del filtro, igual a m + l . = Coeficientes del filtro de forma de onda. INDEX = Posición óptima del 'spike'. CASE= Rango cuadrhtico del error entre el actual y el deseado. */ #i nc lude <std 1 i b. h> #include <stdio.h> #include <conio.h> #i nc 1 ude (math. h> #define MAX 12 #define MAX2 6 0 float bCMAXl,aCMAXl,sCMAX21; float ase; int index, lb,la,id; tomadatosí 1 E int i; for (i=O;i<MAX;i++) bCil=aCil=O; for (i=O;i<MAXS;i++) sCil=O; clrscr0; gotoxy(20,5); printf("9 P I K E\n\n"); printf(" Escriba el número de cooficientea d o B (n+l) = "1; scanf ( "Xd",&lb) ; printf("\n Los Coeficientes d e la onda de entrada B son:\n"); for ( i=l; i<=lb;i++) E printf(" BCXdl = ",ii; scanf("%f",bbCil); 1 printf("\n Escriba el número de cooficientes de A (m+l) = scanf ("Xd",&la); printf("\n Espere un momento por favor..."); 1 / * fin d e toma dato6 * / ' I ) ; resultado( 1 E int i ; clrscr0; gotoxy(25,2); printt("3 P I K E\n\n\n"); printfl" Los Coeficientes de l a onda do entrada B son:\n\n"); for (i=l;i<=lb;i++) C printft" BiXdI = W7.4f ",i,bCil); i f í ( iX41==O 1 pr i ntf ( \ n" 1; I' 1 printf("\n\n Los coeficientes del filtro 'spike' son : \n\n"); for(i=l;i<=la;i++) E printf(" ACWdí = X8.6f ",i,aCil); if í ( iK4)==0 1 pr i ntf ( \ n" 1 ; " 1 printf("\n\n La posici6n bptima do 'spike' es : %d",indexi; printf("\n\n El rango de error cuadritico es : X8.7f",ase); son : \n\n"); printf("\n\n Los coeficientes de for(i=l;i<la+lb;i++) € printf("-sC%dl = %8.6f ",i,sCil); 172 ' S I ^^ c ... - 1 if( (i%4)==0) printf("\n"); getchar0;getcharO;clrscrO; ? /* fin de resultado */ cross( lx, ly, lg,x,y,g) int lx, ly,lg; f 1 oa t * x, *y,*.g; { int i,j,menor; for (j=l;j<=lg;j++) E if (ly > (lx-j+l)) menor = lx-j+l; else menor = ly; gC jl=O; for(i=l;i<=menor;i++) g C j 3 = g C j l + x C j + i - 1 l * y C i l ; /* Producto punto */ ? */ eureka ( 1 r ,rr ,gg ,ff ,aaa 1 1 /* fin de cross int Ir; float *rr,*gg,*ff,*aaa; C float v,d ,q,hold; int j,k,l,ll,l2,13; v=rrC 1 3 ;d=rrC21; aaaC13=1; ffClI=ggC13/v; q=ffClI*rrC23; if(lr!=l) C for ( 1=2;l<=lr;1++) E if ( v! =O 1 aaaC 1 I =-d/v; else aaaC13=0; i f (1!=2) C 11= (1-2112; 12=1 l+l ; for (j=2;j<=lS;j++) C hold = aaatjl; k= 1 - j + 1 ; aaaCjl=aaa[jl+ara[ll*aaa~kl; aaatkl=aaatkl+raat ll*hold; 1 if ((2*11)!=1-2) aaaC12+11=aaaC12+11+aaa~11*aaaC12+11; 1 v=v+aaaC 1 3 *d; i f (v!=o 1 f f t lI=(ggC ll-q) / v ; else ffC11=0; 13=1-1; for (j=l;j<=13;j++) C k = l - j+i; ff C jI=ff C jl+ff C ll*aaatkl ; 1 --- + I - if (l==lr) break: else C d=q=O ; for (j=l; j<=l;j++i C k=l- j+2; d=d+aaaC Jl*rrCkl; q=q+ffC jl*rrCkl; I_ 173 - 1 1 /* 1 1 1 fin de eureka */ shape(lbb,ldd,laa,lcc,bb,dd,aa,cc,space,asee) int lbb,ldd,laa,lcc; float *bb,*dd,*aa,*cc,*space; float *asee; c int i,j,k; f 1 oat s u m a d ,s u m a a g ; suma-d=sumaag=O ; cross(lbb,lbb,laa,bb,bb,space); cross( ldd, lbb,faa,dd,bb,&spaceC laal 1 ; eureka(laa,space,&spacetlaal,aa,&spacet2*laal~; for(i=l;i<=ldd;i++) s u m a ~ d = s u m a ~ d + d d C i l * d d C i l ; / * subrrutinas DOT for(i=l;i<=laa;i++) suma~ag=suma~ag+aaCil*spacetlaa+il; i f ( s u m a d ! =O 1 *asee=( s u m a d - s u m a a g 1/ s u m a d ; else *asee=O; lcc=laa+ 1 bb-1 ; for(i=l;i<=lcc;i++) cctil=O; for (i=l;i<=laa;i++) for (j=l;j<=lbb;j++) C k=i+j-l; ccC kl=cct kl+aaC i l*bbC jl ; /* 1 1 fin de shape /* subrrutina FOLD */ spike( 1 C int i , j: ld=la+ 1b- 1 ; for(i=l;i<=ld;i++) C for(j=l;j<=ld;j++) stld+jl=O; / * subrrutina IIYPULS sCld+il=l; shape~lb,ld,la,ld,b,&s~ldl,a,&stldl,&sC2*ldl,&sti~~; 1 ase=aC 11 ; index=l; for(i=l;i<=ld;i++i { if(ase>sCili i ase=sCil; indox=i; 3 3 for(j=l;j<=ld;j++) sCld+jl=O; S C ld+indexl=l; /* subrrutina #INS /* /* 3 /* C fin de spike 1 */ tomabatos( ; spike( 1; resultado( ; 1 174 */ fin de subrrutina INDEX * / aubrrutina IHPULS * / shape~lb,ld,la,ld,b,&8tldl,a,&sCldl,&sC2*ldl,ase~; main( */ */ /* SPIKER Calcula el filtro "spiking" ,para una bptima posición del 'spike'.' ! Onda permitida en la entrada al filtro. Longitud de B igual a n+l. Longitud de A, ó número de coeficientes del filtro, igual a m+l. B = LB = LA = = Coeficientes del filtro 'spiking' en la posición óptima. A C = Onda permitida que es la actual salida del filtro. LC = Longitud de C igual a m+n+l. = Posición óptima del 'spike' (p+l). INDEX ERRORS = Arreglo de errores. E M I N I M O = Error minimo. ESPACIO = Arreglo para area de trabajo. */ #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 10 #define MAX2 15 #define MAX3 40 float bCMAX3 ,aCMAXl ,cEMAX23 ,errorsCMAXSI ,espacioCMAX33 ; int index, lb, la,I C ; f 1 oat e m i n i mo ,e-rang o ; tomadatos( 1 E int i; e-rango=O ; for (i=O;i<MAX;i++) b[il=aEií=O; for (i=O;i<MAX2;i++) c~iI=errorstil=O; for (i=O;i<MAX3;i++) espacio[il=O; clrscr0; gotoxy(30,S); printf("S P I K E R\n\n"); printf(" Escriba el nQmero d e coeficientes de B (n+l) = " 1 ; scanf ( " X d ",&lb) ; printf("\n Los Coeficientes d o l a onda de entrada B son:\n"); for (i=l;i<=lb;i++) C printf(" BCIdl = ",i); scanf("%f",bbCiI); 1 printf("\n Escriba el nQmero de coeficientes d e A ( m + l ) scanf ( "Xd",&la) ; printf("\n Espere un momento por favor..."); 1 / * fin d e toma datos * / i I = "1: I resultado( 1 c i int i; clrscro; gotoxy(25,2); printf("S P I K E R\n\n\n"); printf(" Los Coeficientes d e la onda de entrada B son:\n\n"); for (i=l;i<=lb;i++) { printf(" BtXdI = W6.4f ",i,bCil); i f ( ( iX4 i==O 1 pr i nt f ( \ n" 1 ; ~ ~ I I II 1 'I 1 ~ I printf("\n\n Los coeficientes del filtro 'spiker' son : \n\n"); for(i=l;i<=la;i++) E printf(" ACXdi = X8.6f ",i,atil); 17r . ..__-I_ _- I c 1 __--., "_ . . _ I i f ( ( i Y 4 1==O ^I" . . ... ~. . . ... .. ._ . ~- F pr i nt f í " \ n" 1 printf("\n\n Los coeficientes del I C ' son : \n\n"); for( i = l ; i<=lc;i++) { printf(" CCXdl = %6.4f ",i,cCiI); if ( ( iX4 1==O 1 pr i ntf ( \ n" 1 ; " 1 getchar( ):getchar( 1; printf("\n\n La posición óptima de 'spike' es : %d",index); printf("\n\n El arreglo d e errores es : \n\n"); for( i=l; i<=lc;i++) C printf(" ErrCXdI = %6.4f ",i,errorsCil); i f ( ( i%41==O 1 p r i ntf ( \ n" 1 ; 'I 1 printf("\n\n El error mínimo es el Error CXd3 = %8.7f8',index,eminimo); printf("\n\n El error de rango cuadrático es = X8.7f1',e-rango); printf("\n\n Los coeficientes de 'espacio' son : \n\n"); for(i=l;i<la+lb:i++) C p r i ntf ( EiC %dl = K6.4f i ,espacio[ i 1 1 ; if ( ( i%41==O pr i ntf ( " \ n" 1 ; 'I 'I, 1 getchar( 1 ;clrscr( 1; /* fin de resultado */ ross(lx,ly,lg,x,y,g) int lx,ly,lg; float *x,*y,*g; int i,j,rnenor; for (j=l;j<=lg;j++) I if (ly > (lx-j+li) menor = lx-j+l; else menor = ly; gc jl=O; for(i=l;i<=menor;i++) g C j l - g C j l + x C ~ + i - 1 3 * y c i 3 ; /* 1 fin de cross I * Producto punto */ ureka(ir,rr,gg,ff,aaa) int Ir; float *rr,*gg,*ff,*aaa; float v, d ,q ,hold ; int j,k,l,l1,12,13; v=rrCll;d=rrC21; aaaCll=l; ffc 13-ggc 11 /v; q=f fC 13 *rrC 21 ; if(lr!=l) C for (1=2;l<=lr;l++) C i f ( v ! =O 1 aaaC 1 1 =-dl v ; else aaaClI=O: if (1!=2) C 1 1 = (1-2)/2; 12=11+1; for (j=2;j<=l2;j++) hold = aaat jl: k=l-j+l; aaaCjl=aaaCjl+aaaC1l*aaaCkl; 1 aaaCkl=aaaCkl+aaaC ll*hold; 176 */ - ---^__l-.. -- ~ -- h > I _ _ _ - 1 .- -l>l,”.il. -“Ir.”. . . . I I I I if ((2*11)!=1-2) aaaC 12+1l=aaaC 12+1I+aaaC ll*aaaC 12+13; I I 1 v=v+aaaCl1*d; if (v!=O 1 ffC lI=(gg[ 11-q)/ v ; else ffCll=O; 13~1-1; 1 for ( j = i ; j<=13;j++) { k=l-j+l; ff C jl=ff C jl+f f C 1 1 *aaaC kl ; 1 if (l==lr) break; else { d=q=O ; for (j=l;j<=l;j++) E k= 1 - j+2 ; d=d+aaaCjl*rrCkl; q=q+ffC jl*rrCkl; 1 /* 1 1 1 1 fin de eureka */ shape(lbb,ldd,laa,lcc,bb,dd,aa,cc,space,asee) int lbb,ldd,laa,lcc; float *bb,*dd,*aa,*cc,*space; float *asee; c int i, j,k; f 1 oat s u m a d ,suma-ag ; suma-d=8uma-ag=O ; cross(lbb,lbb,laa,bb,bb,space); cross(ldd,lbb,laa,dd,bb,&spaceClaal~; eureka(laa,space,&spaceClaal,aa,&spacot2*laal~: for(i=l;i<=ldd;i++) suma-d=suma-d+ddEil*ddtil; / * oubrrutinas DOT for(i=l;i<=laa;i++) surna~ag=surna~ag+aatil*spaceClaa+il; if ( suma-d! =O i*asee=( s u m a d - s u m a a g 1/suma-d; else *asee=O; lcc=laa+lbb-1; for(i=l;i<=lcc;i++) ccCil=O; for (i=l;i<=laa;i++) for (j=i; j<=lbb; j++l I k=i+j-i; ccC kl=ccC kl+aaC i 1 *bbC j i ; /* 8ubrrutina FOLD */ */ 3 1 /* fin de shape */ side(lf,h,ff,a-a,r-r) int If; f 1oat h ,* ff ,* a a ,* r-r ; c int i , j; float s,t,v,w,flf; v=r-r C 11 ; s=t=O; if (lf!=l) E in.” 177 ---- for (i=2;i<=lf;i++) C j= 1 f+2-1 ; s=s+(ffC i-11 )*(r-rC i l l ; t=t+(a-aC jl)*(r-rCil); v=v+ ( a-aC i 1 * ( r-rt i 1 i ; 1 1 flf=f-fClf1; if ( v ! = O ) w=(h-s+flf*t)/v; else w=O; if (lf!=li for (i=S;i<=lf;i++) F j=1 f-i+S; f-fC jl=ffC j-ll+aaC jl*w-aaC il*flf; 1 f_fCll=w; 1 /* fin de side */ spi ker ( 1 F float q ; int h,i,j,k; lc=la+lb-1; cross(lb,lb,la,b,b,espacio); for (i=l;i<=lc;i++) C for(j=l;j<=lc;j++i cCji=O; / * subrrutina IMPULS * / cCii=l; cross( lc, lb, la,c,b,&sspacioC la1 1 I if (i<2) e u r e k a ~ l a , e a p a c i o , E e s p a c i o C l a l , a , l e s p a c i o C 2 * l a l i ; else side(la,espacioCla+lJ,a,&espacioC2*lal,espacio~; q=o ; /* subrrutina DOT */ /* subrrutina FOLD */ I1 for (h=l;h<=la;h++) q=q+aIhl~espacioCla+hl: for(h=l;h<=lc:h++) cCh1-O; for (h=l;h<=la;h++) for ( j = 1 ; j<=lb;j++) { k=h+j-1; cC kI=cI kI+aC hl *bC j1 ; 1 /* fin de subrruitna fold /* subrrutina MINS /* /* fin d e subrrutina mins subrrutina IMPULS * / */ errors1 il=l-q; I 1 eminimo=errorsC 1 3 ; i ndex=l ; for(h=l;h<=lc;h++) E if (e-minimo>erroraChli C e~minimo=orrorsChl; i ndex=h ; ? 1 for(j=l;j<=lc;j++i cCjI=O; cCindexI=l; */ */ shape~lb,lc,la,lc,b,c,a,c,espacio,&~~rango): /* 3 main( .I fin de spiker I */ 1 toma-datosí 1 ; spiker( i; resultado( i; E 178 /* SHAPER Calcula el filtro "weaveshaping" = LB = B Ó de forma d e onda. Onda permitida en la entrada al filtro. Longitud de B igual a n+l. Onda permitida que es la deseada a la salida del filtro. Longitud de D igual a k + l . Longitud de A, ó n6mero de coeficientes del filtro, igual a m+l. D = LD = LA = A = Coeficientes del filtro de forma de onda. C = Onda permitida que es la actual salida del filtro. LC = Longitud de C igual a m+n+l. = Posición optima del error. INDEX E M I N I M O = Rango cuadrático del error entre el actual y el deseado. ERRORES = Arreglo de errores determinados. */ #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX 10 #define MAX2 15 #define MAX3 40 float bíHAX1 ,dCMAX3 ,aCMAXI ,cCMAX23 ,erroresCMAX23 ,espacioCMAX31; int index,lb,ld,la,lc; f 1 oa t e m i n i mo ,e-r ango ; tonia-datos( c int i ; e-r ang o=O ; for (i=O;i<MAX;i++) bCiI=aCil=O; for (i=O;i<MAXL;i++) cLil=erroresCil=O; for (i=O;i<MÁX3;i++) espacioCil=O; clrscr0; gotoxy(25,5); printf("S H A P E R\n\n"); - "1; printf(" Escriba el ndmero d e coeficientes d e B (n+l) scanf("Wd",&lbi; printf("\n Los Coeficientes de la onda d e entrada B sono\n"); for ii=l;i<=lb;i++i € printf ( ' I BCXdl = " ,i ; scanf("Xf",&bC 1 3 1; ? printf("\n Escriba el nomero de coeficientgs do D (k+l) = "1: scanf í " W d ",&ldi ; printf("\n Los Coeficientes de la onda deseada D a la salida sonr\n"); for (i=l;i<=ld;i++) E printf ( DCWdI = ' I , i 1; scanf ( "Xf",&dC i 3 1; ? priiatf("\n Escriba el ntmero de coeficientes d e A (m+l) = "1; scanf( "Wd",&la); printf("\n Espere un momento por favor..."); 1 / * fin d e toma dato8 * / resui tado( c int i; clrscr0; gotoxy(20,l); printf("S H A P E R\n"); printf("\n Los coeficientes de la onda de entrada B son:\n"); for ( i = l ; i<=lb;i++) E i qn --".AL1 _ I / ,-1 I_s__u printf(" ErrC%dl = %6.4f i f ( ( i %4) ==O 1 p r i nt f ( \ n 'I 1 'I ",i,erroresCil); 1; I I I eureka(lr,rr,gg,ff,aaa) int Ir; float *rr,*gg,*ff,*aaa; 1 float v , d,q , hold; int j,k,l,ll,l2,13; v=rrC 13 ;d=rrC21; aaaC 11=1; ffCll=gg~ll/v; q=ffClI*rrt21; if(lr!=l) C for (1=2;1<=lr;l++) E if(v!=O) aaaCll=-d/v; else aaaCll=O; if (1!=2) E 11= (1-2)/2; 12=11+1; for (j=2;j<=12;j++) E hold = aaaC jl; .- *--k= 1 - j+ 1 ; a. i 160 aaaC j 1 =aaaC j1 +aaaC 1 1 *aaaC kl ; aaaCkl=aaaCkl+aaaC1l*hold; 1 1 if ((2*11)!=1-2) aaaC12+ll=aaaCl2+ll+aaaCll*aaaCl2+ll; v=v+aaaC 1l*d; if ( v! =O ) ff C 1 1 = ( ggC 1 1 -q 1/ v i else ffCll=O; 1 3 4- 1 ; for ( j = l ; j<=13;j++) { k=l-j+l; ff C jl=ff E jl+ff C 1 l*aaaC kl ; 1 if (l==lr) break; else E d=q=O ; for (j=l;j<=l;j++) E k=l- j+2; d=d+aaaC j1 *rr C kl ; q=q+ff C jl*rrC kl ; 1 /* 3 1 1 1 fin de eureka */ shape(lbb,ldd,laa,lcc,bb,dd,aa,cc,space,asee) int lbb,ldd,laa,lcc; float *bb,*dd,*aa,*cc,*space; float *asee; E int i , j,k; f 1 oat s u m a d ,suma-ag ; sumad=suma-ag=O ; cross(lbb,lbb,laa,bb,bb,space); cross(ldd,lbb,laa,dd,bb,&spaceClaal~; eureka(laa,space,&spaceClaal,aa,&6paceC2*laal~; for(i=l;i<=ldd;i++) s u m a ~ d = e u a ~ ~ d + U U C i l * d d C i l ; / * oubrrutinao DOT for(i=l;i<=laa;i++) suma~ag=suara~ag+aaCil*spaceClaa+il; */ if ( suma-d! =O 1 *asee= ( sumad-suma-ag 1/suma-d; else *asee=O; /* lcc=laa+lbb-1; for(i=l;i<=lcc;i++) ccCil=O; for (i=l;i<=laa;i++) for f j=l; j<=lbb;j++) E k=i+j-1; /* fin de shape */ side(lf,h,ff,aa,rr) int If; f 1 oat h ,*f-f ,* a a ,* r-r ; { int */ ccCkl=ccCkl+aaCi3*bb~jl; 1 3 subrrutina FOLD i, jL- 181 t float s,t,v,w,flf; v=r-rC 11 ; s=t=O; if (lf!=l) I for (i=2;i<=lf;i++1 i j= 1 f+2-1 ; s=s+ ( f f C i - 1 11 * ( r-r C i I 1 ; t = t+ ( a a C j 11* ( r-r C i 1 1 ; v=v+ ( a a Ci 1 1 * ( r-r C i I 1 ; 1 1 f 1 f =f -f c 1 f 1 ; if ( v! = O 1 w=( h-s+f 1 f * t 1 / v ; e 1se w=O ; if (lf!=l) for (i=2;i<=lf;i++) E j=lf-i+2; f-f C j I = f f C j-11 + a a C j 1 *w-a-aC i 1 * f i f ; 1 ffCll=w; 1 /* f i n de side */ 182 shaper( 1 E int i,j,k,p,lcd,ldind,indld,ild,ldi; float dd,ag; 1c = 1 a+ 1b- 1 ; lcd=lc+ld-l; dd=O ; for (i=l;i<=ld;i++) dd=dd+dCil*dCil; /r subrrutina DOT */ cross(lb,lb,la,b,b,espacio): for (i=l;i<=lcd;i++) { for (p=l:p<=lcd;p++) cCpl=O; Id i= ld- i ; if (i<=ld) for(p=l;p<=i ;p++) cCpl=dCldi+pl; i ld=i-ld; if (i>ld) for(p=l;p<=ld;p++) cCild+pl=dCpl; */ MOVE * / MOVE * / /* subrrutina ZERO /* /* subrrutina subrrutina cross(lc,lb,la,c,b,&espacioClal~; if (i<2) e u r e k a ~ l a , e s p a c i o , & e a p a c i o C l a l r a , & e o p a c i o C 2 * l a l ~ ; else side~la,espacioCla+ll,a,&espacioC2*lal,espacio~; ag=O ; for (p=l;p<=la;p++) ag=ag+aCpI*espacioC1a+pl; for(p=l;p<=lc;p++) cCpl=O; for (p=l;p<=la;p++) for (j=l;j<=lb;j++) C /* /* subrrutina DOT */ subrrutina FOLD */ I k=p+ j-1 ; cCkl=cCkl+aCpl*bCjl; 1 3 if(dd!=O) errorestil=(dd-ag)/dd; else erroresCil=O; e m i nimo=erroresC 11 ; i ndex= 1 ; for(p=l;p<=lcd;p++) C if(eminimo>orroresCpl) 4 1 /* fin de subrruitna fold /* subrrutina MINS t main( i 1 */ s-minimo=erroresCpl; indexrp; 1 / * fin d e subrrutina mins / * aubrrutina ZERO * / for(p=l;p<=lcd;p++) cCpI=O; ldi nd=ld- i ndex; if (index<=ld) for(p=l;p<=index;p++) cCpl=dCldind+pl; indld=index-ld; if (index>ld) for(p=l;p<=ldsp++) cCindld+pl=dCpl; shape(lb,lc,la,lc,b,c,a,c,ospa~So,&e~rango); 3 /* fin de shapsr * / toma-datos( 1; shaper( 1 : resultado( i ; 183 */ */ /* subrrutina HOVE */ /* subrrutina HOVE */ /* COSTR Calcula el valor de la Transformada de Coseno. R LR = W = */ ... (rO,ri, ,rn). Longitud de R = n+l. Frecuencia Angular = 2rPI*frecc. = #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX2 20 #define PI 3.14159265 mainí 1 E float rlMAX23,sinnw,sinw,cosw,cosnw,seno,t,w; int lr,i; for (i=O;i<MAXZ;i++) rCil=O; clrscr0; gotoxy(20,5); printf("C O S T R\n\n"); printf(" Escriba la longitud LR \no'); scanf ( "Xd",&ir 1 ; printfí"\n Los Coeficientes del Vector R son:\n"); for (i=l;i<=lr;i++) C printf(" Cldl = ",i); cscanf ( % f ,&rC i 1 1; print f ( \ n" i ; 'I 'I 'I 3 printf(" Escriba la frecuecia angular cscanf("%f",&w); printf("\n"); W :"I; cosnw=l; sinnw=O ; sinw=s i n ( w 1 ; CO8W=CO6( W) ; seno=ri 1 3 ; for (i=1; i<=lr; i++) € t=cosw*cosnw-sinw*sinnw; 3 sinnw=cosw*sinnw+sinw*cosnw~ cosnw=t; seno=seno+S*rCil*cosnw; printf(" El v a l o r para Seno es 1 getchar0;getcharO;clrscrO; r %7.5f\nN,senoi; /* Calcula la estimación espectral de "smoothing operation por la fórmula de Hamming-Tukey. SMOOTH SPECT = ... ( C(O), C(E*fi, C(2*8*fi, ,C(m*a*f) 1 . donde Cífi es el periodograma, y B*f = 1 LS = Longitud de SPECT = m+l. SPECT = ( S ( O ) , S(Q*f), S(2*8*f), ,S(m*a*f) donde S(f) es estimación espectral. */ #include #include #include #include ... / i. <stdlib.h> <stdio.h> <conio.h> <math.h> #define MAX2 20 #define PI 3.14159265 main( E 1 float spectCMAX23,si,sj,sk,a,b,mm; int ls,i,j=O; for (i=O;i<MAX2;i++) spect[iI=O; clrscr0; gotoxy(20,S); printf("3 M O O T H\n\n"); printfi" Escriba la longitud Ls \n"); scanf ( " X d " ,&ls); printf("\n Los Coeficientes d e l Vector SPECT son:\n"); for (i=l;i<=la;i++) E printf(" C%dl = ",i); cscanf ( "%fe' ,&spectC i 1 1 ; printf ( " \ n "1 ; 1 mm=ls-l; a=0.54*apectCll+0.46*.pectC23i b=O. 54*8pect C 1 S I +O. 4 6 . 8 ~t~ C mail ; sj=spectt 13 ; sk=spec t C 2 3 ; for ( i = l ; i<=mm;i++) E si=sJ; 8j=sk; sk=opoctl j+13 ; sp~~tCj3~(0.54*~j)+(-O.23*(~i+~k)); 1 spectC l l = a ; spectC 161-b; printf("\n Los Coeficientes del Vector SPECT eon:\n"); for (i=l;i<=ls;i++) printf(" CIdl % 6 . 3 f ",i,spectCill; 1 getchar0;getcharO;clrscrO; 185 (2m). 'I ’ * AUGURY Calcula la predicción multicanal Wiener. N Nlimero de canales = p. Longitud de series de tiempo. Longitud máxima posible del operador de predicción. Parámetro de ruido blanco. NQm. entre CO..ll, del límite inferior del error cuadrado medio. Au tocorrelac i ón Longitud de estimación de error del operador de predicción. Operador de estimación de error por intervalo de predicción. Longitud de estimación de error de las series de tiempo. Estimación de error de las series de tiempo. Normalización del error cuadrado medio. LX LR SP 1 KE FLOOR . R LF F LY Y ERROR *i nc lude $include Kinclude 4include <stdl i b.h> <stdio.h> <mem.h> <conio.h> #define MNCANAL 2 ikdefine MLTIME 40 Icdefine MAXIM0 10 typedef typedef typedef typedof /* /* ndmero d e canales * / longitud de l a aerie de tiempo */ float MATRIZZD CMNCANALICMNCANALI; / * matriz de 2 dimenciones * / float MATRSZ3D CMLTIME3CMNCANALlEMNCANALl; /*matriz de Sdimenciones*/ float MATRIZDZ CMAXIM03tMAXIl401; float MATRIZD3 ~MLTIMElCMAXINOlCMAXIl401; MATRIZPD vf, vb; MATRI Z3D x,y,f ,r ; int n,lx,lr,lf,ly; float spike,floor; float ERRORCWAXIMOI ; torna-datos( i i int i ,j,k; int nrx,ncx,nry,ncy; float aux; for (i=O;i<~CANAL;i++l / * inicializa rrrogioa * / for (j=O;j<MNCANAL;J++) € for ( k=O;k<HLTIME;k++i yt k3 C i 1 t jl=f t kl t 13 t jl=xC kí t i I t jIp0; 3 for (i=O;i<MAXIMO;i++i C ERRORCiI=O; for (j=O;j<MAXIMO;j++) 3 vfLiltjI=vbtilt jl=O; clrscr0; gotoxy(25,5); printf("A U G U R Y\n\n"); printf(" Escriba NRX, NCX y LX respectivaaaente.\n"); scanf ( "Yd%d%d" ,&nrx,&ncx,&lx) ; printf(" Escriba los coeficientes de X Clxl Crengl Ccoll .\n"); for ( i = l ; i<=lx;i++) C printf(" LX = %d\n",i); for (j=l;j<=nrx;j++) f o r (k=l;k<=ncx;k++) C printf(" CYdlCYdl = ",j,k); cscanf ( "%f ,&aux) ; xC i 1 C jl C kl=aux; pr i nt f ( \ n" 1 ; 'I *I 1 ? printf("\n Escriba NRY, NCY y LY respectivamente.\n"); scanf ("%dXd%d" ,&nry,&ncy,&ly) ; printf(" Escriba los coeficientes de Y Clyl Crengl Ccoll .\n"); for (i=l;i<=ly;i++) printf(" LY = %d\n",i); for (j=l;j<=nry;j++) for (k=l;k<=ncy;k++) I printft" CYdlCXdl = ",j,k); cscanf ( "%f" ,&y[ i 3 C jICk3); printf ( " \ n "1 : 3 ? printf("\n Escriba el número de canales p : scanf ( "%d" ,&n 1 : printf("\n Escriba el prámetro de ruido blanco 'spike': " i ; cscanf ( I' Yf ,&sp i ke 1 ; p r i ntf ( \ n " i ; . printf("\n Escriba el límite inferior del error cuadrado medio CO..ll: cscanf("Yf",&floor); printf("\n"); printf("\n Escriba la longitud de la estimaci6n del operador de printf ("predicción LR: " i ; scanf ( "%dll,&lr) ; / * fin de tomadatos * / ' I ) ; I' I' ' I ) ; esultado( 1 int i , j , k ; clrscr( 1; printfí" Los coeficientes d e R.\n"); for (i=l;i<=lr;i++) C for (j=l;j<MNCANAL;j++) { for (k=l;k<MNCANAL;k++) printf(" %5.2f ; pr i nt f ( " \ n 'I i ",rCiltjlCkl); 3 1 printf("\n Longitud estimada en el"); printf(" error del operador de grodicci¿n: %5.2f",lf); printf("\n Los coeficientes d e P.\n"); for (i=l;i<=lf;i++) C for (j=l;j<MNCANAL;j++) i f I: i 1 C j l C kl 1 : for ( k-1: k<MNCANAL;k++ i pri ntf ( %5.2f printf ( " \ n" i ; I' 'I, 3 1 printf("\n Los coeficientes do ERROR.\n"); for (i=l;i<=lf;i++) printf(" %5.2f ",ERRORCiI); printf("\n Longitud estimada en el"); printf(" error de las series de tiempo: %5.2f",ly); getchar( );getchar( 1; ^^ 1 1 - - 1 u < Y " " , - ~ ~ 187 "1; /* fin de resultado * / I /* fin de resultado */ Irainy(nra,nca,la,nrb,ncb,lb,aa,bb,cc) int nra,nca,la,nrb,ncb,lb; / * Realiza el producto de dos matrices MATRIZ3D aa,bb; MATRIZD3 cc; int i,j,k,l,m,n,lc; lc=la+lb-1; for (i=l;i<=lc;i++) for (j=l; j<=nra;j + + ) for (k=l;k<=ncb;k++i /* Subrutina Zero */ ccC i l C jlCkl=O; for (i=l;i<=la;i++) for (j=l;j<=lb;j++) C k=i+ 5 - 1 ; for (m=l;m<=nra;m++) for í n=l :n<=ncb;n++ 1 for (l=l;l<=nca;l++) ccCk1 Cml Cnl=ccC kl Cml Cnl+aaC i l Cml C ll*bbC jl C 1 3 Cnl ; 3 3 i=nrb; / * fin de brainy */ /* form(m,n,l,aa,bb,cc) int m,n,l; MATRIZ3D aa,bb,cc; recibe matrices hasta de Bdimenciones */ I int i,j,ii,k; for(i=l;i<=rn;i++); for(j=l;j<=n;j++); for(ifml;ii<=n;ii++); for ( k=l ;k<=1; k++ 1 : aaC kl C i 1 C jí=aaC kl t i I C j1-bbt 11 t i 3 C iil+ccfklE 111 t jl ; I /*fin de form * / /* naine (n,aa,bb) int n; XATRIZZD aa,bb; calcula la inversa do una matriz i float ok; int i t j ,k , m ; for (i=l;i<=n;i++) for (j=l:j<=n;j++) bbCilCjl=O; if ( s a [ 13 C 11 ! =O 1 bbC 11 C 1 l=l/aaC 11 C 11 : for (m=2;m<=n;m++) E k=m- 1 ; ek=aaCmICml: for (i=l;i<=k;i++) for ( j=l; j<=k;j++) ek=ek-aaCm1 C i l*bbt i 1 C jl *aat j l tml ; if (sk-0 1 bbCml Cml=0 ; else bbtrnl Cml=l/ek; 188 */ */ for ( i = l ; i<=k;i++) C for (j=l;j<=k;j++) if í ek! =O 1 bbl i I C mI=bbl i 1 Cml-bbC i 1 C jl *aaC j1 Cml /ek; bbCm1 C i 1 =bbC i 3 C ml ; 1 1 for (i=l;i<=k;i++) for ( j=l; j<=k;j++) bbC i 1 E jI=bbC i 3 C jl+bbC i 1 Cml*bbCml C jl*ek; /* fin de maine */ eat(nrx,ncx,lx,nry,ncy,ly,lg,x,y,g) int nrx,ncx,lx,nry,ncy,ly,lg; MATRIZ3D x,y; MATRIZD3 g ; int m,n, 1 , i , j,k,menor,lmin; i=ncy; if (lg<lx) menorrlg; else menor=lx; for ( rn= 1 ;m<=nr x;m++ 1 for ( n=l ;n<=nry ;n++ 1 f o r ( 1=1; l<=ncx;l++) for( j=l; j<=menor;j++) C if(ly<(lx-j+l)) lmin-ly; else lmin=lx-j+l; for(i=l;i<=lmin;i++) { / * inicio de ly = 2 * / k=i+ j-1; gC jl Cml C nl=gC jl Cml C n3+xt kl Cml C 1 ]*y[ i I I n3C 1 3 ; /* f 1 fin de heat 1 */ mten(ncanal,longitud,rr,af,ab,vf,vb,.p) int ncanal,longitud; HATRIZ3D rr,af,ab,sp; MATRIZZD vf, vb; [ MATRIZDS df,db,cf,cb; int i , j,k; i if(longitud-1) for(i=t;i<=ncanal;i++) for(j=l;j<=ncanal;j++) v f t 1 3 C jl=vbC 11 t jl=rrC 1 3 C i l t 33; ’* for(i=l:i<=longitud;i++) for(j=l;j<=ncanal;j++) for ( k = l ; k<=ncanal ;k++) /* move(r,vf) y raove(r,vb) zero(af) */ */ a f t 1 3 L jI t kl=O; for(i=l;i<=ncanal;i++) afCilCilCil=l; for(i=l;i<=longitud;i++) fot(j=l;j<=ncanal;j++) for (k=l;k<=ncanal ;k++) 1 / * fin de if * / move ( af ,a b 1 ab[ 1 3 t j 1 C kI=af C 11 C j í C kl ; -.--. . -, -_.1_3i_. icio ly = 2 ., . I .-, ..)--.. ...-.. ." else E %/ for(i=l;i<=ncanal;i++) for(j=í;j<=ncanal;j++) dfCilCjl=dbCjlCil; maine ( ncanal ,vb,spC 11 C O I C O I 1 : brainy(ncanal,ncanal,l,ncanal,ncanal,l,df,~p,cf~; ma i ne í ncana 1 ,vf ,s p C 1 1 C O 1 C O 1 1 ; for(i=l;i<longitud;i++) for(j=l;j<=ncanal;j++) for( k=2;k<=ncanal;k++) spC i 1 C jl C kl=abC i 1 C jl C kl ; for(i=l;i<=ncanal;i++) for(j=l;j<=ncanal;j++) spCllCilCjl=O; /* zero(sp1 for(i=l;i<=longitud;i++) for(j=l;j<=ncanal;j++l for( k=l;k<=ncanal ;k++) /* move(sp,ab) abC i 1 t jl C kl=spC i 1 C jl C kl ; for(i=l;i<=ncanal;i++) / * zero(af) for(J=l;j<=ncanal;j++) afClongitudlCilCj3=0; form(ncanal,ncanal,longitud,ab,cb,af); form(ncanal,ncanal,longitud,af,cf,sp); form(ncanal,ncanal,l,vf,cf,db); form( ncanal ,ncanal ,1 ,vb,cb,df 1; i 1 --- /* e _ _ _ _ _ . - /* fin de else fin de omen */ */ ---- - */ 130 */ */ augury( ) I i n t i,l,rt,q; heat~n,l,lx,n,l,lx,l,lr,x,x,r~; rt=O; for(i=l;i<=n;i++) C / * j=(i-l)*n+i; + i es sobre la diagonal,+l es la columna 1 rC l l C i l C i l = r C llCilCil*( l + s p i k e ) ; rt=rt+rC 1 1 C i 1 C i 1 ; */ 1 /*nnlr=n*n*lr;*/ for( l=l; l<=ir;1 + + ) C omen(n,l,r,f,y,vf,vb,yClr+llCOl~: / * y ( n n r l + l ) * / q=O ; for(i=l;i<=n;i++)i / * j=(i-i)*n+l; + i es sobre la diagonal ó + esl la columna 1 q=q+vfC i l C i l : 1 rt! =O 1 ERRORC 1 l=q/rt ; else ERRORCll=O; lf=l; if(ERRORClI<=floor) l=lr+l; if 1 ( ly= 1 x+l f- 1 ; brainy(n,n,lr,n,l,lx,f,x,y); 1 /* fin de augury */ main( 1 c 1 tocaa-datos( 1; augury( 1; resultado( 1; /* AUGURY f/ */ _. /* . .... ~. . OMEN Rutina auxiliar para el programa "Augury" de predicción de multicanal Wiener. N LX LR SPIKE FLOOR R LF F LY Y ERROR Niimero de canales = p. Longitud de series de tiempo. Longitud mdxima posible del operador de predicción. Parámetro de ruido blanco. del límite inferior del error cuadrado medio. Núm. entre CO..lI, Autocorreiación. Longitud de estimación de error del operador de predicción. Operador de estimación de error por intervalo de predicción. Longitud de estimación de error de las series de tiempo. Estimación de error de las series de tiempo. Normalización del error cuadrado medio. */ #include #include #include #include <stdlib.h> <stdio.h> <mem.h> <conio.h> +define MNCANAL 3 #define MLTIME 38 #define MAXIM0 10 typedef typedef typedef typedef float f1 oat float float /* /* nomero d e canales * / longitud de la serie de tiempo */ MATRIZ2D CMNCANALI ElWCANALí ; / * matriz de 2 dimenciones * / MATRIZ3D C MLTIMEI C MNCANALI E I(NCANAL3 ; /*matriz de 3dimenci ones*/ MATRIZDS C M L T I W E 3 t ~ X I ~ l E M X I N O l ; MATRIZD2 CHAXIPíOlCiíAXIWOI; MATRIZBD r,af,ab,sp; MATRIZ2D vf,vb; MATRIZD2 df,db,cf,cb; int ncanai,longitud; int laf,lr,laf,lab; toma-datosí ) E int i , 3,k; float aux; int nraf,ncaf,nrab,ncab; for (i=O;I<MNCANAL;i++) / * inicializa arreglos * / for (j=O;j<MNCANAL;j++) C vfCilC jI=vbCilC ji=O; for (k=O;k<MLTIME;k++) ab[ kl t 1 3 C jl=afC k3C i 1 C jl=aft kl C í 3 C jí=O; 1 for (i=O;i<MNCANAL;i++) for (j=O;j<MNCANAL;j++) vfCilI jl=vbtiIt jI=O; clrscro; gotoxy(25,S); printf("0 M E N\n\n"); printf(" Escriba NRAF, NCAF y LAF reopectivaraente.\n"); scanf("Xd%dYd",&nraf,&ncaf); printf(" Escriba l o s coeficientos de AF Clafi Crengl Icoll .\n"); for (i=l;i<=laf;i++i c printf(" LAP = Wd\n",i);' for (j=l;j<=nraf;j++) for (k=l;k<=ncaf;k++) { printf(" CXdlCYdl = ",j,ki; ,&aux) ; cscanf ( aft i 3 C j l C kI=aux; pr i nt f ( \ n" 1 ; ' I W f " 'I 1 1 printf("\n Escriba NRAB, NCAB y LAB respectivamente.\n"); scanf ( "XdXdXd",&nrab, fncab,&lab) ; printf(" Escriba los coeficientes de AB Clabl Crengl Ccoll .\nil); for (i=l;i<=lab;i++) c printf(" LAB = %d\n",i); for (j=l;j<=nrab;j++) for (k=l;k<=ncab;k++) I printf(" CWdlC%d3 = ",j,ki; cscanf ( "Xf",&abC i l C jICk3 1 ; pr i n t f ( \ n" 1 ; 'I 3 1 printf("\n Escriba el nQmero d e canales p : "1; scanf ( *%d" ,&ncanal i ; printf("\n Escriba la longitud de la estimaci6n del operador de printf("predicción LR: "1; scanf í "%d" ,&lr) ; 1 / * fin d e toma-datos * / resultado( c i int i , j,k; clrscr( 1; printf(" Los coeficientes de R.\n"); for (i=l;i<=lr;i++i C f o r ( j=l; j<MNCANAL;j++i { for (k=l;k<MNCANAL;k++i printf(" %5.2f printf "in") ; 1 "1; ",r[il[jiCkli; 1 printf("\n Los coeficientes d e AF.\n"); for (i=l;i<=laf;i++) E for (j=l;j<MNCANAL;j++) C for (k=l;k<MNCANAL;k++i ptintf(* % S . 2 f ",aftiItjltkl); p r i ntf ( \ ni'i ; 'I 3 1 getcharO;getchar( 1; 1 /* fin de resultado * / brainyinra,nca,la,nrb,ncb,lb,aa,bb,cc) int nra,nca,la,nrb,ncb,lb; MATRIZ3D aa,bb; MATRIZD3 c c ; /* Realiza el producto de dos matrices */ c int i, j,k, 1 ,m,n,IC; 1 c= 1 a+ 1b- 1 ; for (i=l;i<=lc;i++) for (j=l;j<=nra;j++) for (k=l;k<=ncb;k++) /* Subrutina Zero */ cc C i 1 C j3 C k3=0; for (i=l;i<=la;i++) for (j=l;j<=lb;j++) { k=i+ j-1; for (m=l;m<=nra:rn++) for (n=l;n<=ncb;n++) for (l=l;l<=nca;l++) ccE kl Cml Cnl=ccC klCmlCnl+aaC i l CmIC 1 l*bbC jl C 1 1 C nl ; 1 i=nrb; / * fin de brainy 3 */ ~ /* form(m,n,l,aa,bb,cc) int m, n, 1 ; MATRIZ3D aa,bb,cc; recibe matrices hasta de Bdimenciones */ 1 int i,j,ii,k; for(i=l;i<=m;i++); for(j=l;j<=n;j++); for(ii=l;ii<=n;ii++); for(k=l;k<=l;k++); aaC kl C i I C jI=aaC kl C i I C jl-bbt 11 C i 3 t i i I *ccCkl C i i 1 C j l ; 3 /*fin d e form * / /* m i n e (n,aa,bb) int n; MATRIZ2D aa,bb; calcula la i n m r s a de una matriz E float ek; int i,j,k,m; for (i=i;i<=n;i++) for (j=í;j<=n;j++) bb[i][j]=O; (aaC 13 C 13 ! =O 1 bbC 11 C 13 =l/aaC 1 3 C 13 ; if for (m=2;m<=n;m++) E k=m- 1 ; ek=aaCmltml; for (i=l;i<=k;i++) for íj=l;j<=k;j++) if ek=ek-aatmlCi3*bbti3Cjl*aat~lC~l; (ek==O i bbCml C mI=O; el s e bbt ml C m l = l/ek; for (i=l;i<=k;i++) C for (j=l;j<=k;j++) if (ek!=O 1 bbC i 3 Cml=bbC i 3 Cm3 -bbC i 3 t 3 l*aat j 1 C ml lek; bbtml C i l=bbC i 3 Cml ; 1 for ( i = 1 ; i<=k;i++i for 1 1 e--.- --" ( j=1; j<=k;j + + ) bbC i 1 C jI=bbC i 3 C jl+bbC i 3 Cml*bbCml C j l *ek; -- ~ - - ~ - ~ ~ I 194 */ 1 /* fin de maine */1 /* fin de maine */ heat(nrx,ncx,lx,nry,ncy,ly,lg,x,y,g) int nrx,ncx,lx,nry,ncy,ly,lg; MATRIZ3D x,y; MATRIZD3 g ; { int m,n,l,i,j,k,menor,lmin; i=ncy; if ( lg<lx) menor=lg; else menor=lx; for(m=í;rn<=nrx;m++) for(n=l;n<=nry;n++) for( 1=1; l<=ncx;1++) for(j=l;j<=menor;j++) E if(ly<(lx-j+l)) lmin=ly; else lmin=lx-j+l; for(i=l;i<=lmin;i++) C / * inicio de ly = 2 * / k=i+j-1; gC jl Ern1 C nl=gC jl Cml E nl+xC kl Crnl C ll*yC i l Cnl C 1 1 ; 1 /* 3 fin de heat 1 */ int i , j,k; if(longitud==l) C for(i=l;i<=ncanal;i++) for(j=l;j<=ncanal;j++) vftilt jl=vbtiIC jl=rClICilC jl; /* /* move(r,vf) y aaove(r,vb) foríi=l;i<=longitud;i++) for(j=l;j<=ncanal;j++) for( k=l;k<=ncanal;k++) aft 13 E jl C kl-0; zero(af1 */ */ for(i=l;i<=ncanal;i++) afCil~i3Ci3=l; /* for(i=l;i<=longitud;i++) for(j=l;j<=ncanal;j++) for( k=l;k<=ncanal ;k++) 1 / * fin de i f */ else C for(i=l;i<=ncanal;i++) for(j=l;j<=ncanal;j++) */ inicio ly = 2 */ ab[ 13 t jl C kl-af t 11 t jl t kl ; /* dftiICjl=dbCjlCi3; mai ne i ncanal ,vf, spt 11 CO 3 C O I 1; for(i=l;i<longitud;i++) for(j=l;j<=ncanal;j++) rnove(af,ab) I95 for ( k=2;k<=ncanal ;k++) spC i 1 C jl C kl=ab[ i 3 C j] C k] ; for ( k=2;k<=ncanal ;k++) spC i 1 C jI C kl=abC i ][ j 1 k] ; for(i=l;i<=ncanal;i++) for(j=l;j<=ncanal;j++) spCllCilCjl=O; /* zero(sp) for(i=l;i<=longitud;i++) /* move(sp,ab) for(j=l;j<=ncanal;j++) for (k=l;k<=ncanal ;k++) abC i l I jl C kl=spC 1 1 C j 1 C kl ; for(i=l;i<=ncanal;i++) I * zeroíaf) for(j=l;j<=ncanal;j++) afClongitudlCilCjl=O; form(ncanal,ncanal,longitud,ab,cb,af); form(ncanal,ncanal,longitud,af,cf,sp); formíncanal ,ncanal,1,vf ,cf ,db); form(ncanal,ncanal,l,vb,cb,df); ? 1 /* /* fin de else fin de omen */ */ main( 1 toma-datos( omen( 1 ; 1; resultado( 1 ; ? */ /* OMEN */ */ */ /* SISMOGRAMA = = LC */ C Programa de un Sism6grafo Marino para Coeficientes de Reflexión. Número de coeficientes de reflexion. Coeficientes de Reflexión. #include <stdlib.h> #include <stdio.h> #include <conio.h> #define MAX3 50 main( 1 E float c ~ M A X 3 1 , p h i ~ M A X 3 1 , a C M A X 3 1 , a p C M A X 3 1 , u C M A X 3 1 , v C M A X 3 1 ; float a r ~ M A X 3 l , u p C M A X 3 l , d o w n C M A X 3 l , s ; int i,j,k,o,g,t,l,lc=O; for (i=O;i<MAXS;i++) C cCil=phi~il=aCil=apCil=util=O; vCil=arCil=up~i3=downCil=O; 1 I 1 /* l=lc; clrscr( 1; Valor no especificado gotoxy(20,5); */ printf("SISMOGRAF0 MARINO\n\n"): printf(" Escriba el NQmero d e Coeficientes do Reflexibn\n"); scanf ( " % d " ,&lc 1 : printf(" Escriba los Coefientes de Reflexi6n \n"); for (i=l;i<=lc;i++) C printf(" CWdl = ",ii; cscanf("%f",&cCil); printf ("\n"i; 1 printf("\n\n Oprima 'ENTER' para continuar.");getcharO;getcharO; phiC 13=cC 1 1 ; a l ll=-cC 11 ; vc ll=l-cc ll*ct 1 1 ; printf("\n Operador de Prodicaibn de Error W7.5f\nn,aC13); for (i=S;i<=lc;i++) C phi~il=cCiI*vCi-11; for (j=l;j<=(i-li;j++) C phi~il=phiCil-aCjl*phiti-jl; apC jI =a[ j 1 -c t i I *at i j3 ; - 3 for (j=l;j<=(i-li;j++) aCil~aptj3: aC i 1 =-cC i 1 ; printf("\n Operador d e Predicción de Error \n"); for (k=l;k<=i;k++) printf(" W7.5f ",atkl); pr i nt f ( " \ n 1i vCil=vti-ll*~l-ccil*cti 1; 3 e printf("\n Sismograma Sintt co\n"); for (k=l;k<=lc;k++) printf í W7 .Sf " ,phi C kl 1; printf("\n\n Curva d e Varianza\n"); for (k=l:k<=lc;k++) printf(" %7.5f ",vCkl); pr i nt f ( \ n 1 ; 'I ,.) I' I' - "" I' = l.*. " - - ~ . L . - - _ _ _ ~ - ~ .- * sm 197 - for (i=l;i<=lc;i++) C if (i>=2)E cC il=uC i-ll/vC i-13; V E i l=vC i-11* ( 1-CC i 1*cC i I ) ; for (j=l;j<=(i-l);j++i apCjl=aljl-cCil*aCi-jl; for (j=l;j<=(i-l);j++) aCjl=apCjl; ? else E cCil=phiCil; vC i I=l-c C i 1 *cC i 3 ; 3 /* a t i 1 =-cl i 1 ; 33 */ printf("\n Operador de Predicci6n de Error \no'); aC kl 1 ; for ( k= 1 ;k<=i ;k++ 1 pr i n t f ( W7.5f printf("\n"); uCil=phiCi+ll; for (j=l;j<=i;j++) uCil=uCil+aCjl*phiCi+l-jl; apCil=arEi+ll=l; for (k=l;k<=i;k++) apCk+ll = arC1-k+il = aCk1; I' 'I for (t=l;t<=l;t++) downCtl=upEtl=0; /* subrutinao fold */ /* subrutinao fold */ for (g=l;g<=(i+li;g++) for (t=l;t<=lc;t++) E o=g+t- 1 ; down[ ol=downC ol+arí gl *phi C tl ; 3 for (g=l;g<=(i+l);g++) for (t=l;t<=lc;t++) E o=g+t-1; upCol=up~ol+apCgl*phiCtl; ? for (g=l;g<=i;g++) downCgl=upCg3=0; downCil=vtil; s=(l-cCiJ)*s; printf("\n Ondas Bajando for (k=l;k<=lc;k++) E down[ kl -down[ kl / s ; up[ kl=upCkl/s; printf(" W7.5f I/* 1 fin de for eti40 Ondas Subiendo \nu); % 7 .Sf \ n" down[ kl ,up[ & I 1 : */ getchar(); printf("\n Curva de Varianza\n"); for (k=l;k<=lc;k++) printf ( u S17.Sf " 8v[kI 1 ; printf("\n\n Coefientes de Refiexion \n"); 8cC kl 1 ; for ( k=i;k<=lc;k++) printf ( " %7.5f getcharO;clrscr( i ; I' 1 /* fin de main */ ~ /* BRAINY NRA NAC LA A NRB NCB LB B */ Multiplicación de matrices polinomiales para multicanal. = Número de filas de A = p = Número de columnas de A = q = Longitud de l a señal multicanal = (aO.al,. . . ,am) A = m+l = Número de filas de B = q = Ndmero de columnas de B = r = Longitud de la señal multicanal B = n+l = (bO,bl,...,bn) #include #include #include # i nc 1 ude <stdlib.h> <stdio.h> <mem.h> <coni o.h> #define MLTIME 5 #define MNCANAL 5 typedef float MATRIZBD CMLTIMEICMNCANALICMNCANALI; /*aLatriz de 3dimenciones*/ Ii MATRIZBD a,b,c; int nra,nca,la,nrb,ncb,lb,lc; brainy(aa,bb,cc) MATRIZ3D aa,bb,cc: E int i,j,k,l,m,n; 1c= 1a+ 1 b- 1 ; for (i=l;i<=la;i++) for (j=l;j<=lb;j++) C k=i+ j-í; for ( m= 1 ;m<= nr a ;m++ 1 for (n=l;n<=ncb;n++) for (l=l;l<=nca;l++) ccCk1 C m l tnl=ccC kl C m l Cnl+aat ilCml E ll*bbC jl C 1 1 C nl ; 1 1 /* fin de brainy */ tomadatos( 1 c int i,j,k; f loat aux; for (i=O;i<MLTIHE;i++) / * Inicializa Arrogios * / for ( j = O ; j<MNCANAL;j++) for (k-O;k<MNCANAL;k++) ai 11 C jl Ckl=bC i l C 3 1 1 kl=cC i l C jl C k3=0; prIntf("B R A I N Y\n\n"); clrscr0; gotoxyí20,5); printf í Escriba NRA, NCA y LA respectivamente. \ n "1 ; scanf ( "WdXdXd" ,&nra,&nca,&la) ; / * Toma do datos printf("\n Escriba los coeficientes do A tlcl Crengl Cco13.\nn); for (i=l;i<=la;i++) C printf(" LA = Wd\n",i); for (j=l;j<=nra;j++) for (k=l;k<=nca;k++) C printf(" C%dlC%dl = j,k); 199 cscanf ( "%f ,&aux) ; 'I */ 'I, .. I' I __ aCilC jlCkl=aux; pr i nt f ( \ ni'1 ; 'I 1 1 printf("\n Escriba NRB, NCB y LB respectivamente.\n"); scanf ( "XdXdXd" ,&nrb,&ncb,&lb) ; / * Toma de datos printf(" Escriba los coeficientes de B Clcl Crengl Ccoll.\n"); for (i=l;i<=lb;i++) C printf(" LB = %d\n",i); for (j=l;j<=nrb;j++) for (k=l;k<=ncb;k++) C printf ( C%dlCWdl = ",j,k); cscanf ( "%f ,&bC i 1 C j3 C kl 1 ; p r i nt f ( \ n 1 ; 'I 'I 'I 'I 1 ? 1 /* fin de t o m a d a t o s */ resultado0 int i,j,k; printf(" Los coeficientes de C.\n"); for (i=l;i<=lc;i + + i E printf("\n LC = Xd ",i); for (j=l;j<=nra;j++) for (k=l;k<=ncb;k++) printf(" X4.2f ",cCilC jICk1); 1 1 getcharO;getchar( );clrocr( 1; main( 1 c 1 toma-tiatos( 1; brainy (a,b,c 1; resultado( 1; */ /* = número de canles = " p " . = longitud de X = m. = (xO,xl, ,xm) = longitud de Y = n + 1 = (yO,yl, ,yn) = longitud deseada de la correlacion cruz = k = (gO,gl, ,gk) N LX X LY ... ... Y LG */ Calcula la correlación cruz multicanal de impulsos p-canal, en series de tiempo. MACRO ... G + 1 #include <stdlib.h> #include <stdio.h> Xi nc lude <coni o.h> #define MAX 1 0 1 #define MAX2 4 /* /* máximo de muestras por canal p maxim0 número de canales p * / */ f ioat xtMAX*MAX23 ,yCMAX*MAXZl ,gCMAX*MAX23 ; int lx,ly,lg,numcanal; toma-datos( 1 I C int i, j; for (i=O;i<MAX*MAX2;i++) 1'X 1y= 1g=O ; /* xCil=yCil=gCil=O; Inicializa Arreglos * clrscro; gotoxy(20,5); printf("l4 A C R O\n\n"); printf(" Escriba el nfimero de canales : / * Toma de dato6 1: scanf("%d",bnumcanal); printf("\n Escriba LX y LY respectivamente. \n"); 8canf("%d%d",&lx,&ly); j=numcana 1 * 1 x ; printf("\nEscriba 1 0 6 coeficientes del vector X en forma multiplexada.\n for (i=l;i<=j;i++) C printf(" XC%d3 = ",i); cscanf ("Xf" ,six[ i l l ; printf("\n"); ' I ) ; 1 j=numcanal*ly; printf("\nE8criba los coeficiente6 del vector Y o n forma multiplexada.\n for (i=l;i<=j;i++) C printf(" YtXdl = ",ii; cscanf ( "%f" ,&y[ i 3 ) ; printf ~ " \ n i; " 1 3 printf("\n Escriba longitud d e Correlaci6n Cruz / * fin d e t o m a d a t o s * / crea-tabla( C ; "1; scanf("%f",&lg); 1 int i, j ; float promxCMAX21 ,promyCMAX23 ; inicializa promedios */ calcula promedio de muestras */ fori i=O;i<MAX2;i++) promxCil=promytil=O; L for(i=l;i<=numcanai;i++) for( j=i;j<=lx;j=j+numcanal) C promxCil=promxEil+xCjI; promyCi3=promyti3+yCjl; /* /* 201 -_ 1 for(i=l;i<=numcanal;i++l C promxC il=prornxl ilílx; promyCil=promyCil/ly; 1 for(i=l;i<=numcanal;i++) for(j=i;j<=ly;j=j+numcanali xC jl=xC jl-promxCi1; y[ jl=yC jl-promyCi1; 1 1 /* fin de crea-tabla C */ macro() c int i,j,ii,ij,ji,s,t,menor; for (i=l;i<=numcanal;i++) C ii=l+( i-l)*lx; for (j=l;j<=numunal;j++) ji=l+ ( j-1) * ly ; C ij=l+lg*(i-l)+lg*numcanal*(j-1); /* CROSS (LX,X(ii),LY,Y( jii,LG,G(ij) */ for (t=O;t<lg;t++) C if (ly < (ix-t)) -nor = ly; / * subrutina Dot */ else menor = lx-t; gCij+tl=O; for(s=O;s<menor;s++i g t i j + t I = g C i j + t l + x C i i + t + s l . y [ J i + . l ; 1 /* 1 fin de subrutina cross 1 1 / * fin de macro */ */ resultado0 c int i ; char imprime; getchar( 1 ;clrscr( i ; gotoxy(3,lO); printf(" Desea IMPRIMIR las muestras y los resultados (s/n1 ? t "i; iraprime=gotchar( i ; i f (imprime=='s'i € printf("\n\n Prepare la impresora i ; getchar0;getcharO; 1 c l r s c r 0 ; gotoxy(20,l); printf(*TABLA DE MUESTRAS X\n\n"); if (imprime=='s') C Programa l4 A C R O\n\n\r"); fpr i ntf ( stdprn, \ n\r DE MUESTRAS X \ n\n\rD1; TABLA fprintf(stdprn,"\n\r ...* I' 3 for(i=l;i<=nuatcanai*lx;i++) C printf("XC%dl= %5.2f ",i,xCiI); i f ( i mpr ime== ' s ' 1 fp r i nt f ( stdprn ," XC Xdl= X5.2f " ,i ,XI i 3 1; if ((iX4)==0) C printf("\n"i; if (impria\e=='s') fprintf(stdprn,"\n\r"); 1 1 getchar( 1; if(irnprime!='s') getchar( 1; c l r s c r o ; gotoxy(20,l); printf("TABLA DE MUESTRAS Y\n\n"i; if (imprime=='s'i C fp r i n t f ( stdpr n , \ n \ r Programa M A C R O \ n \ n \ r " ) ; fprintf (stdprn," \ n \ r TABLA DE MUESTRAS Y \n\n\r"1 ; 'I 1 ----l-lli*L---u-L1l I for(i=l;i<=nurncanal*ly;i++i E p r i n tf ( '' Y C Xd 1 = K5.2f ,i ,y C i 1 1; if(imprime=='s' 1 fprintf(stdprn,"YtKdI= X5.2f ",i,yCiI); if ((iX4)==0) E printf("\n"); if (imprime=='s') fprintf(stdprn,"\n\r")I 'I 1 1 getchar(); c l r s c r 0 ; gotoxy(l5,l); printf ("COEFICIENTES DE CORRELACION G\n\n"i; if (imprime=='s') { fp r i n t f ( stdpr n , \ n \ r Programa M A C R O\n\n\r"); COEFICIENTES DE CORRELACION G\n\n\r"); fprintf(stdprn,"\n\r 'I 1 for(i=l;i<=lx-lg;i++) C printf("GCXdl= %9.2f ",i,gLil); i f ( i mpr ime== ' s 1 fpr i n t f ( stdprn , "GCXdl= X6.4f , i ,g C i 3 1 ; if ((i%4)==0)E printf("\n"); if (imprime=='s') fprintf(stdprn,"\n\r"); I 1 1 1 getchar(); c l r s c r 0 ; fin d e resultado * / /* main( i c tomabatos( 1; creamtabla( 1 ; macro( i ; 1 resultadoí 1; 'I /* MACROEJ LY Y LG = número d e canles = " p " . = longitud de X = rn. = (xO,xl, ,xm) = longitud de Y = n + 1 = (yO,yl, ,yn) = longitud deseada de la correlacion cruz = k G = (gO,gl, N LX x */ Calcula la correlaci6n cruz multicanal de impulsos p-canal, en series d e tiempo, con datos para un EJEMPLO; genera un archivo (muestras.dat) con los datos de las muestras p r o c e ~ a d a s , y otro archi vo (coeficie.dat) con los coefientes d e correlacibn. #include #include #include #include ... ... ... + 1 ,gk) <stdlib.h> <stdio.h> <conio.h> <dos.h> #define M A X 101 #define M A X 2 4 #define M A X 3 2 /* /* máximo de muestras p o r canal p máximo nomero d e canales p * / */ typedef float MATRIZ3D C M A X l C M A X 2 l C M A X 3 1 ; tomadatos( 1 E int i , j, k; for ( i =O ;i <MAX*'MAX2 ;i ++ ~Cil=yCiI=gCil=O; 1 x=ly=lg=0 ; for (i=O;i<MAX;i++) for(j=O;j<MAX2;j++) for ( k=O ;k(MAX3 ;k++ 1 zC i 3 C j 3 C k 1 =O ; clrscr0; gotoxy(20,5); printf("M A C R O printfí" Escriba el n h w r o d e canales : scanf ( " X d " ,&numcanal ; ".. - -__' I ) ; " - /* Inicializa Arreglos Ejemplo\n\n"); / * Toma de datos t a n fi */ */ -. scanf ( "%d" ,&numcanal 1 ; printf("\n Escriba LX y LY respectivamente. \ n " ) ; scanf ( "SkdXd",&lx,&ly) ; printf("\n Escriba longitud de Correlación Cruz : scanf ( "%d" ,&lg) ; printf("\n Espere un momento por favor.. / * fin de tomadatos * / I * ) ; .I1); 1 crea-tabla( 1 int i ; float promxEMAX21; / * inicializa promedios * / / * calcula promedio de muestras * / for i=O;i<MAXS;i++) promxCiI=O; for i=O;i<lx;i++) C promxCll=promxCll+xlCil; promxC23=promxC23+x2C i l ; promxC 3 1 =promxC 3 1 +x3C i 1 ; 3 for i= 1 ;i <=numcana 1 ;i++ 1 I 1 ,I I promxC i 3 =promxC i 1/ 1 x ; for(i=O;i<lx;i++) f xC i+ll=xlC i3-promxC 11; y[ i+lI=xt i+ll; zC i+ll C 11 ClI=xC i+ll ; /* /* /* /* *I construye tabla, restando a clmuestra el * promedio correspondiente a cada canal p en el Ejemplo xCi1 e a igual a ytil y * A zClxlCnumcanallCll el la muestra en arch.+& xClx+i+ll=yClx+i+ll=zCi+llC2lCll=x2Cil-promxC2l; xC 2*1 x+ i + 11 =y C 2* 1 x+ i + 1I =zC i +I 3 C 33 C 11=x3C i 1 -promxC 3I ; /* 1 ? fin d e crea-tabla */ for (i=l;i<=numcanal;i++) E i i=l+( i-1) * 1 x ; for (j=l;j<=numcanal;j++) E j i = l+ ( j-1) * 1 y ; ij=l+lg*(i-l)+lg*numcanal*(j-l); /* CROSS (LX,X(ii),LY,Y(ji),LG,G(ij) */ for (t=O;t<lg;t++) C if (ly < (lx-t)) menor = ly; else menor = lx-t; / * subrutina Dot * / gCij+tl=O; for(s=O;s<menor;s++) g~ij+t3=gClj+tl+xCii+t+s3*yCji+sl; /* 1 1 1 /* 1 fin de subrutina cross fin de macro */ */ resultado( 1 E int i; char imprime; getcharí );clrscr( 1; gotoxy(3,lO); printf(" Desea IMPRIMIR las muestras y los resultados (s/n1 ? : imprime=getcharO; t~n II: c .ax It*. "1; *."L I - if (imprime=='s') { printf("\n\n Prepare la impresora . . . I ' 1; getchar( 1;getcharO; 1 c l r s c r 0 ; gotoxy(20,l); printf("TABLA DE MUESTRA5 X = Y\n\n"); if (imprime=='s') { fp r i nt f ( stdp r n , " \ n \ r Programa M A C R O - Ejemplo\n\n\r"); fprintf (stdprn," \ n \r TABLA DE MUESTRAS X = Y\n\n\r"); 1 for( i = l ; i<=numcanal*lx;i++) E i ,xC i 1 1 ; pr i ntf ( "XC%di= %5.2f i ,xC i 1 i ; if ( imprime=='s' 1 fprintf (stdprn,"XC%dl= X5.2f if ((i%4)==0)E printf("\n"); if (imprime=='s') fprintf(stdprn,"\n\r"); 'I, *I, 3 1 getchar(); if (imprime!='s')getcharO; c l r s c r 0 ; gotoxy(l5,l); printf("COEFICIENTE5 DE CORRELACION G\n\n"); if (imprime=='s') E fp r i n t f ( stdp r n , \ n \ r Programa M A C R O - Ejemplo\n\n\r"); COEFICIENTES DE CORRELACION G \ n \ n \ r " ) ; 1 fprintf (stdprn, n\r for(i=l;i<=lx-lg;i++) i pr i n tf ( "GI. %d 1 = A9 .2f ,i ,g C i 3 1; i f ( i mp r i me== ' s 1 fp r i n tf ( stdp rn , G C %d 1 = %9 .2f " ,i ,g C i 1 1 ; if ((i%4)==0)E printf("\n"); if (imprime=='s') fprintf(stdprn,"\n\r"); I' 'I\ " I' 3 3 getchar( );getchar( );clrscr( fin d e resultado * / /* 1 1; archivo( 1 c FILE *fp; int i; if( (fp=fopen("muestras.dat","wb*)) == NULL) { printf("\n\n\n ALERTA : No fu posible abrir archivo 'muestras.dat' delay(7000); !\no'); 1 else E fwrite(&z,sizeof(MATRIZ3D),l,fp); fclose(fp1; 1 if( ( f p = f o p e n ( " c o e f i c i e . d a t " , " w b " ) ) == W L L ) I printf("\n\n ALERTA : No fu posible abrir archivo 'cooficie.dat' !\ne'); delay(7000); 3 else E for(i=O;i<=lx-lg+l;i++) fclose(fp1; 3 1 /* fin de archivo fwrite(&gCi3,sizoof(float~,l,fp~; */ main() i 3 tomadatos( 1 ; crea-tabla( 1; macro( 1 ; archivo( 1; resultado0; 206 /* MACRO2 */ #include #include #include #include #define #define #define #define #define Lee los archivos que contienen las muestras y los coeficientes de correlación, generados por MACR0EJ.C en base a los datos del ejemplo. , <stdlib.h> <stdio.h> <conio.h> <dos.h> CIERTO 1 FALSO O MAX 1 0 1 MAX2 4 MAX3 2 /* /* máximo de muestras por canal p máximo nQmero de canales p * / */ typedef float MATRIZSD CMAXlCMAX23CMAX31; MATRIZ3D x; float gCMAX*MAX21; int lx, lg,numcanal; int a r c h o p e n ; resultado0 int i, j; char imprime; c l r s c r 0 ; qotoxy(3,lO); printf(" Desea IMPRIMIR las muestras y los resultados (s/n1 ? : "1; imprime=getchar( 1 ; if (imprime=='s') C printf("\n\n Prepare la impresora 1; getchar( );getcharO; 1 c l r s c r 0 ; gotoxy(20,l); printf("TABLA DE MUESTRAS X = Y\n\n"); if (imprime=='s') C fprintf ( stdprn, \ n\r Programa M A C R O 2\n\n\r*); TABLA DE MUESTRAS X 5- Y\n\n\r'i; fpr i ntf ( stdpr n I " \ n \ r . . . I ' " 1 for ( i=l; i<=lx;i++) for(j=l;j<=numcanal;j++) E XCWdl Cldl = % S .2f 'I ,i , j,xC i I C j 1 C 11 1; pr i ntf ( if ( imprim==' 6 ' 1 fprintf(stdprn," XíICdICldl = WS.2f",i,j8xCilCj1Cll); I' 1 3 printf ("\n"1 ; if (imprime=='s'i fprintf(stdprn,"\n\r"); getchar(); if (imprime!='s') gmtchar0;clrscrO; gotoxy(l5,l); printf("COEFICIEiUTE3 DE CORRELACION G\n\n'); if (imprime=='o') C Programa M A C R O 2\n\n\r"); fp r i nt f ( 8 tdp rn , \ n \ r fprintf (stdprn, n\r COEFICIENTES DE CORRELACION G\n\n\r"); 'I 'I\ 3 for(i=l;i<=lx-lg;i++) { printf("GtXdl= X9.2f ",i,gCil); if (imprime=='s'1 i ,gC i 1 ) ; fpr i ntf ( stdprn," GCIdí C = X9.2f if ( ( i K 4 ) = = 0 ) E printf ( \ni' 1; i f ( i mp r i me== s ' 1 fp r i ntf ( stdp rn ," \ n \ r " 1 ; 'I, 'I getchar(); getchar(); c l r s c r o ; f i n de r e s u l t a d o * / /* 1 leearchivo( 1 c FILE * f p ; i n t i , j , k; archopen=FALSO; 1 g = 1 O ; n umc a n a 1 =3 ; 1 x= 100 ; i f ( (fp=fopen("muestras.dat","rb")) == NULL) E p r i n t f ( " \ n \ n \ nALERTA : No f u p o s i b l e a b r i r a r c h i v o 'muestras.dat' archopen=FALSO ; delay(7000); ! ' I ) ; f else E f o r (i=O;i<MAX;i++) for(j=O;j<MAX2;j++) f o r ( k=O; k(MAX3; k++ 1 f read( &xC i 1 C j 1 C kl ,s i z e o f ( f l o a t 1 , 1 ,f p 1; f c lose ( f p 1; archopen=CIERTO; if ( (fp=fopen( "coef i c i e . d a t " , " r b " 1 ) == NULL) E p r i n t f ( " \ n \ n \ nALERTA : No f u p o s i b l e a b r i r a r c h i v o ' c o e f i c i e . d a t ' archopen=FALSO ; delay(7000); f else E for(i=O;i<=lx-lg;i++) f c l o s e ( f p 1; 1 1 fread(&gCil,sizeof(float),l,fp); f /* fin else */ / * f i n de a r c h i v o * / main( E i l e e a r c h i v o ( 1; i f ( a r c h o p e n 1 r e s u l t a d o ( 1i f ! ' I ) ; /* C o n los datos del ejemplo del programa MACROEJ.C, crea el archivr, "datos.dnt" ,el cual es utilizado por el programa MACR0GRL.C p a r o DATOS generar los archivos de medición o muestras y el de coeficientes de correlación . N X Y G LG #include #include #include #include = número d e canles = "p". = (xO,xl, = (yO,yl, ... ... ... ,xm) LX = longitud de X = m. ,yn) LY = longitud de Y = n + 1 = (gO,gl, ,gk) = longitud deseada d e l a correlacion cruz = k + 1 */ <stdlih.h> <stdio.h> <conio.h> <dos.h> /* #define MAX 100 int x1[1001 = máximo de muestras por canal p */ C 101,82,66,35,31,7,20,92,154,126,85,68,38,23,10,24~83,132,131,118, 90,67,60,47,41,21,16,6,4,7,14,34,45,43,48,42,28,10,8,2, 0,1,5,12,14,35,46,41,30,24,16,7,4,2,8,17,36,50,62,67, 71,48,28,8,13,57,122,138,103,86,63,37,24,11,15,40,62,98,124,96, 66,64,54,39,21,7,4,23,55,94,96,77,59,44,47,30,16,7,37,741; int x2C1001 = C 155,113,3,10,0,0,12,86,102,20,98,166,87,131,168,173,238,146,0,0, 0,0,12,0,37,14,11,28,19,30,11,26,0,29,47,36,35,17,0,3, 6,18,15,0,3,9,64,126,38,33,71,24,24,20,22,13,35,84,119,86,71, 115,91,43,67,60,49,100,150,178,187,76,75,100,68,93,20,51,72,118,146, 10 1,6 1,87,53,69,46,47,35,74,104,97,106,113,103,68,67,82,89,102,1101 ; int x3ClOO1 = E 66,62,66,197,63,0,121,0,113,27,107,50,122,127,152,216,171,70,141,69, 160,92,70,46,96,78,110,79,85,113,59,86,199,53,81,81,156,27,81,107, 152,99,177,48,70,158,22,43,102,111,90,86,119,82,79,111,60,118,206,122 134,131,84,100,99,99,69,67,26,106,108,155,40,75,99,86,127,201,76,64, 31,138,163,98,70,155,97,82,90,122,70,96,i l l ,42,97,91,64,81,162,137 I; tomadatos( 1 C clrscr0; gotoxy(20,5); 1 / * fin d e t o m a d a t o s * / printf("D A T O S - Ejemplo\n\n"); archivo( 1 C FILE *fp; int i; if( (fp=fopen("datos.dat","wb")) == NULL) C printf("\n\n\n ALERTA : No fu posible abrir archivo 'muestrao.dat' delayí7000); 1 else I for (i=O;i<MAX;i++) fwrite~&xlCiI,sizeof~int~,i,fp); for (i=O;i<MAX;i++) fwrite(&x2Cil,sizeof(int),l,fp); for (i=O;i<MAX;i++) f w r i t e ( & x 3 C i l , a i z e o f ( i n t ) , i , f p ) ; fcloas(fp); I 1 /* fin d e archivo main( 1 tomabatos( 1 ; archivo( 1 ; ? */ 209 !\n"); /* MACROGRL N LX X LY Y */ LG G Calcula la correlación cruz multicanal de impulsos p-canal, en series de tiempo, con datos para un EJEMPLO; genera un archivo (medicion.dat) con los datos de las muestras procesadas, y otro archivo (ccorrela.dat) con los coefientes de correlación. = número de canles = " p " . = longitud de X = m. = (xO,xl, ,xm) = longitud de Y = n + 1 ... (yO,yl, ... ,yni longitud deseada de (gO,gl, ... ,gk) = = = #include #include #include #include #include <stdlib.h> <stdio.h> <conio.h> <dos.h> <string.h> #def i ne #define #define Qdef i ne #define MMUESTRA 1 0 1 MNCANAL 4 MNTABLA 2 CIERTO 1 FALSO O la correlacion cruz = k /* /* + 1 máximo de muestras por canal p máximo nQrnero de canales p * / */ typedef float MATRIZ3D CMMUESTRAI CMNCANALI CMNTABLAI; typedef float MATRIZZD CMNCANALI CHMUESTRAI ; MATRIZBD z ; int datosLMNCANAL1 CMMUESTRAI ; float x C M N C A N A L * M M U E S T R A I , y C M N C A N A L * n M U E S T R A 3 , 1 ; int l x , ly, 1 g ,numcanal ; int a r c h o p e n , tipo; char entradaCl3l,muestrasCl3l,salidaCl3l; tomabatos( 1 c FILE *fp; char entradaCl2I,opcionC21; int i , j,k; 1 x= ly= 1 g=o ; for (i=O;i<MNCANAL*MMUESTRA;i++) / * Inicializa A r r e g l o s xC i ]=y[ i l=gC i 1 =O; for (i=O;i<MNCANAL;i++) for (j=O;j<MMUESTRA;j++) datosCiICjl=O; for (i=O;i<MMUESTRA;i++) for(j=O;j<MNCANAL;j++) for(k=O;k<MNTABLA;k++) zCilCjlCkl=O; clrscro; gotoxy(25,2); printf("l4 A C R O - */ GENERAL\n\n"); " ; printf ( Cual e8 el nombre del archivo de datos: " 1 ; scanf ( " % s,entrada) printf("\n\n Tipo binario Cll\n\n Tipo hexadecimal C2l\n\n"); Tipo asci i C3l\n\n\n Teclee uu opción : "1; printf ( scanf("%d" ,&tipo) ; 'I I' switch( tipo) C case 1 : strcpy(opcion,"rb"); break; * I* 2í0 I I case 2 : strcpy(opcion,"rb"); break; case 3 : strcpy(opcion,"r " 1 ; break; 1 if( (fp=fopen(entrada,opcion)) == NULL) E printf("\n\n\nALERTA : N o fu posible abrir archivo %s !",entrada); delay(7000); 1 else E / * Toma de datos printf("\n Escriba el nilimero de canales : " 1 ; scanf ( "%d" ,&numcanal ; printf("\n Escriba LX y LY respectivamente. \ n " ) ; scanf ( "%d%d" ,&lx,&ly) ; printf("\n Escriba longitud de Correlación Cruz : " 1 ; scnnf ( "%d" ,&lg 1 ; printf("\n Espere un momento por favor..."); i=j=i; if (tipo!=3) E while( (!feof(fp)) && (i<=numcanali E 1 3 */ f read( &datosC i 1 C j 1 ,sizeof ( i nt 1 ,1, fp 1 ; if( j==lx) E i++; j=l; 3 else j++; else 1 while( (!feof(fp)) &E (i<=numcanal) 1 E fread(EdatosCilCjl,sízeof~char),l,fp); if( j==lx) E i++; j=l; 3 else j++; 1 1 3 /* 1 fclose(fp1 ; fin de tomadatos */ crea-tabla( 1 E int i,j,indice; float promxt~NCANAL3; for(i=O;i<MNCANAL;i++) promxtilr0; /* inicializa promodíoa for(i=l;i<=numcanal;i++) /* calcula promedio de muestras for(j=l;j<=lx;j++) promxCil=promxCi3+datosCilCjl; */ */ for(i=l;i<=numcanal;i++) promxtiI=promxCil/lx; for(i=l;i<=numcanal;i++) / * construye tabla, restando a c/muestra el * / / * proaindio correspondiente a cada canal p * / x C i n d i c e l = d a t o s C i l C j 3 - p r o w x [ i 3 ; / * en el Ejemplo xCi3 = yCi1 y */ yCindicel=xCindicel; / * z~ixlCnumcanal3Cllel la muestra en arch.*/ for( j=1; j<=lx;j++) E indice=((i-l)*lx)+j; 3 1 /* zt jl C i 3 C ll=xC indicel; fin de crea-tabla */ 211 { int i,j,ii,ij,ji,s,t,menor; for (i=l;i<=numcanal;i++) { ii=i+(i-l)*lx; for (j=l;j<=numcanal;j++) E ji=l+( j-l)*ly; ij=l+lg*(i-l)+lg*numcanal*(j-1); /* CROSS ( L X , X ( i i 1 ,L Y , Y ( j i 1 ,LG,G( i j 1 */ for (t=O;t<lg;t++) C if (ly < (lx-t)) menor = l y ; else menor = lx-t; / * subrutina Dot * / gCij+tl=O; for(s=O;s<menor;s++) g[ij+t3=gCij+tl+xCii+t+sl*yCji+sl; 1 1 1 /* /* 1 fin de subrutina cross fin de macro */ */ resultado( E int i , j; char imprime; getchar0;clrscrO; gotoxy(3,lO); printf(" Desea IMPRIMIR las muestras y los resultados (s/n1 ? : "1; imprime=getchar( 1; if (imprime=='s') printf("\n\n Prepare la impresora "1; getchar0;getcharO; 1 c l r s c r 0 ; gotoxy(20,l); printf("TABLA DE MUESTRAS X = Y\n\n"); if (imprime=='s') E fprintf (stdprn," \ n\r Programa i ! A C R O General\n\n\r"); TABLA DE MUESTRAS X = Y\n\n\r"); fp r i nt f ( stdp r n ," \ n \ r ... - 3 for( i=l;i<=numcanal*lx; i++) E p r i n tf ( XC Kdl = K5.2f " ,i ,xt i 1 1; if(imprime=='s' 1 fprintf(stdprn,"XCKdl= % 5 . 2 f ",i,xCil); if ((iX4)==0) E printf("\n"); if ( imprime==' 8 ' 1 fprintf(stdprn," \ n\r " 1 ; I' 1 1 getchar(); if (imprime!='s')getcharO; c l r s c r 0 ; gotoxy(l5,l); printf("C0EFICIENTES DE CORRELACION G\n\n"); if (imprime=='s') C fprintf ( stdprn, \ n\r Programa Bl A C R O - General\n\n\r"); COEFICIENTES DE CORRELACION G\n\n\r"); 1 fprintf t stdprn, " \ n \ r j=l; for(i=l;i<=lx-lg;i++) E pr i nt f ( "GC%dl= X9.2f ,i ,g t i 1 1; if(imprime=='s') fprintf(stdprn,"GC%dIn %9.2f ",i,gCil); if ( ( j%lg)==O) E printf("\n"); if (imprime=='s') fprintf(stdprn,"\n\r"); j=o; 'I 'I 1 else if ((j%4)==0)E printf("\n"); if (imprim=='s'1 fprintf(stciprn,"\n\r"); 1 j++; 1 h a r 0 ; clrscr0; 212 _I_ /* 1 f i n de resultado */ archivo( i E FILE *fp; i n t i; if( ( f p = f o p e n ( " m e d i c i o n . d a t " , " w b " ) 1 == NULL) C p r i n t f ( " \ n \ n \ n ALERTA : No fu posible abrir archivo 'muestras.dat' ! \ n " i ; delay(7000); 1 else C f wr i te ( & z ,s i zeof ( MATR I Z3D 1 ,1 ,fp i ; fclose(fp); 1 if ( (fp=fopen("ccorrela.dat" ,"wb"1 1 == NULL) { printf("\n\n\nALERTA : N o fu posible abrir archivo 'coeficie.dat' ! \ n " ) ; delay(7000); 1 else C for(i=O;i<=lx-lg+l;i++) fclose(fp); 1 1 /* fin de archivo fwrite(Eg[il,sizeof(float),i,fp); */ main( i c 1 toma-datos( ; crea-tabla( : macro( i : archivo( i ; resultado( ; 213 /Y HEAT Calcula los coeficientes de correlación cruz empírica. NRX NC X LX X Número de filas de Xi = p. Número de coumnas de Xi = q . Longitud de Xi = m. (xl,x21,x3.. .xmi arreglados en forma multiplexada. NRY NC Y LY LG Número de filas de Xi = r. Número de coumnas de Xi = q . Longitud de Xi = n. (yl,y2l,y3...y ni en forma multiplexada. Longitud de la correlación curz. G CGxy(0) ,Gxy( 1 1 , . Y . . ,Gxy(ki 1 arreglados en forma multiplexada. %/ #include #include # i nc lude #include <stdlib.h> <stdio.h> <mem.h> <conio.h> #define MNCANAL 4 #define MLTIME 5 typedef float MATRIZSD CMLTIMEICMNCANALICMNCANALI; /*matriz de Sdimenciones* WATRIZ3D x,y,g; int nrx,ncx,lx,nry,ncy,ly,lg; toina-dator( 1 { int i, j,k; float aux; / * inicializa arreglos * / for (i=O;i<MNCANAL;i++i for ( j=O; j<MNCANAL;j++) for ( k=0;k<MLTIME;k++) xC i I C jl E kí=yt i 1 1 jl Ikl=g[ i 1 t j l C k3=0; clrscro; gotoxy(25,5); printf(*H E A T\n\n"i; printf(" Escriba NRX, NCX y LX respectivacaente.\n"i; scanf( "XdXdXd",&nrx,&ncx,&lx) ; printf(" Escriba loa coeficientes de X Clxl Crengl lcoll .\n"); for (i=l; i<=lx;i++) ( printf(" LX = %d\n",i); for (j=l; j<=nrx;j++) for (k=l;k<=ncx;k++) C printf(" CWdlCWdl = ",j,ki; cocanf ( "Xf",&aux) ; xt 1 1 t jl C kl=aux; printf("\n"); 1 1 printf("\n Escriba NRY, NCY y L Y respeotivamonte.\n*); scanf ( * XdXdWd" ,&nry ,&ncy ,& 1 y 1 : printf(" E6criba los coeficientes de Y Clyl Crengl Ccoll .\n"i; for (i=l;i<=ly;i++) E printf(" LY = Wd\n",i); for (j=l;j<=nry;j++) for (k=l;k<=ncy;k++i C printf ( CXdl CXdl = j,k) ; cscanf ( Xf ,&y t i 1 C j I C k 1 1: printf("\n" 1 ; 31A 1 'I 'I, I' - I l - ^ I 1 1 _ .l - 1 printf("\n Escriba la longitud de la correlación cruz LG : " 1 ; scanf ( "Xd",&lg) ; 1 / * fin de t o m a d a t o s * / resultado0 { int i,j,k; char imprime; g e t c h a r 0 ; c l r s c r O ; gotoxy(3,lO): printf(" Desea IMPRIMIR los resultados (sin) ? : " 1 ; imprime=getcharí i ; if (irnprime=='s') C printf("\n\n Prepare la impresora 1; getchar( );getchar( 1; 1 clrscr( 1; printf(" Los coeficientes de C.\n"i; if (imprime=='s'i C Programa H E A T\n\n\r"); fpr i ntf ( stdprn, \ n\r fp r i nt f ( s tdpr n , \ n \ r TABLA DE COEFICIENTES C\n\n\r"); . . . ' I 'I 1 for (i=l;i<=lg;i++) 1 printf("\n LC = %d \n\n",i); if (imprime=='s') fprintf(stdprn,"\n LC = %d \n\n\r'',i); for í j=l; j<=nrx;j++i E for (k=l;k<=ncy;k++) { p r i nt f ( %5.2f ,g t i I C jI C kl i ; if(imprime=='s') fprintf(stdprn," X5.2f " , g C i I C jltkl); 'I 'I 1 3 1 1 /* printf("\n"); if (impriino=='s') fprintf(stdprn,"\n\r"I; getchar( 1; if (imprimo!='s' 1 gotchar( 1 ; fin d e resultado * / heat (xx,yy ,gg I MATRIZ3D XXrYYsgg; { int m,n,l,i,j,k,menor,lmin; if (lg<lx) menorxlg; else menor=lx; for (m-1 ;m<=nrx;m++ i for(n=l;n<=nry;n++) for( 111;l<=ncx;I++) for( j = l ; j<=menor; j++) < if ( ly<( 1 x- j+i 1 i lmi n=ly ; else lmin=lx-j+l; for(i=l;i<=lmin:i++) k=i+j-1; gg C j3 C ml C n 3 =ggC j I C ml C nl +xxC kl C rnl t 1 I *yy C i 3 C nl C 1 3 ; 1 1 /* fin d e heat main( E 1 ? */ 1 tomadatosi 1 ; heat(x,y,g); resultado( 1; 215 /* Calcula los coeficientes de correlaci6n c r u z empírica, pare un ejemplo, considerando las muestras generadas por e l programa MACROEJ en el archivo (muestras.dat1, como datos de entrada para este ejemplo. HEATEJ X Número de filas de Xi = p . Número de coumnas de Xi = q . Longitud de Xi = m. (xl,x21,x3.. .xmi arreglados en forma multiplexada. NRY NCY LY Y LG Niimero de filas de Xi = r. Número de coumnas de Xi = q . Longitud de Xi = n. ( y l , y 2 l , y 3. . . y n) en forma multiplexada. Longitud de l a correlación curz. G CGxy(0) ,Gxy( 1 1 , . NRX NCX LX */ #include #include #include #include #define #define #define #define +define . . ,Gxy(k) 1 arreglados en forma multiplexada. <stdlib.h> <stdio.h> <dos.h> (conio. h> CIERTO 1 FALSO O MLTIME 101 NCANALl 4 NCANAL2 4 /* máximo d e muestras por canal p */ typedef float MATRIZ2D CNCANALlICNCANAL21; / * matriz de 2 dimenciones * / typedef float MATRIZBD CMLTIMElCNCANALllCNCANAL21; /*matriz de Bditnenciones*/ MATRIZBD x,y,g; int nrx,ncx, lx,nry,ncy,ly,lg; int archopen=FALSO; /* s i abrir archivo es posible leearchivo( i E FILE *fp; int i,j,k; r if( (fp=fopen("muestras.dat","rb')) == NULL) { printf("\n\n\n ALERTA : No fu posible abrir archivo 'muestras.dat' ! " I ; archopen=FALSO ; delay(7000); 1 else E for (i=O;i<MLTIME;í++) for(j=O;j<NCANALl;j++) for ( k=O ;k(NCANAL2-2 ;k++ 1 fread( LxC i 3 C j3 C kl ,sizeof( float 1 ,1 , fp 1 ; y[ i I C jl Ckl=xC 1 3 C j1 C kl ; 1 1 1 fclose(fp1; arch o p e n = C I ERTO ; /* fin de leearchivo tomadatos( 1 c */ 216 */ int i , j,k; for (i=O;i<MLTIME;i++) / * inicializa arreglos * / for (j=O;j<NCANALl;j++) for (k=O;k<NCANAL2;k++) xC i 1 C jl E kl=yC i 1 C jl Ikl=gC i 1 C 52 C kl=0; arch o , pen=FALSO ; clrccr0; gotoxy(25,5); printf("H E A T - Ejemplo\n\n"); printf(" Escriba NRX, NCX y LX respectivamente.\n"); scanf ( "ScdXdXd",&nrx,&ncy,&lx) ; nry=ncx=nrx; ly=l x; printf("\n Escriba la longitud de la correlación cruz LG : scanf ( "%d" ,&lg) ; printf("\n Favor d e esperar un momento..."); 1 / * fin d e tomadatos * / ' I ) ; resul tadot 1 E int i , j,k; char imprime; g e t c h a r 0 ; c l r s c r O ; gotoxy(3,lO); printf(" Desea IMPRIMIR las muestras y los resultados (s/n1 7 : imprime=getcharO; 1; if (imprime=='s') { printf("\n\n Prepare la impresora getchar0;getcharO; 1 c l r s c r 0 ; gotoxyí20,l); printf("TABLA DE MUESTRAS X = Y\n\n"); if (imprime=='s') C Programa H E A T - Ejemplo\n\n\r"): fprintf (stdprn, \n\r fprintf (stdprn," \ n\ r TABLA DE MUESTRAS X = Y\n\n\r"); ' I ) ; . . . I ' 1 for ( i=l; i<=lx;i++) C for(j=l;j<=nrx;j++) C printf(" XCWdlCWdl %5.2f ",i,j,xCilCjlCll); if ( imprime==' 6 ' 1 fprintf (stdprn," XCWdICXdl 965.2f " ,i,j,xCilC j l C 11 1; 1 pr i ntf ( " \ n" 1 ; i f ( imprime== ' s ' 1 fpr i ntf ( stdprn , \ n\r 1; I' 1 I' getchar0; if (imprime!='s') getchar(); clrscrO;gotoxy(20,2); printf("C0EFIENTES DE CORRELACION G.\n"); if (imprime=='s') C fprintf(stdprn,"\n\r Programa H E A T - Ejornpio\n\n\r"); fprintf ( stdprn," \ n\ r COEFICIENTES DE CORRELACION G\n\n\r"1: 1 for (i=l;i<=lg;i++) C for (j=l;j<=nrx;j++) C for (k=l;k<=nry;k++) E printf ("GCYdICWdlCWdl 19.2f i, j,k,gC i l C jICk3); if (imprime=='s' 1 fprintf(otdprn," GC%dlC%dlC%dl %9.2f ",i,j,k,gCilCjlCkl); 'I, 1 1 printf ( "\n"1; if (imprime=='s'1 fprintf(stdprn,"\n\r"); printf("\n"); if (imprime=='s') fprintf(otdprn,"\n\r"); 1 getcharO;clrscr( 1; 1 / * fin d e resultado * / 217 heat i 1 E int m,n, 1 , i , j ,k,menor,lmin; if (lg<lx) menor=lg; else menor=lx; for ( in= 1 ;m <= n r x ;m++ 1 for(n=l;n<=nry;n++) for( 1=1; l<=ncx;1++) for(j=l;j<=menor;j++) { if( ly<( lx-j+l) 1 lmin=ly; else lmin=lx-j+l; for(i=l;i<=lrnin;i++) i k=i+j-l; gC jl Cml C nl=gC 11 Cm1 C nI+xL kl Cml E 1l*yC i 1 C nl C 1 1 ; 3 3 /* fin de heat 3 */ main( 1 E torna-datos( 1; leearchivo( ; if ( a r c h o p e n ) E heat( 3 3 1; resultado0; 218 /* QUADCO R Número de filas de Ri. Nitmero de coumnas de Ri. Longitud de Ri trl,r2,r3...rm) arreglados en forma multiplexada, RCrlCnrrIlncrl. S CM(O),M(dfl,M(2df),M(3dfl, NRR NCR LR */ Calcula l a s matrices empíricas de autoespectro,co-espectro y d e cuadratura de espectro, de una función de autocorrelaci6n para multicanal. #include #include # i nc 1 ude # i nc lude . ...,M(mdfl1, donde df=(l/í?m). <stdlib.h> <stdio.h> <math. h> (conio. h> #define PI 3.1415927 #define MNCANAL 3 #define MLTIME 3 / * matriz de 2 dimenciones * / typedef float MATRIZ2D CMNCANALIEMNCANALI; typedef float MATRIZJD CMLTIMEILMNCANALICMNCANALI; /*matriz d e 3dimenciones*/ float rCMLTIMElCMNCANAL3~MNCANAL3,sCHLTIME31MNCANALlCMNCANALl; float espacioC2*MNCANALI; int 1,n; toma-dAtosi 1 c int i,j,k; for (i=O;i<MLTIME;i++i / * inicializa arreglos * / for (j=O;j<IiNCANAL;j++l for í b o ; k<ltWCANAL; k++) rC 1 3 1. jl C kl=sC i 3 C jl C k3=0; for ( i = O ; i < n L T I ~ * ~ A N A L ; i + + ) espacioCíl=O; clrscr0; gotoxy(25,5); printf("Q U A D C O\n\n"l; printf(" Para RCl,n,ní escriba L y N :\n"); scanf ( "XdWd",&l ,&ni ; printf(" Escriba 1 0 8 coeficientes d e R C 1 1 Crengl [col] . \ n * ) ; for (i=l;i<=l;i++l C printf ( " LR = Sd\n",i l ; for (j=l;j<=nsj++i for (k=l;k<fn:k++l f prlntf(" C%dlt%dl = ",j,kl; cscanf í " % f" ,&rC 1 3 L jl C kl 1; p t i nt f ( " \ n l ; I' 3 /* 1 1 fin de toma-datos */ 219 resultado( 1 E int i,j,k; char imprime; g e t c h a r 0 ; c l r s c r O ; gotoxy(5,lO); printf(" Desea IMPRIMIR los resultados (s/n1 ? : irnprime=getchar( 1 ; if (irnprime=='s'i E printf("\n\n Prepare la impresora 1; getchar( 1;getcharO; 1 clrscr( 1 ;gotoxy(35,11; printf("Q U A D C O\n\n"i; Tabla de Coeficientes R\n"); printf ( if (irnprime=='s'i { Programa Q U A D C O \ n \ n \ r " ) ; fp r i n t f ( stdpr n , \ n \ r Tabla d e Coeficientes R \ n\ n \ r " 1 ; fprintf (stdprn," \ n\r ' I ) ; . . . ' I I' 'I 1 for ( i = l ; i < = l ; i + + i E printf("\n LR = Xd \n",i); if (imprime=='s'i fprintf(stdprn,"\n LR = Wd \n\n\r",il; for ( j = i ; j<=n;j++i E for (k=l;k<=n;k++) E printf í %5.2f ,rC i l C jl C kl i ; i f ( i mp r i me== s 1 fp r i n tf ( stdpr n , 'Y5.2f ,r C i 3 C j 1 C k3 1 ; 'I 'I I' 1 printf ( "\nI'i; if (imprime=='s'ifprintf(stdprn,"\n\r")i 1 1 getcharO;getcharO;clrscrO;gotoxy(25,2); printf("Q U A D C O\n\n"i; Tabla de Coeficientes S\n"); printf ( if (imprime=='s'i C Programa Q U A D C O\n\n\r"); fpr i ntf ( stdprn, \ n\r fp r i n tf ( s tdp r n , \ n \ r Tabla d e Coaf icientea S \n\n\r" i ; 'I It 'I 1 for (i=l; i<=l; i++i C printf("\n LS = X d \n",i); if (imprime=='s'i fprintf(stdprn,"\n LS = %d \n\n\r",i); for í j=i; j<=n; j++) C for (k=l;k<=n;k++i E pr i nt f ( X5.2f I' ,st i 1 I: j1 C kl 1; if(imprime=='s') fprintfíatdprn," SL5.2f ",aEiJCj l C k 3 ) ; 'I 1 printf ( " \ n" i ; if ( imprime== s ifpr i ntf ( stdprn, 'I \ n\r " i ; 3 1 ' getchar(); if (imprime!='a') getchar(); 1 / * fin d e resultado * / sintab(rn,table) int m: float *table; c float angulo; i nt i ,mm, fm; f m=m+m-2 ; mm=m+m- 1 : for (i=l;i<=mm;i++) E angulo = ((i-l)*2*PII/fm; tablet il=sin(angulo) ; 1 220 )/J(. f i n de 5 i n t a b l e */ costab (m, t a b l e ) int m ; f l o a t *table; :. float anqulo; i n t ; i ,mm,fm; ,m m ,x ,y , z ) int n--.n,m-m,:.:,y,r; cosp n-n .I i n t i ,i i ,j ,ct C: ,m m ,m m m ,:. :.: ,y y ,z z ; j=i; c :< 1c y 1c 2 1 =o; kk=x-l; mm=2*mm-l; mmm=mm-1; for(i=l;i-<=n-n;i++) 55 .C x : . : = i / (n*n) ; ii=iX(n*n); if (xx==O) C xx=l; i I-i ; 3 e l s e if (li==O) li=n*n; e 1 se xx=xx+ 1 ; S C XI Cy1 C zI=sC X I Cy1 C zI+rC xxl C y y l tzzl*espacio[ 3 1 ; j=j+kk; 1 3 if ( ( j-mm) > O ) j= j-mmm; /* fin de cosp */ 221 quadco( 1 E int i, j,k; float weight,even,odd,ll; 11=1; for (j=l;j<=n;j++)E for (k=j;k<=n;k++)E for (i=l:i<=l;i++)E weight=(l-i+l)/ll; even=rC i l C j l C kl+rC i l C klC jl; odd=rC i l C jl C kl-rC i I C kl C jl ; rEilCk3C jl=weight*odd; r C i 1 C j3 C kl =weight *even ; 1 rC i l C jl C kl=rC i l C jl CklíS; 1 1 for (j=1;j<=n;j++) E for (k=l;k<=n;k++) E if (k>=j) costab(1,espacio); else sintab( 1 ,espacio) ; for (i=l;i<=l;i++i c o s p ~ l , l , i y j , k ~ : rt íl C j1 t kl=rt 11 E j1 C kl*2; 1 1 1 /* fin de quadco */ main( 1 c toma-datoa( i i quadco( i ; resultado( 1; /* QUADCO */ /* Calcula la magnitud y atraso de fase de la coherencia. COHERE S Número de canales p . Longitud, l=m+l. CM(0) ,M(df 1 ,M(Zdf 1 ,M(3df), C CH(O),H(df),H(2df),H(3df),. ..,H(mdf)l, donde df=(1/2m). N L */ #include #include #include #include . . . ,M(mdf 1 3 , donde df=( 1/2m). <stdlib.h> <stdio.h> <math.h> <conio.h> #define PI 3.1415927 #define MNCANAL 3 #define MLTIME 3 typedef float MATRIZ3D CMLTIMEICMNCANALICMNCANALI; /*matriz de 3dimenciones'í float cCMLTIME1 CMNCANALICMNCANALI ,sCMLTIMEICMNCANALI CMNCANALI; 1 ,n; int 1 toma-datos( E int i , j, k; for (i=O;i<MLTIME;i++) / * inicializa arreglos for (j=O;j<MNCANAL;j++) for í k=O;k<WNCANAL;k++) cC i l C jl C kI=sC i 3 C jICkl=O; */ clrscr0; gotoxy(25,5); printf("C O H E R E\n\n"); printf(" Para SCl,n,nl escriba L y N :\no'); scanf ( "Xd%d" ,&l ,&ni ; printf(" Escriba los coeficientes d e S C 1 1 Crengl Ccoll .\n"); for (i=l;i<=l;i++) E printf(" LS = Xd\n*,i); for (j=l;j<=n;j++) for (k=l;k<=n;k++) { printfí" CXdlCXdl = J,k); cscanf ( "Xf" ,&sC i 3 C J 3 C k3 1: pr i nt f ( It \ n" i ; 'I, 1 /* 1 1 fin de t o m a d a t o s resultado( E */ 1 int i,J,k; char imprime; getchar0;clrscrO; gotoxy(5,lO); printf(" Desea IMPRIMIR los resultados (s/n1 ? : "1; imprirne=getchar( 1 ; if (imprime=='s') E printf("\n\n Prepare la impresora i; getchar0;getcharO; 1 clrscrO;gotoxy(35,1); printf ("C O H E R E\n\n"); printf(" Tabla de Coeficientes R\n"1 ; if (imprime=='s') E fpr i nt f ( stdpr n , \ n \ r Programa C O H E R E\n\n\r") ; fp r i nt f ( stdpr n , \ n \ r Tabla de Coeficientes S\n\n\r"); 223 .~ 1 . . . ' I I' 'I _p. P - U - P " _ 1 _ - ~ f o r (i=l;i<=l; + + ) C printf("\n .S = %d \n",i); if (imprime = ' S O fprintf(stdprn,"\n LS = %d \n\n\r",i); for Cj=i;j<= ;j++) C for (k=l;i:<=n;k++) C printfi" % 7 . 4 f ",sCilCjlCkl); if ( imprime=='s' 1 fprintf (stdprn, % 7 . 4 f " 1 1 printf ( " \ n "1 ; i f ( i mp r i me== ' s i fpr i ntf ( stdp r n , " \ 'I ,sC i l C jICk1) ; n \ r " 1; 1 getcharO;getcharO;clrscrO;gotoxy(25,2); printf("C O H E R E\n\n"); Tabla de Coeficientes C\n"1 ; printf(" if (imprime=='s') C fpr i ntf ( stdprn, \ n \ r Programa C O H E R E\n\n\r"); Tabla de Coeficientes C \n\n\r " ) ; fp r i nt f ( stdp r n , \ n \ r 'I " 1 for (i=l;i<=l;i++) E printf("\n LS = %d \n",i); if (imprime=='s') fprintf(stdprn,"\n LC = %d \n\n\r",i); for (j=l;j<=n;j++) C for (k=l;k<=n;k++) I pr i ntf ( % 7 . 4 f " ,c C i 1 C j 1 C kl 1; if (imprime=='s'1 fprintf (stdprn," %7.4f ",cCilCjICki 1; " 3 printf("\n"); if (imprime=='s') fprintf(stdprn,"\n\r*); 1 3 /* 1 getchar0; if (imprime!='s') getchar(); fin de resultado * / cohere( 1 E int i,j,k,jp,negativo; float maximo,afase ,coerencia; f1oat auxl ,aux2,coc i en te ; nega t i vo=- 1 ; for (jp=2;jp<=n;jp++)E j= jp- 1 ; for (k=jp;k<=n;k++)E for (i=l;i<=l;i++) E auxl=( sC i 3 C jl C kl*sC 1 3 C j 3 C kl I + ( oC 11 C klC jl*sC 11 C kl C jl 1 ; aux2=sC i l C jl C jI*sC 1 3 C kl C kl ; if (aux2!=0) cociento=auxl/aux2; else cociente=O; i f ( c oc i ente<O 1 c oc i ente=coc i e nte* nmga t i vo ; 1 1 3 coerencia=sqrt(cociento); afase=atan2 ( sC i 3 C kl C j1 ,sC i 1 C j 1 C kl 1; cC i 1 C jl C kl=coerencia; cCilCklCjl=l80*(afaoe/PI~; for( j=1; j<=n;j++) C ma xi mo=s C 1 1 C j I C j 1 ; --"--.----- for(i=l;i<=l;i++) { cCilC j l C jl=sCilCj l C 91; 224 . if (cEilCjlC jl>=O) auxl=cCilC jlC jl; else auxl=cCilCjlCjl*negativo; if (rnaximo<auxll rnaxirno=auxf ; 3 for(i=l;i<=l;i++) E cCilC jlC jl=cCiíC jlC jl/maxirno; 1 3 /* 3 fin de cohere main( 1 E tornadatos( l ; cohere( 1 ; resultado0; 3 */ /* COHERE */ I- I I I : I I I t I I I I I I I I : I I I t I I I I I I I I I I Este programa grafica puntos en XY,con la posibilidad de graficar 6nicamente una parte d e la gráfica general, obtiene automaticamente la escala nesesaria ; la parte del monitor que es empleada como área d e graficación es delimitada por los puntos siguientes, mismos que pueden ser ajustados deacuerdo a las nesesidades. Si se tienen varios grupos de datos (canales) pueden graficarse todos al mismo tiempo y a una misma escala, 6 c/u a su escala, en cuyo caso podrá graficarse solo un grupo de datos. I I I y2 I : I i i I I I I I x2 I I I I I I + +-------------------------------------------------------------------- */ i I 1 I +------------------------------------------------------ xi I I #include #include #include #include +include #i nc lude +include #define #define #define #dofino +dofine #dofino +dof i ne +define #defino <stdlib.h> <stdio.h> <dos.h> <conio.h> <math.h> <8tr i ng h> <graphics.h> . e s p a r a 0 while(!(kbhitO)); g e t c h 0 ; / * nhutro de divisiones dol ejo X NUMDIVX 10 NUMDIVY 10 / * nQaiero d e divi8iono6 del o J e Y CIERTO 1 FALSO O MAXDATO 610 MMUESTRAS 30 1 / * máximo do muostras por canal p MNCANAL 5 / * máximo nSmoro d o canalos p * / MTABLA 3 */ */ */ typodof float MATRIZ3D t M M U E S T R A S l t # r ( I C A # A L l t ~ ~ ~ J ~ MATRIZSD x; float datoatMAXDATO1; i n t a r ch o p e n ; i nt mismaescala ; int inix, f inx; float iniy,finy; float unidadx,unidady; int offsot; i n t maxx, maxy ; int xl,x2; int yl,y2; /* /* delimitan 0 1 rango on X y Y do l o a puntos que 80 gratíoarán. /* corrimiento en pixole. -* - . U _ " " . l.u"yy X 1 % delimitarn 0 1 aroa di8ponible para /* /* trazar la gráfica. y(x1,yl) origon(xl,y2) char conjuntoC63=E'11,121,13','4','0','511; char almacent4003; i n t numdatos,numcanales,numtablas; int cana1,tabla; 225 . ~ dol eje */ */ */ x(x2,y2) */ */ */ /* void margen( enrnarca la ventana que se ecuentra activa */ E struct text-info r; int i ,alto, largo; gettextinfo( Er ; alto=r.winbottom-r.wintop; for(i=l;i<largo;i++) putch(0xcd); insline(); for(i=l;i<largo;i++) putch(0xcd); for(i=2;i<alto;i++){ largo=r.winright-r.winleft; gotoxyi l,alto+li; putch(Oxc8); putch(0xbc); gotoxy( 1,alto-1); gotoxy(1,l); putch (Oxc91 ; putch(0xbb); pu tch ( O xba ; gotoxy(largo+l,iI; putch(Oxba);putch(Oxba); 1 gotoxy(largo+l,alto); putch(0xba); gotoxy(2,2); I/* fin de margen */ ventana( 1 C clrscro; window(1,1,80,25); textbackground(GREEN+BLINK); textcolor(BR0WN) ; clrscr( 1; margen( I ; 1 / * fin de ventana * / mensaje(cadena,largo) char *cadena; int largo; /* /* /* /* abre una ventana del tamaño de t o d o el monitor, y la enmarca */ */ abro una ventana sobre el 'cadena' y asigna * / un carater del teclado a la vir. 'tocla' */ c char tecla; struct text-info a; struct text-info n; int x,y; /* /* l a ' datos de ventana'actual * / datos de ventana nueva, por abrir '0' gettextinfo(&aI; x=(ía.winright-a.winleft)-o)/2; x=a.winleft+x; y=((a.winbottom-a.wintop)-3)/2; y=a.wintop+y; n. winleft=x; n.winright=x+largo+3; textbackground( WHITE) ; clrscr( 1; got oxy ( 3,2 1 ; tecla=getch( 1 ; n.wintop=y; n.wlnbottom=y+2; toxteolor (BLACK); margmn( 1: cputs(cadena1; putch(toc1a); puttgxt(n.winleft,n.wintop,n.winright,n.winbotto~,al~c~n); tsxtbackground(GREEN+BLINK); toxtcolor(BfPOWN) ; window(a.winleft,a.wintop,a.winright,a.winbottom); 1 /* mensaje */ */ lee-archivo( I c FILE *fp; char entradaC13l,tipoC2l,opcion; i n t i, j, k: archopen=FALSO ; ventana( 1 : gotoxy(23,31; cputs("GRAF1CADOR X vs Y Lectura de Archivo" 1 ; " I ; " 1 ;st rcpy ( t i po ," strcpyi entrada, " gotoxy(l6,6); cputs("Cua1 es el nombre del archivo de datos: "1; scanf i "96s",entrada); gotoxy( 16,8); cputs("Tipo binario c 11 " 1 ; gotoxy( 16,91; cputs("Tipo hexadecimal C21"); gotoxy(l6,lO); cputs("Tipo ascii C31 I ; do C gotoxy(l6,lS); cputs("Tec1ee su opción : " I ; opcion=getchO; f while (memchr(conjunto,opcion,3I==NULL); switch(opcion1 E case ' 1 ' : strcpy(tipo,"rb"I; break; case '2' : strcpy(tipo,"rb"I: break: case '3' : strcpy(tipo,"r"); break; --- I' 3 if( (fp=fopen(entrada,tipoi) == NULL) C mensaje("ERR0R: Imposible leer archivo.",30); archopenrFALS0 : 3 else { for (i=O;i<BWUESTRAS;i++) for( j = O ; j<HNCANAL; j++1 for ( k=O ;k<HTABLA; k++ 1 XI i 1 IJ I C kl=O ; gotoxy(l6,15); cputs("Los datos del archivo se almacenarán en laY); gotoxy(l6,16); cputs("MATRI.2 CNQ Muestras3 I?& Canal081 [NQ Tabla]"); gotoxy(16,18~; cputs("1ntroduzca los valores correspondientes..."); do { gotoxy(25,201; cputs(" 1; gotoxy(l6,20); cputs("NP Muestras = '1; scanf("Wd",Cnuadatos); if ((numdatos<lO)I :(numdatos>=rilllUW?ñW)) mensaje("10 <= N9 Muestras <= 300",241; 3 while ( (numdatos<lO1 I : (numdator>=i%HüE3TRAS)1 ; I' do { gotoxy(25,21); gotoxy( 16,211 ; cputs(" "1; cputs( "NP Canales = " 1 ; scanf ( "%d" .bnumcanales) ; if ( (numcanales<l): : (nuawanales>=HNCANAL)1 rnensaje("1 <= NQ Canalem <= 4*,241; 3 while ((numcanales<li : :(numcanales>=MNCANAL)); do { gotoxy(25,221 ; gotoxy( 16,221 ; cputs( " " 1; cputs( "NP Tablas = " 1; scanf ( "%do',&numtablasi ; if ((numtablas<l): :(numtabla.>=I(WCANAL)) mensaje("1 <= NP Tablas <= 2",24): 3 while ((nurntablas<l)::(numtablas>=MTABLA)); for( k=l;k<=numtablas;k++) for(j=l;j<=numcanales;j++) for (i=O;i<=numdatos;i++) fread(&xCilCjlCkl,sizeof(float),i,fp); fclose(fp) ; archopen=CIERTO; if ( ( xC 03 C 1 I C 13 > = l o )E&(xCOl E 11 C numdatos=xCOI C 11 t 11 ; 1 3 (numdatos 1 1 /* asigna el numero de datos */ for(j=l;j<=numcanales;j++) for ( k=l ;k<=numtablas;k++ 1 xE 01t j 1 t kl =O ; 1 1 / * fin else * / / * fin de leearchivo * / /* pantalla0 c int graphdriver ; int graphmode ; char path-driver11 = int error = -1; "'I inicializa el modo gráfico */ 1 detectgraph(&graphdriver,&graphmodo); initgraphí&graphdriver,&graphmwio,path-driver); error = graphresulto; if ( error < O 1 { clrscr( i ; printf("Error en initgraph : %s",grapht?rrormrg(error)~; exit( 1 ) ; 1 cleardevice( 1; maxx=getraaxx( 1 : maxy=getmaxy( 1: x1=40; x2= 16 ; /* /* ~1115; y2325 ; /* /* dmfino lo ooparado que estarán los dol marco de la pantalla. /* rectangle(O,O,maxx,maxy) ; rectangle(2,2,maxx-2,iaaxy-S)) /* 1 fin de pantalla */ */ ejes * / */ obtiene el atáximo de X obtiene o1 máximo do Y marco del monitor */ */ 1 lena-tabla( 1 { int i,negativo,offsetx; off setx=numdatos+ 1 ; offset-O ; negat i vo=- 1 ; iniy-0; f i ny=O ; inix=O; f i nx=numdatos*2; for(i=O;i<HAXDATO;i++) dato8tilaO; for(i=l;i<=numdatos;i++) datosCnun\dator+il=d~tostoffs~tx-il=xC ilCcanall[ tabla]; 229 I I . -..* ~.-. for (i=inix;i<=finx; i++i E if (finy < datosCi3) finy=datosCil; if (iniy > datosCi1) iniy-datostil; _I.. I- /* /* /* obtiene los valores mínimo y máximo para nueva escala. */ */ */ > if (iniy<O) /* 1 offset=iniy*negativo; fin de llena tabla */ ejes( 1 c 1 i ne ( xl ,y 1, xi maxy-y2 ) ; i ine( xl-1, y1 ,xl-1 ,maxy-yZ+l) ; /* eje y */ 1 i ne ( xi, maxy-y2-of f set,maxx-x2, maxy-y2-of fset ; 1 ine( xi-1 ,maxy-y2-offset+l ,maxx-xS+l ,maxy-y2-of fset+l) ; /* eje x */ set text sty 1 e ( D E F A U L T F O N T HORI 2-D IR, 1 1 ; outtextxy( xi-10,6, "Y" 1 ; out textxy ( maxx-12,maxy-of f set-28, 'IX" 1; /* 1 fin d e ejes */ /* escalaxy( c obtine la escala en pixeles d e io8 e j e s X y Y */ char numero1 33 ; int i,y,xxx,yyy,xintervalo; float ii,residuo,yintervalo,rangox,rangoy; xxx=IILáxx-x1-x2 ; rangoxxf inx-inix; xi nter val o=rangox/NUMDIVX; i f ( xi ntor va 1 o<1 xi n terva 1 o= 1 : unidadx=rangox/ xxx; yyy=maxy-yl-y2 ; rangoy=finy-iniy; yintervalo=rangoy/NUWDIVY; unidadymrangoyíyyy; /* /* escala X */ /* oscala Y */ un pixel oquivale a 'unidady' */ offset=offset/unidady; f o r ( i ~ x i n t o r v a l o : i < = r a n g o x ; i r i + x i n t o r v a l o )C 1 xxxiliíunidadx; 1 in*( xxx+xl ,araxy-y2-offset, xxx+xl ,maxy-y2-offsot+b 1; strcpy( nuamro, I' "1; itoa( i+inix,numoro, 10) ; outtextxyi xxx+xl-8, maxy-y2-of fsett+lO, numero) ; for (ii=yintervalo;ii<=rangoy;iicii+yintervalo) E yyy=(ii+iniy)/unidady; lino~xl-2,maxy-y2-yyy-off~~t,xl+4,maxy-y2-yyy-o~fset~; strcpy(numer0," 1; if (yintervalo>=l) { / * oscala si Y son onteros y=ii+iniy; re~iduo=(ii+iniy-y)*lO; if(ro8iduo>=6) y++; i toa ( y, numero, 10 1; I' 1 */ else gcvt(ii+iniy,2,numoro); / * escala si Y son decimales outtextxyí 4,maxy-y2-yyy-of fset-4, numero) ; 1 /* J fin d e escalaxy */ 230 dibuja( 1 € i n t i,primero,ultimo; i nt aax,aay ,bbx, bby ; float auxx,auxy; for(i=O;i<=finx;i++) if (i==inix) { primero=i; i=f i nx; ? for(i=primero;i<=finx;i++) if(i==finx) E ultimo=i; i=finx; /* /* obtiene el primer elemento dentro del rango de x (finx-inix). */ */ /* /* obtiene el ultimo elemento dentro del rango de x. */ */ ? /* obtiene las coordenadas del punto A(aax,aay) , */ primero a graficar auxx= ( p r i mero- i ni xi /unidadx; auxy=datosCprimero3/unidady; aax=auxx+xl ; /* obtiene las coordenadas respecto al m o n i t - o i aay=maxy-y2-of fset-auxy ; circle(aax,aay,2); /* marca e1 punto A para que sea visible / */ for (i=primero+l;i<=ultimo;i++) E auxx=( i-inix) /unidadx; auxy=datost i 3 /unidady; /* /* bbx=au xx+xl ; / * obtiene las coordenadas dol punto B(bbx,bby) */ */ obtiono las coordonadas respecto al monito: bby=maxy-y2-of f set-auxy ; line(aax,aay,bbx,bby); circle(bbx,bby,S); if !misma-escala) 1 /* 1 /* aax=bbx; aay=bby ; fin de dibuja /* t r a m una linoa ontrs l o s puntos A y B m r c a 01 punto B para que sea visible /* */ */ line(bbx,maxy-y2-off8ot,bbx,bby); el punto B 80th 01 punto A del siguiente trazo */ amplifica( 1 c char intervalo,cadenaC303,cadena2C3Ol,nu~roC4~; int inicio,fin,i,negativo; espora( 1 ; closegraph0; numdatos=numdatos*2; inicio=O; fin=numdatos; do C ventana( 1; gotoxy(32,5); cputs("GRAF1CADOR X vs Y " ) ; window(2,1lr78,20); gotoxy ( 12,5 1 ; cputs("¿ Desea graficar un intervalo de datos espoclfico (s/n1 7 "1; intervalorgetch0; 231 */ if ( (intervalo=='s' I : ( intervalo=='Q' ) C clrscr( 1; strcpy(cadena,"Háximo el dato : * ) ; itoa(numdatos-3,numero,lO~; st rca t ( cadena, numero 1 ; gotoxy(l0,l); printf("De Xd datos, selecione el ",numdatos); puts( "intervalo en X que desea graficar. 'I 1 : do C gotoxy(35,4) ; cputs( 1; gotoxy(l4,4); cputs("Apartir del dato X = ? ? ? "1; scanf ( "%d" ,&inicio) ; if (inicio<O) / * O<=inicio<=(nurndatos-2)*/ mensaje("Minimo el dato: 0 " , 1 7 ) ; else if (inicio>(numdatos-3)) mensa l e ( cadena,23 ; while ((inicio<O): I(inicio>(numdatos-3))); I' *I strcpy(cadena,"Mínimo el dato : itoa(inicio+3,numero,lO); strcat(cadena,numero); strcpy(cadena2,"Máximo el dato : itoa(numdatos,numero, 1 0 ) ; strcat(cadena2,numero)i do E got oxy ( 35,6 1; gotoxy(l4,6); ' I ) ; ' I ) ; cpu t s ( 1; cputs("Hasta el dato X = 1 2 1 "1; scanf ( "Xd",&fin) ; if (fin<inicio+3) / * inicio.fin<=numdatos mensaje(cadena,Sl); else if (fin>numdatoo) mnsaje(cadena2,211; 3 while ((fin<inicio+3)! :(fin>nuondatos))t 'I nega t i vo=- 1 ; off Bet =O ; iniviniclo; iniy=O; finxsfin; f i ny=O ; for (i=inix;i<=finx; i++) { i f (finy < datosCill finy=datosCil; if ( i n i y > datoslil) iniy=datosíil; 3 if (lniy<O) off8ot=iníy*negrtivo; pantalla0; oscalaxy( ; dibuja( i ; espera( 1; clooograph0; 1 3 while ( (intervalo == s' 1 I I ( intervalo=='S' 1 ) ; ndatos=nunrdatoe/S; 3 /* fin do amplifica */ */ 232 /* /* /* obtiono lo8 valoros mínimo y mdximo para nueva oacala. * I $ 1 */ unicaescala( E int i,negativo,offsetx; off set x=numda tos+ 1 : negat i vo=-1; off set=O ; f iny=0 ; f i nx=numdatos*2; iniy=O; inix=O; for(canal=l;canal<=nurncanales;canal++) E for(i=O;i<MAXDATO;i++) datoscil-0; for(i=l;i<=numdatos;i++) da~osCnumdatos+~l=datoaCoffsetx-i~=xCilCcanallCtablal; for (i=inix;i<=finx; i++) I if ( f i n y < datosCill finy=datosCil; if ( i n i y > datosCi1) iniy=datosCil; 1 /* /* /* obtiene los valores mfnimo y máximo para la ESCALA UNICA. */ */ */ if ( i n i y < O i offset=iniy*negativo; 1 1 /* fin de unicaescala */ graf-todas( 1 E int i,offsetx; unicaescala( ; pantalla(); escalaxy( ; offsetx=nurndatos+l; for(canal=l;canai<=numcanales;canal++) I > dibuja( 1; delay(30001; espera( 1; clo8egraphO; 1 /* graf-todas */ graf ica( i E char opcion; canal=l; tabla=l; rnism-orcala=PALSO; v e n t a n a 0 ; gotoxy(32,5); cputs(’GRAF1CADOR X ve Y ” ) ; gotoxy(10,lO); printf(”¿ Desea graficar los %d canalos (s/n1 ? “,numcanales); opcion=getcht 1; 233 if ((opcion == I n q )::(opcion=='N')) C gotoxy( 5,lO 1; cputs("Escriba el número del canal que desea graficar: scanf ( "Xd",&canal 1 t 1 lena-tabla( 1 ; pantalla(): escalaxy( ) ; dibuja( 1 : amplifica0; / * fin de si e s s610 una gráfica * / ? ' I ) : gotoxy ( 1 0 , 1 4 1; printf("¿ Desea las %d gráficas simultkneamente (s/n) ? ',numcanales); opcion=getchO; if((opcion=='n')::(opcion=='N')) for(canal=l;canal<=numcanales:canal++) C llena-tabla( ) : pantalla0; escalaxy( 1 : dibuja( i ; amplifica( 1; e 1 se /* 1 ? /* 1 { 1 mi s m a e s c a la=C IERTO; graf-todas( ; fin de else, grafica todos l o a canales fin de grafica * / */ inicia( 1 C ventana( 1 gotoxy(32,S)i cputo("GRAF1CADOR X vs Y " ) : gotoxy(l7,lS); cputs("3i de6ea 0 6 1 0 una parte de la gráfica, despus den); gotoxy(17,14); cputs("ob6ervar la gráfica completa, anote los intorva1os"ii "1; gotoxy(l7,16); cputs("en X que desoo y proporci6nelos despus espera( ; 1 /* fin de inicia * / ... main( 1 { lee-archivo( 1; if ( a r c h o p e n )C 1 clrscr( i 1 / * fin de main inicia( ; grafica0; */ /* 234 GRAFICA */ /* i - +-----------------------------'----'-"'----------------------------II : Y1 I . I I I I I I I : : : : : I I I I I I I I I I I I : : I I I I I I I I I I 4 GRAFICADOR2 X vs Y I I 0I Este programa grafica puntos en XY,con la posibilidad de graficar únicamente una parte de la gráfica general, obtiene automaticamente la escala nesesaria ; la parte del monitor que es empleada como área de graficación es delimitada por los puntos siguientes, mismos que pueden ser ajustados deacuerdo a las nesesidades. Si se tienen varios grupos de datos (canales) pueden graficarse todos al mismo tiempo y a una misma escala, 6 c/u a su escala, en cuyo caso podrá graficarse solo un grupo de datos. y2 +------------------------------------------------------ ! : , I Xi II x2 I I I I + +-------------------------------------------------------------------- */ 9dof i ne +define +def i ne #dof ine +define +dof i ne +dof i ne +define 1 I I I #include #include #include #i nc 1 ude +include #include #include ! ! ! ! I I I I I I <stdlib.h> <stdio.h> <dos.h> <conio. h> <math.h> <string.h> <graphics.h> e s p e r a 0 while(!(kbhitO)); g e t c h 0 ; / * nllrmero de division08 del eje X NUHDIVX 10 NUMDIVY 10 / * nllrmero de divisiones del eje Y CIERTO 1 FALSO O MMUESTRAS 301 / * Mxiao de muootras por canal p EINCANAL 5 / * Waximo nQmoro de canales p * / MTABLA 2 */ */ */ typedof float MATRIZ3D tMMUESTRA~3C~CANAL3tUTABLAI; MATRI23D x; float datoatMMUESTRAS3 ; i n t arch o p e n ; i nt mi sins-escala ; int inix,finx; f lort i ni y, f i ny ; float unidadx,unidady; i nt off set ; I n t mxx. maxy ; int xl,x2; int yl,y2; /* dolimitan e1 rango en X y Y de loo puntos que 80 graficaran. /* /* /* /* /* corrimiento en píxeles del eje X */ */ */ delimitan el area disponible para trazar l a gráfica. y(x1,yl) origen(xl,y2) x(x2,y2) char conjunto~63=C'1',*2',",'4','0','5'); char almacenC4003; int numdatos,numcanalss,numtablas; int cana1,tabla; 235 */ */ */ leearchivo( 1 E FILE *fp; char entradaCl3l,tipoC2l,opcion; int i , j , k ; a r c h o p e n=F A LSO ; ventana( 1 ; gotoxy(23,3); cputs("GRAFICADOR2 X vs Y --- Lectura de Archivo" 1 ; strcpy(entrada, ");strcpy(tipo," " I ; gotoxyi 16,6) ; cputs( "Cual es el nombre del archivo de datos: " ) ; scanf ( " % s i,entrada ' 1; gotoxy(l6,8); cputs("Tipo binario c 1 1 " 1; gotoxy(l6,9); cputs("Tipo hexadecimal C23"); gotoxy(l6,lO); cputs("Tipo ascii C 31 ; do C gotoxyi16,12); cputs("Tec1ee su opción : "1; opcion=getch( 1; 1 while (memchr(conjunto,opcion,3)==NULLi; switch(opcion1 C case '1' : strcpy(tipo,"rb"); break; case '2' : strcpy(tipo,"rb"); break; case ' 3 ' : strcpy( tipo, "r*'1 ; break; I' 'I 1 if( (fp=fopen(entrada,tipo)) == NULL) C mensaje("ERR0R: Imposible leer archivo.",30); archopen=FALSO ; 1 else C for (i=O;i<HPiüESTRAS;i++) for( j=O; j<C(NCANAL;j++) for ( k=O ;k<MTABLA;k++ XI i 1 C j1 1 kI=O; gotoxy(l6,15); cputs("Los datos del archivo se a,maconar&n en - a " ) f gotoxy(16,16); cputs("PiATR1Z CNP Muestras3 CNP Canales3 CNP Tablal"); gotoxy( 16,181 ; cputa( I' Introduzca los valores correspondientes.. " 1; gotoxy(l6,20); cput8("NP PYUeStra8 = '1; 8aanf("%d",&nuudatos)) gotoxy(16,21); cputs("N9 Canales = "1; scanf("%d",&numcanales); gotoxy(l6,221; cputs("NQ Tablas = "1: scanf ( " X d " ,fnumtablasi ; . for (i=O;i<=numdatoo;i++) for(j=O;j<=numcanales;j++) for ( k=O; k<=numtablao;k++) froad( &xC i 1 C 3 3 C kl ,o i z o o f ( f loat 1,1 , fp) ; fcloseifp) ; archopenrCIERT0; if (xC03C11C11!=0) numdatos=x~03CllCll; / * asigna el numero do datos */ for(j=l;j<=numcanales;j++i for ( k=l: k<=numtablas;k++) xCO3 C j 3 C kl=0; 1 1 / * fin else * / / * f i n de leearchivo * / .- I - "e-*.* -236 I unicaescala( 1 graf-todas( 1 graf ica( 1 c char opcion; canal=l; tabla=l; mi smaescala=FALSO; ventana( 1; gotoxy(32,51; cputs("GRAFICADOR2 X vs Y " , ; gotoxy 10 * p r i n t f ( " ¿ Desea graf icar los %d canales (s/n1 ? numcanales) ; opcion=getchO; 'I, if ((opcion == 'n')::(opcion=='N')) i 'gotoxy(5 , l O 1; cputs("Escriba el ntirnero del canal que desea graficar: " 1 ; scanf ( "Yd",&canal 1 ; 1 lena-tabla( 1 ; pantalla0; escalaxy( 1; dibuja( 1 ; amplifica(); / * fin de si es s610 una gr&fica * / 1 elso i gotoxy( 10,141 ; printf("¿ Desea las Kd gr6ficas simultánoas~onte (s/n1 7 ",numcanalesli opcion=getch( 1 ; if( (opcion=='n' 1 : :(opcion=='N' 1 ) for(canal=l;canal<=numcanaloa;cnnal++) i 1 lena-tabla( 1 I pantalla(); oscalaxy( 1; dibuja(); amplifica0; 1 01 so C /* 1 S 1 /* mi sma-escala=C IERTO ; graf-todas( 1; fin do 0180, grafica todos los canalos fin do grafica * / */ inicia( 1 main( i 4 loo-archivo( 1 ; if ( a r c h o p e n ){ inicia( 1 ; graficao; 1 clrscr( 1; 1 / * fin de main NOTA: */ /* GRAFICA2 */ Las subrutinas de VENTANA,GRAFICA etc. son las mismas que Grafica. CONCLUSIONES El procesamiento digital de señales , no debe verse exclusivamente como u n conjunto de algoritmos computacionalee y ser así, una rama m&s de las matemáticas; hay que tener muy presente que la teoria del procesamiento digital de señales posee gran similitud con la teoría clásica de redes, filtrado , comunicaciones etc. de ahí su importancia y aplicaciones en ingeniería electrbnica. Mediante el Análisis de Series de Tiempo se establecen modelos matemáticos que permiten obtener la solucibn a problemas relacionados con el procesamiento de señales. Por su eficiencia, los algoritmos que se pueden generar para este análisis son de gran ayuda; ya quo permiten variar fácilmonte de poder estudiar las las condiciono8 del mismo , adom&. gráficas de los espmctros do la seAal , realizándose asi u n análisis m6s completo. En el análisis de soñalos discretas en tiempo , es nosesario establecor un acodolo eatendtico que permita obtonor las coatponentos espoctralos 40 las soñales. Este modelo puede obtonorce do1 análisis a partir do series , fntogralos y transformadas, ya soan do Pourior o de Sonoa y Cooenos. Una voz establocido diaho modolo se dosarrolla un d t o d o o algoritmo para efectuar el análisis; un ejomplo de osto os el algoritmo conocido COIO Transformada Discrota de Fourior, que aunque ofectivo , no os muy eficiente, por etocturr demasiadas oporacionos. Existen W t o d o o más eficientos para obtener las cornponontes espoctralos, aplicando: Transforwda Sono, Transformada Cosono o la Transformada Rápida do Fourier o F.F.T. El AnAlisi8 do Serios 40 Tiorpo tione además divor88s aplicacionos on ároas c o w : adainistracibn , tecnología do materialos, goofisica, acQstica, bptica, etc.. En muchas do estas áreas , la facilidad que ofroco ésto tipo do análisis *ostimar* rosultcdos para *simular* condiciono8 y/o para confiablos , permito efectuar invo8tigacionos 8ads completas en menor tiompo. 238 A P E N D I C E REFERENCIA BIBLIOGRAFICA 1: HARRY F. DAVIS Fourier Series & Orthogonal Function Dover Publications Inc. 1980. New York, U.S.A. 'I 2: 'I DOUGLAS F. ELLIOT & RAO K. RAMAHOAN Fast Tranaform " Academic Press Inc. U.S.A. 1989. 'I 3: QA40 1 D3.8 QA403.5 E4.4 ENDERS A. ROBINSON " Multichanel Time Serios " Ho 1den-Day I nc San Franci8~0, U.S.A. 1967. . 4: WILLIAM H.HAYT Jr. & JACK E. K E M E R L Y AnQlisis de Circuitos en Ingenieria " Mc G r r w Hill de, i4c)xico S.A. M x i c o D.F. 1975. TK454 H3.98 58 LEONARD S . BOBROW TK434 B3.818 " Analisis d e Circuitos El6ctricos Nueva Editorial Interawricana S . A . Nóxico D.F. 1983. 6: PETER BLOOMFIELD " Fourier Analysis of T i m Series: An Introduction " A. Wiley Now York U.S.A. 1976. . 7: 6: 9: DECONVOLUCION, with aplications in apectro8aopy " HERPIAN KOOPMANS LAMBERT ' The Espectral Analysis of Timo Serie8 Aaadotnlc Press Inc. Nww York U.S.A. 1974. MAX A . SOBEL 'I A l g e b r a 'I & NORBERT LERHER Prentice Hall Hispanoamericana S . A . México D.F. 1989. 239 QUSO B3.9 QC451.6 M.26 C.2 QA280 k6.4 QA154.2 S6.20 10 : 11: SOPHOCLES J. ORFANDIS .Optimun Signal Processisng PETER LANCASTER Theory of Matrices I' 12: TK5 102.5 07.4 QA180 13.5 " KENDALL E . ATKINSON A n itroduction to Analysis Jhon Wiley & Sons Inc. N e w York U . S . A . 1978. I' 13 : I' " QA297 A8.4 RALPH DEUTSCH System Analysis Techniques ' Prentice Hall Co. N.J. U.S.A 1969. QA402 GORDON S . KINO Acoustic Waves; devices, imaging and analog signal processing ' Prentice Hall Co. N.J. U.S.A. 1907. TK36 5 15 : SIMON HAYKIN " Adaptive Filter T.' Prentice Hall Co. N.J. U.S.A. 1986. TK7872 16 : MARIO ROSSI TK5981 R6.719 I' 14: I' 'I D4 K5.3 F5 WS.9 Acoustics and ~ i w t r o a o o u s t i c s" 240 REPEREWCIA DE ARCHIVOS EN DISCO Los discos que contienen todos los programas listos para ser ejecutados por la computadora son aquellos que en su etiqueta está escrito lo siguiente: Archivos Ejecutables *.EXE Archivos Ejecutables * . E X E Archivos Ejecutables *.EXE Disco O Disco 1 Disco 2 El disco con todos los programas fuente, escritos en lenguaje C es: Disco UN *.C Archivos Fuente Writ* fu6 El procesador de palabras- P ompleado para escribir todos los textos incluidos en o s t ~ manual; tanto el procesador como los archivos con los texto8 ootan en el disco: P.W. Disco 3 Textos m 1 ranual corploto 08th distribuido on archivos de La manera siguiente, todos on 0 1 directorio PROYECTO. . TEOCAST. USJUACAST . TECCALTT. I NTRODUC . Contenido 0 Introducción. Referencia Te6ricia del programa CIWT. Manual Opmrativo del programa CIUT. Roferoncia T4cnica del programa CAST. TEOFOUR USUAFOüR. TECFOUR. Roferencia Teórica del programa FOURIER. Manual Oporativo del programa FOURIER. Roforencia Tbcnica dol program ?OURIER. sER1m. Ihscripci6n W n e r a l y Campwwlio f&m Los programas para Analisis de Serios d e Tiempo. copIcLus. Conclusionos. APBMDICE Rmforoncia Bibliogrifior y lbfrronoia de Archivos en Disoo. M S R / u r . 17 de ooptiembre de 1993. 24 1 .. Volume in d r i v e B is PHOYECTO_.-DO Directory u f B:\ EXE EXE EIXE EXE JORMEM mYDv CNVTOP iINTfiE! C LLU I- NORM I PSQRT TRIANG COSP File(s) EXE EXE EXE EXE NORMAG PaLR-r SPUR TRIG 1:.: .., y. .1 . K"...XF:' .- EXE EXE EXE EXE CROSS FADDEJ MATRGN DRUM EXE EXE EXE EXE FOLD MU I : NE LOSTAB POLAR EXE EXE EXE SHAPER QUADCO MACRQGRL. DATOS EXE EXE EXE COSTR MACHU HEAT MED I C I ON C-XE k=xFEXE DA-I GRAFICEJ MUESTRAS EJEMPLOl EJEMPLO2 EJEMPLOS EXE DAT FAS GRAFICA EJEMPLO1 EJEMPLOl EJEMPLO2 EJEMPLOS EXE COE GHL FAS MAG I?:XE :!E X E: 62464 b y t e s f r e e Volume in drive E¡ is PROYECTO-,Di Directory of E:\ EXE EXE EXE SHAPE SMOOTH WCROEJ iEATEJ CCORRELA EXE DAT EXE SPIKER SP I KE BRAINY SISMOGRA EXE EXE UPI'T'OS MACRO2 CQEFICIE MUESTRAS DAT EXE COMPLEJO COHERE 45056 bytes f r e e DAT DRT EXE V01.ume i n d r i v e E i s PHOYEXTO-DZ Directory of E:\ HERC EGI CGA BG I EGAVGA GRAFIC2 E X E CAST EX€ FOURIER EJEMPLO1 SEN EJEMPLO1 COS EJEMPLO1 EJEMPLO2 COE EJEMPLO2 SEN EJEMPLO2 EJEMPLO2 GRL EJEMPLOS COE EJEMPLOS EJEMPLO3 FAS EJEMPLO3 ERL 27 File(s) 265216 bytes free BGI EX€ MAG COS SEN MAG COS Volume in drive B is PROYECTOPW Directory of . B:\PROYECTO .. I NTRODUC TEOFOUR TECCGST APEND I CE 1 1 File(si) USUCSCAST TEOCAST TECFOUR USUCSFOUR SER XES 236544 bytes free Volume in drive B is PROYECTO-FW Directory of PW PW COM B:\ PW PRG PW PROYECTO -77 Fil.e(s) ~ a 6 5 4 4bytes free MAC HLP PW PRI PW SET \. Apéndice 243