UNIVERSIDAD AUTONOMA METROPOLITANA I Z T AP A L APA

243
UNIVERSIDAD AUTONOMA METROPOLITANA I Z T AP A L APA INGENIERIA ELECTRONICA CCOMPUTA~ PROVECTO TERMINAL I Y I1 If' TRANSFORMADA COSENO Y TRANSFORMADA SENO *' '* TRANSFORMADA DE FOURIER '* ** PROGRAMAS PARA RNdLISIS DE SERIES DE TIoEIPO y" 84332730.

Transcript of UNIVERSIDAD AUTONOMA METROPOLITANA I Z T AP A L APA

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 C C O M P U T A ~

PROVECTO TERMINAL I Y I1

If' TRANSFORMADA COSENO Y TRANSFORMADA SENO *'

'* TRANSFORMADA DE FOURIER '*

** PROGRAMAS PARA RNdLISIS DE SERIES DE TIoEIPO y"

84332730.

- ---- I

a L

C O N T E N I D O

3

CAPITULO 1

CAPITULO 2

I' CAST : Transformada Seno y Coseno I'

Referencia Teórica 6

Manual Operativo 14

Referencia Técnica 31

I' FOURIER : Transformada Rápida de Fourier I'

Ref ere nc i a Te6 r i ca 56

Manual Operativo 67

Referencia Tdcnica 78

CAPITULO 3 I' Programas para Análisia de Series de Tiempo "

Descr ipc i 6n General 10 1

Compendio de Programas 102

Ejemplos 107

Listados de Programs 137

CONCLUSIONES 230

APENDICE

Referencia BibliogrAfica

Referencia de Archivos en Disco

2

239

24 1

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, fabricación, y comercializacibn de computadoras, son 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 en función del tiempo. Los problemas en diversas áreas, que 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 0s 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 de 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 un 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 8olwi6n 6e prOblOt~a8 suceptibles a ser tratado6 bajo modeloo do Sari08 de Tiempo, o como ejemplos de aplicación de 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~RMADA COSENO v TRANSFOR~*~ADA SENO "

--- REFEREN- TEOWeA

--- MANUAL OPERATIVO.

--- REFERENCIA TEcNtcA.

..

REFERENCIA TEORICA DEL PRoGRAlu CAST

INTRODUCCION

Una funció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 senoides ( conocida como su representación en serie de 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 trígondtríca 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 la 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 condiciones de frontor8 -8 a~ l lk lws para la soluci6n son 1 ) que tengan valor cero en la 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 Transformada Coseno , dende l a priarera emplea Bnicamente valores de seno para complotar la funcian , y la segunda 8610 emplea valores de coseno I on crontrrcrte con la F.F.T. la cual usa valores de funciones tanto seno como coseno.

6

.\

Referencia Teórica CAST

SERIE TRIGONOMETRICA DE FOURIER

Se dice que una funcibn f ( t ) es peri6dica s i existe un nifmero T real positivo ta l que

para toda I t @ . Si f ( t ) es periódica, entonces se dice que el tiempo T es el período de f í t ) .

Teorema. .de Fourier

Dada l a función real f ( t ) , que es peri6dica con período T segundos, existen números reales a. ,al ,bt ,az ,b2 , . . . ta les que :

f ( t ) = a0 + ai cos W O ~ + b, sen wot + an cos 2w0t + bz sen 2w0t + as cos Swot + bs sen 3wot + ...

o bien: +inf

n= 1 f ( t 1 = a. + Sulu ( a,, coa n w e t -t b, sen

donde wo = 2 p i / T radianes por segundo ' frecuencia fundamental ' o ' primera ararónioa frecuencia nuo se denomina ndsiam arm6nioa. anterior se conoce como Ser ig Triaon-trio aBla f ( t ) .

n w e t 1

se denomina ' de i ( t ) . La

La fbrmula Fourier !a

Las constantes a o , a i , b,, a i , b,... 80 denoarinan coeficientes de Fourier de f i t ) . La f 6 rm1 ~ 1 para 01 coeficiente de Fourier a. denorinado ' valor #dio bo t ( t ) o I componente de cd de f ( t ) ' es :

a. = - f ( t ) dt

donde loo limiters de l a integral pueden aub8tituiroe por cualquier intervalo 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 = - f(t) cos nwot dt ; para n = 1 , 2 , 3 , . . . T s. 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

n= 1 f(t) = a. + Sulu A, COI (nwot - O n )

2 2 donde A n an + bn

-1 Y O n = tan ( bm/an 1 .

8

Referencia Tdriaa CAST

SERIE COMPLEJA DE FOURIER

Aunque la serie trigonom6trica 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 1, empleando una representación en otra serie , conocida como serie ' exponencial I 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.

La ecuación clave en el desarrollo de la serie compleja de Fourier es la fórmula de Euler. Apartir de :

30 e = cos O + j sen O

- 90 e = cos O - j sen O

se obtiene:

donde wo - 2 pi / T . Esta es la re~re~entaaió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 fuíse 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

-)nu0 t C n - 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:

du = f ( x )

( 2 1

1 f(t) cos u(x-t)

- P i s+.” [ 1::: reescribiendo fuera a cos u ( x - t ) como:

cos ux . cos ut + sen ux sen ut

y separando:

< s >

f(x) = - 1 s’.” Fos P i

+ - P i 1 Fe” f(t1 coa ut

+ i n *

ux s - a m i

ux s““ f(t) son ut dt du . 1 - s n *

Definiendo dos nuevas funciones A ( u ) y B ( u ) cdmos

+ * n i

P i ‘ S - í n t

A(u) = - f(t) cos ut dt

B(u) = - f ( t ) sen ut dt Pf l s::::

10

.\ Rmfmxemcia Teórica CAST

es posible reescribir la ec.(3) como:

( 6 )

B(u) sen ux du . s + : n i A ( u i cos ux du + S "' 1 f ( x ) = -

Pi

donde la parte derecha puede ser comparada con:

< 7 ?

+inf +inf

n=O n= 1 f ( x ) = Su)(A An COS ux + SUMA B n sen ux

que es la forma de la expansi6n en Series de Fourier para un universo distinto de la función f. Similarmente es posible escribir la f en términos senos y cosenos, en la ec. ( 6 ) la 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

e l n i

Aíu) = 1 f ( t ) cos ut dt Pi O

y en este caso B(u) podria ser O. Esta e8 la ecuaci6n do la Transformada Coseno.

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. Esta es la ecuación de la Transformada Seno.

PROGRAMA PARA CALCULAR LAS TRANSFORMADAS COSENO Y SENO

Dado un operador finito o forma de onda W :

W = {ao, a ¶ , az , as, . . . , a. 3

el program CAST calcula la Transformada Coseno y Seno definidas como:

m

W=O C(f) = SüWl am cos (2.pi.f.)

m S ( f ) - S U U a. sin ( 2 . p i . fm i

S=O

l a amplitud y espectro de atraso de fase se definen como:

para cada f = O, ciclos por unidad de tiempo.

A f , 2 Af, 3 hf, n Af; dondenf = í 1/2n)

12

Referencia Tdrica CAST

B I BLIOGRAF I A

HARRY F. DAVIS " Fourier Series & Orthogonal Function 'I

Dover Publications Inc. New York, U.S.A. 1980.

DOUGLAS F. ELLIOT & RAO K. RAMAHOAN 'I Fast Transform I'

Academis Press Inc. U.S.A. 1989.

ENDERS A. ROBINSON 'I Multichanel Time Series 'I

Holden-Day Inc. San Francisco, U.S.A. 1967.

WILLIAM H.HAYT Jr. & JACK E. KEMMERLY I' Análisis de Circuitos en Ingeniería u

Mc Graw Hill de Mxico S.A. Mxico D.F. 1975.

KENDALL E. ATKINSON " An itroduction to Analysis " Jhon Wiley E Sons Inc. New York U.S.A. 1978.

MAX A. SOBEL & NORBERT LERNER ., Algebra I'

frentice Hall Hispanoamericana S.A. Mxico D.F. 1989.

'I MS-DOS, User's Guide 'I

Microsoft Corporation U.S.A. 1987.

HERBERT SCHI LDT " C: Manual de Usuario I'

Mc Graw Hill / Interamoricana de España S.A. Madrid Esaña 1989.

" Turbo C++ , User's Guide u

Borland International Inc. U.S.A 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 los 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, al, az, as, ...) a,) el programa CAST calcula l a Transformada Coseno y Seno definidas como:

m

s=PQ C(f) = SUIA a. cos í2*pi*fm)

m

S=O s(f) = S U U a, sin (2.pi.f,)

la amplitud y espectro de atraso de faso 80 definen como:

14

-- I

)(anual OseeratAivo CASI'

1 1 1 USO DEL PROGRAMA CAST

A continuación se muestra una serie de acciones, las cuales p4mTten- 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 estar en el disco de trabajo . Estos archivos pueden reconocerse por el "nombre" asignado por el usuario y con las extenciones: .COE, .SEN, .COS, .MAG, OFAS, *GRL- < 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á un &!& 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 OPS r a t i v o CA!3T

... u n o d o l ~ r o ~ r a m a . . .

G Entonces aparecerá el Menif Principal completo, que presenta las opciones siguientes:

1 -- CALCULA TRANSFORMADA SENO Y COSENO 2 -- MUESTRA RESULTADOS 3 -- GRAFICA RESULTADOS 4 -- IHPRIME RESULTADOS 5 -- LEEIESCRIBE AKCHIVOS O -- TERMINAR Introduzca su Opción => -

H Se deberá elegir la opción 1; para introducir los 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:

I

J

1 NO HAY DATOS DISPONIBLES I

Pulse cualquier tecla para continuar.

Si se desea ver el mnoajo do &Y- dol Men6 Principal pulse y mostrar& 0 1 ai.nerjo que apareci6 a l principio dol program 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.

Después de haber introducido los 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 . . .

K A continuacibn se describen cada una de opciones presentadas en e1 MenG Principal.

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:

7 El número de coeficientme do l a onda U ea = - 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 loa n cooficrimntsr de ia onda U.

SO -6 5 28 68

6 -9 -2

.

Los valores de la8 o~fioionter pueden ser: enteros, decimales, positivos o nqrt ivor .

Después el program 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, es 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 S o n o y C o m m n o . . .

Escriba los coeficientes de TCOS y TSEN es = - 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, bgnitud 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

F r'

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 hicamente un intervalo especifico.

Como el espectro es siwOtrico y de la Transformada Seno y Coseno 6610 se obtiene la mitad de 61, par% efectos d e

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.

oraficaci¿n, e l nomero d s o w f i a i a ntea ptaficad SE !?&

19

.

Manual ODerativo CAST

Se mostrará el Menú de Graficar y se elegir& una de las opc i ones.

It 1

8 C A S T - TRANSFORMADA SENO y COSENO

1 -- GRAFICA TRANSFORMADA SENO 2 -- GRAFICA TRANSFORMADA COSENO 3 -- GRAFICA MAGNITUD 4 -- GRAFICA FASE O -- MENU PRINCIPAL Introduzca su Opci6n => -

Si se 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 T

De a datos, seleccione el intervalo e n X quo desea graficar.

A partir dst dato X = ???

Hasta el dato X = ???

50

125

El dato 'i' a partir del cual 69 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.

Cada vez uue 88 termine d a araficaf, m ~ g & , w 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ñ Imurima ??ecru1 tado8, y se elegirá la opción deseada.

21

---

Ecanual Operativa CAST

C A S T - TRANSFORMADA SENO y COSENO

1 -- IMPRIME COEFICIENTES W 2 -- IMPRIME TRANSFORMADA SENO 3 -- IMPRIME TRANSFORMADA COSENO 4 -- IMPRIME MAGNITUD 5 -- IMPRIME FASE Q -- 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á:

¿ Está 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 ImDrim Rm8 u1 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 un 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á un 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 con coeficientes de onda U. ' nombre ' . COE Archivo con coef. de Transformada Seno. ' nombre ' .SEN Archivo con coef. de Transformada Coseno. 'nombre'.COS Archivo con coeficientes de Magnitud. ' nombre' .MAG Archivo con coeficientes de Fase. ' nombre ' . FA3 Archivo con coef. de Transf. Seno, Coseno 'nombre'.GRL

Magnitud y Fase.

Este arupo dearchivos 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 de 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 &BO ha 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 de las dos operaciones:

C A S T - TRANSFORMADA SENO y COSENO

1 -- LEE ARCHIVO3 2 -- ESCRIBE ARCHIVO3 O -- 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 - L O O I L S C ~ S ~ O n r c h i v o s . . .

C A S T --- Lectura de Datos de Disco

Cual es el nombra del archiva de datos:

Tipo binario c 11 Tipo hexadecimal C23 Tipo ascii C31

Teclee s u epci16n : -

Si fué posible leer todo e l grupo dA archivos, regresará al MenQ de Leer y Escribir Archivos , donde se puede pasar al Meno Principal . Recuerde que el tino deberá ser el mismo, 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 tipo de archivo.

C A S T --- Escritura de Datos en Disco

C u a l es el nmnbre del arohivo de datort

Tipo binnrio c 11 Tipo ascii 133 Tipo hexadecimal C 2 3

Teclee su opción : -

24

.. -

Uanuai Operativo CAST

. . . 8 - L o o i L m c r l C o A r c k t v o i . . .

Despues de proporcionar nombre (SIN 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 negativamente ( In' o ' N ' i ; regresando al Men6 d a Legr y Escribir Archivos sin escribir archivos, ni alterar los ya existentes.

Si contest6 afirmativamente, se escribirán los archivos correspondientes , y s610 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 un archivo con: los coeficientes de ambas transformadas , la magnitud y la fase, esto lo efectQa en la opción 2 do1 dA LeoíEecribe &chí VOS.

Otro programa complerasntario es el program graficardor GRAPICA, modiante el cual es posible ver las dos grhficas simult6noaaiente ( Transformada Seno y Transformada Cosono 1 , para poder compararlas.

Para e l l o basta correr el programa ORAPICA el cual 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 ; es decir por ejemplo : " EJEMPL02.GRL " . Y a continuación introducir loa siguientes datos:

25

.. Manual Operativo CAST

GRAFICADOX --- x vs. Y

Cual es el nombre del archivo de datos: e jemp 1 02. g r 1

Tipo binario c 11 Tipo hexadecimal 121 Tipo ascii 131

Teclee su opción : _.

Los datos se almacenarán en l a

NP nuestras = NQ Canal - NQ Tabla -

- -

1

300 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 s610 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:

HQ lluestras = #n Canal - NQ Tabla -

- -

300 4 1

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 C A S T - T r a n s f o r m a d a C o s e n o y Seno

TABLA DE C O E F I C I E N T E S W

TRANSFORMADA SENO

S C11= C).(XKK) C Cal= 2.5569 S C31= 5.1106 S C41= 7.6578 S C 5 3 - 10.1952 S C63- 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

S C371= 6(:).257(3 S CS81= 59.8620 S C391= 59.2888 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 C491= 43.2427 S C501= 40.5935 S C511= 37.7598 S C521= 34.7452 S C531= 31.5539 S C541= 28.1907 S C553= 24.6612 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

c cmi= 6 o . i ~ ~ s c341= 60.4i45 s C ~ S I = 60.5289 s ~ 3 6 1 - ~3.4779

S C851= -11r1.4187 S C861= -113.9544 S S C891= -123.4443 S C901= -126.2111 S S C931= -133.2409 C C941= -135.1454 S S C971= -139.5057 S C981= -140.5032 S S C101'1= -142.1298 S C1021= -i42.2222 S C1051= -141.1917 S C1061= -140.4266 S C1091= -136.9436 S C1101= -135.4084 S C1131= -129.7842 S C1141= -127.5973

S C1211= -108.8377 S C12212 -109.7778 S Cl251= -96.2375 S C1261= -92.9682 S S C1293= -83.0190 S C1301= -79.6840 S S C1331= -69.7354 S C1341= -66.4627 S S C1371= -56.8692 S C1381= -53.7663 S S C1411= -44.8152 S C1421= -41.9656 S S C1451= -33.8710 C C1461= -31.3339 S S C1491= -24,2372 S C1501= -22.0481 S S C1531= -16.0230 S C1541= -14.1963 E;

S C1171= -120.2225 S C1181= -117.5237

C871= -117.3091 S C883= -120.4748 C911= -128.7693 S C921= -131.1139 C951= -136.8259 S C961= -138.2790 C991= -141.2723 S C1001= -141.8139 S C1031= -142.0940 S C1(>41= -141.7; S C1071= -139.4595 S C1081= -138.2': S C1113= -133.6982 S C1121= -131.8: S C1151= -125.2686 S Ellb]= -122.8 S C1191= -114.7202 S C1261= -111.8. S C1231= -102.6515 S C1241= -99.46: C1271= -89.6496 C1313= -76.3533 C1351= -63.2233 C1391= -50.7198 C1431= -39.1896 C1471= -28.8814 C1511= -19.9491 C1551= -12.4602

S C1571= -9.2577 S C1611= -3.9051 S C1651= 0.1209 S C1691= 2.9413 S C1731= 4.6976 S C1771= 5.5413 S C1817= 5.6252 S C1851= 5.0980 s c1891= 4. 10(:)8 S C1937= 2.7671 S C1971= 1.2231

S C1981= -7.7898 S Clh2It -2.7785 s C1661= (2.9338 S C1701= 3.4743 S C1741= 4.9881 S C1781= 5.6276 S C1821= 5.3451 S C1863= 4.8874 S C19(:)1= 3.7939 s C ~ Y ~ I = 2.3960 S C1981= 0.8185

S C1591= -6.4693 C C1631= -1.7332 S C1673= 1.6733 S C1711= 3.9431 C C1751= 5.2239 S C1791= 5.6688 S C1831= 5.4290 S C1871= 4.6496 C C1911= 3.4680 S C1951= 2.0137 s C1991= (3.4102

S S S S S S S S S S S

s C1281= -84.3503 S C1321= -73.0346 S C13631 -60.0235 S C1401= -47.7346 S C1441= -36.4904 S C1481- -26.5153

S C1561= -10.8142 s C1521= -17.9406

C1601= -5.1149 C1641= -0.7674 C1681= 2.3417 C1721= 4.3500 C1761= 5.4075 C1803= 5.6673 C1841= 5.2792 C1881= 4.3867 C1921= 3.1251 C 1961= 1.6:?L1 c 2(:)0 I = t j . c:ic:tc:> 1

Prnqrama CAST - T ~ a n s f a r m a d a Coseno y Seno

T R A N C FOR MA U A C C1 SE I'd O

r3 1::Ll= -j"h.<:jC)<:)(S C 1.21= 75.9429 C C 3 J = '75.7717 C C41= 75.4863 C: [ S I = 75.(3863 i-; [6]= 74..573(3 C [71= 73,9429 C C81= -73.1989 il [9]= 72.3398 C [ j . ( j f = 71.3655 C C11]= 7(:1.2756 f: C123= 69.(:)7<:)2 C ClSI=-67.7490 C C141= 66.3122 C C151= 64.7594 C Cl61= 63.0924 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 [:z(j] = 28 <1 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

4.5478 C C387= i:).T61€3 C C591= -3.6490 C C 4 0 3 = --6.3758 I: i r 7 -1 = 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 C693= -73.9484 C C703= -73.6026 C C711= -73.0196 C C721= -72.1967 C C731= -71.1360 C C741= -69.8378 C C751= -68.3038 C C761= -66.5366 C C771= -64.5394 C C781= -62.3163 C C791= -59.8721 C C801= -57.2125 C C811= -54.3435 C C821= -51.2723 C C831= -48.0(:)64 C C841= -44.5541 C C851= -40.9241 C C861= -37.1259 C C871= -33.1694 C E881= -29.0649 C C891= -24.8232 C C9(31= -20.4555 C C911= -15.9733 C C921= -11.3883 C C931= -6.7127 C C941= -1.9586 C C953= 2.8616 C C961= 7.7356 C C971= 12.6508 C C981= 17.5947 C C991= 22.5551 C C1001= 27.5197 C Ci011= 32.4763 C C1021= 37.4130 C C1031= 42.3182 C C1041= 47.1806 C C1(351= 51.9890 C C1(:)61= 56.7329 C C1071= 61,41:)2(3 C C1081= 65.9865 C C1(:)91= 70.4770 C C11Cil= 74.8647 C C1111= 79.1412 C C1121= 83.2988 C C1131= 87.3301 C C1141= 91.2286 C C1151= 94.9881 C C1161= 98.6032 C C1171= 102.(:)690 C C1181= 105.3811 C C1191= 108.5359 C C1201= 111.5303 C C1211= 114.3619 C C1221= 117.0287 C C1231= 119.5295 C C1241= 121.8634 C C1251= 124.0302 C C1261= 126.C1304 C C1271= 127.8647 C C1281= 129.5344 C [1291= 131.0414 C C1301= 132.3880 C C1311= 133.5768 C C1321= 134.61(:)8 C C1.331= 135.4936 C C1343= 136.2289 C C 1 3 5 3 = 136.8208 C i1361= 137.2738 C L1373= 137.5924 C C1381= 137.7816 C C1391= 137.8463 C C14(31= 137.7920 C C1411= 137.6239 C C1421= 137.3477 C C1431= 136.9689 C C1441= 136.4931 C C1451= 135.9262 C C1461= 135.2739 C C1471= 134.5418 C C1481= 133.7359 C C1491= 132.8616 C C1501= 131.9247 C C1511= 130.9307 C C1521= 129.8850 C C1531= 128.7930 C C1541= 127.6599 C C1551= 126.4908 C C1561= 125.2906 C C1571= 124.0642 C C1581= 122.8161 C C1591= 121.5508 C C1661= 120.2726 C C1611= 118.9857 C C1621= 117.6939 C C1631= 116.4011 C C1641= 115.11(38 C C1651= 113.8264 C C1661= 112.5511 C C1671= 111,2880 C C1681= 110.04OrJ C C1691= 108.8097 C C1701= 107.5997 C [1711= 106.4123 C C1721= 105.2448 C C1731= 104.1141 C C1741= 103.0074 C C1751= 101.9312 C C1761= 100.8872 C C1771= 99.8770 C C1781= 98.9019 C C1791= 97.9632 C E1801= 97,0623 C C1811= 96.1995 C C1821= 95.3765 C C1831= 94.5940 C C1841= 93.8527 C C1851= 93.1534 C C1861= 911.4967 C C1871= 91.8832 C C1881= 91.3133 C C1891= 90.7875 C C1901= 90.3(:)63 C C1911= 89.8700 C E1921= 89.4788 C C1931= 89.1331 C C1941= 88.8330 C C1951= 88.5788 C C1961= 88.3706

J ' -

c C651= -72.9916 c C661= -73.5759 c C671= -'73.9324 c C681= -74.0576

C C1.971= 88.2085 C C1981= 88.(:1927 C C1991= 88.0232 C [ 200 ] = 88 . (:@(:I(:)

Programa CAST - Transformada Coseno y Seno

COEFICIENTES DE MAGNITUD

A E l l = 76.CXiO A C21= 75.986 A C31= 7S.944 A C41= 75.8'74 A C53= 75.775 A C63= 75.649 A C71= 75.494 A C81= 75.312 A CY]= 75.101 A El(: ) '?= 74.863 A C111= 74.597 A C121= 74.3(32 A C131= 73.981 A E14.1= 73.632 A Cl51= 73.255 A C161= 72.853 A C171= 72.423 A C183= 71.968 A C191= 71.488 A C201= 70.984 A C213= 70.457 A EX?]= 69.9O7 A C231= 69,336 A C243= 68.746 A C251= 60.137 A C 2 6 3 = 67.513 A C271= 66.875 A C281= 66.226 A [ 2 9 3 = 65.568 6 [3í:i]=: 64.9Ci5 A [31]= 64.239 A [7;2]= 63.575 FI C J Z ~ = 62.916 A C347= 62.267 A c351= 61.633 A C363= 61.018 A L371= 60.428 A C383= 59.870 A C391= 59.348 A C4(31= 58.870 A L4¶.1= 58.441 A C421= 58.069 A C431= 57.761 A C441= 57.523 A c451= 57.3632 A c461= 57.284 a C477= 57.295 A c481= 57.400 A t491= 57.606 A C501= 57.915 A C511= 58.331 A C521= 58.856 A C531= 59.493 A C541= 60.241 A C551= 61.101 A C561= 62.071 A C571= 63.149 A C581= 64.532 A C591= 65.617 A C6C)I= 67.00C) A C611= 68.476 A C621= 70.(:)40 A C631= 71.687 A C641= 73.411 A C651= 75.207 A C667= 77.(:)68 A C671= 78.990 A C681= 80.966 A C691= 82.991 A C701= 85.058 A C711= 87.163 A C721= 89.3CK) A C731= 91.463 A C741= 93.648 A C751= 95.849 A C761= 98.062 A C771= 100.281 A C781= 102.502 A C791= 104.722 A C8C)l= 106.934 A C811= 109.136 A C821= 111.323 A C831= 113.492 A C841= 115.638 A C853= 117.759 A C861= 119.850 A C871= 121.908 A C881= 123.931 A C891= 125.915 A C901= 127.838 A C911= 129.756 A C921= 131.608 A C931= 133.409 A C941= 135.16C) A C951= 136.856 A C961= 138.496 A C971= 14ci.078 A C983= 141.601 A C991= 143.061 A C1001= 144.459 A C1011= 145.793 A C1021= 147.061 A C1031= 148.262 A C1041= 149.395 A C1051= 150.459 A C1061= 151.454 A C1071= 152.378 A C1081= 153.232 A C1091= 154.015 A C1101= 154.726 A C1111= 155.366 A C1121= 155.934 A C1131= 156,430 A C1141= 156.856 A C1151= 157.210 A Cll61= 157.494 A C1171= 157.707 A C1181= 157.851 A C1191= 157.926 A C1201= 157.954 A C1211= 157.874 A C1221= 157.749 A C1231= 157.598 A C1241= 157.304 A C1251= 156.988 A C1261= 156.610 A C1271= 156.173 A C1281= 155.678 A C1291= 155.126 A C1301= 154.519 A C1311= 153.859 A C1321= 153.147 A C1331= 152.386 A C1343= 151.577 A C1351= 150.722 A C1361= 149.823 A C1371= 148.882 A C1381= 147.901 A C1391= 146.881 A C1401= 145.826 Ft C1413= 144.737 A C1421= 143.616 A C1431= 142.465 A C1441= 141.287 A C1451= 140.083 A C1461= 138.855 A C1471= 137.607 A C1481= 136.339 A C1491= 135.054 A E1501= 133.754 A C1511= 132.442 A C1521= 131.í18 R C1531= 129.786 A C1541= 128.447 A C1551= 127.103 A C1561= 125.756 CS Ci571= 124.409 A C1581= 123.063 A C1591= 121.720 A C16(:)1= 120.381 A C1611= 119.050 A C1621= 117.727 A C1631= 116.414 A C1641= 115.113 A C1651= 113.826 A C1661= 112.555 A C1671= 111.301 A Cl681= 110.065 A C1691= 108.849 A C1701= 107.656 A Cl711= 106.485 c\ C17211= 105.340 A C1731= 104.220 A E1741= 103.128 A C1751= 102.065 A C1761= 101.032 A C1771-1 1OC).031 A C178J= 99.062 67 C1791= 98.127 A C1801= 97.227 A C1811= 96.364 A C1821= 95.538 A C1831= 94.750 A C1841- 94.001 A C1851= 93.293 A C1861= 92.626 A C1871= 92.(9(:)1 A C18€31= 91.419 A C1891= 90.880 A C19(:)1= 90.336 A C1911= 89.937 A C1923= 89.533 A C1931= 89.176 A C1941= 88.865 A C1951= 88.602 A C1961= 88.385 A C1971= 88.217 A C19RI= 88.097 A C1991= 88.024 A C2001= 88.0(:)(:)

Proyrama CAST - Transformada Coseno y Seno

F C25]= F C291=

F [ 3 7 ] = F C411= F C451= F c493= F C531= F c 5 7 3 = F C¿i I= F C 6 5 J = F C691= F C731= F C771= F C811= F C851= F C891= F C931= F C971= F ClC)lI= F Cl051= F C1091= F Cll31= F C1171= i= c1211= F C1251= F El291= F C1331= F C1371= F C1411= F C1451= F C1491= F C1531= F C1571= F C1611= F C1651= F C1691= F C1731= F C1771= F C1811= F C1851= F C1893= F C1931= F C1971=

F [3S]=

1:) . 887 1 * (37 1 1.275 1.495 1.741 3 . (:I (j y 2 * 293 2.583 2.867 3.136 s. 385 3.613 3.821 4 . (2 1 3 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

F F F F f= F F F F F F F F F F F F F F

[263= [3(j] z ~ 3 4 3 ~ C383= [423= C4hl= c5i33= C54I= C581- C623= C661= C 70 1 = c741= C781= C821= C861= C ~ O I = [941= C981=

(3.307 F C111= 0.45(:) F C151= (1) . 6(33 F C 19 1 = 0.759 F c231= (j.932 F C271= 1.119 F C311= 1.326 F C351= 1.559 F c391= 1.806 F C431= 2.078 F C471= 2.365 F C511= 2.655 F C551= 2.936 F C591= 3.2tjO F [&I= 3.444 F C671= 3.667 F C711= 3.871 F t751= 4.059 F C791= 4.234 F C831= 4.397 F C871= 4.552 F C913= 4.698 F C991=

0.342 F C121= 0.486 F C161= 0.639 F C 2 0 1 = 0.8(:)1 F C24:I= (:).Y77 F' C281= 1.169 F C 3 2 3 = 1.381 F C361= 1.615 F C401= 1.872 F C441= 2.149 F C481= c) ~ ~ 4 3 8 F C921= 2.726 F C561= 3.0ij4 F C601= 3.263 F C641= 3.501 F C681= 3.719 F C721= 3.919 F C761= 4.104 F C8Csl= 4.276 F C841= 4.437 F C881= 4.589 F C921= 4.733 F C961=

F C1021= F C1061= F CllC)I= F C1141= F Cl181= F Cl221= F C1261= F C1301= F C1341= F C1381= F C1421= F C1461= F C1501= F C1541= F C1581= F C1621= F C1661= F C1701= F C1743= F C1781= F C1821= F CiBáI= F C1901= F C1941= F C1981=

4.837 F C993= 4.871 F C1001= 4.904 4.970 5.096 5.217 5.333 5.443 5.548. 5.648 5.741 5.829 5.911 5 . 987 6.058 6.118 6.172 6.220 6.260 6.291 6.315 6.332 6.540 6.341 6.336 6.325 6.310 6.292

F C1031= 5.002 F C1041= F C1071= 5.127 F C1081= F iCllll= 5.247 F C1121= F C1151= 5.361 F C1161= F i1193= 5.470 F C1201= F C1231= 5.574 F C1241= F C1271= 5.672 F C1283= F C1311= 5.764 F C1321= F C1353= 5.850 F C1361= F L1391= 5.931 F Cl4(jl= F C1433= 6.005 F C1441= F C1473= 6.072 F t1481= F C1511= 6.132 F C1521= F C1591= 6.185 F C1561= F C1591= 6.231 F C1601= F C1631= 6.268 F E1641= F C1671= 6.298 F C1681= F C1711= 6.320 F C1721= F f1753= 6.334 F C1761= F C1791= 6.341 F C1801= F C1831- 6.341 F C1841= F C1871= 6.334 F C1881= F C1911= 6.322 F Cl921= F C1951= 6.306 F C1961= F C1991= 6.288 F C2003=

5 . (1134 5.158 5.276 5.389 5.496 5.599 5.695 5.786 5.871 5 . 950

6.087 6.146 6.197 6.241 6 . 277 6.304 6.324 6.337 6.342 6.339 6.331 6.318 6 . 3(22 6.283

6.022

--I ------ nn

REFERENCIA TECNICA DEL PROGRAMA CAST

SECUENCIA Y DESCRIPCION DE SUBRUTINAS

complejo suma(a,b) Funciones para operaciones aritmhticas con nheros complejos.

complejo resta(a,b)

comp le jo mu 1 t ( a, b 1

c omp 1 e j o 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.

ejesí 1

escalaxyi 1

dibuja( 1

Encuentra loo valores máximo y mínimo de Y, para calcular l a escala.

Traza 108 ejes XY , y el nombre de l a grbfica.

Obtine las escala en pixoleo de l oa ejes X y Y para poder graficar c/u de los puntos.

Grafica un punto, traza una línea con el punto anterior y otra con el eje X.

31

\ \

1 ""Y

ReferarrcLa Técnica CAST

amplifica( 1

rutina-grafica( 1

Graficar6 un intervalo de datos específico, ampliando la escala escala.

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 LA TRANSFORMADA SENO Y COSENO.

mcoef ( 1 Muestra los 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 Imprim 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(

graf ica( 1

Men6 para imprimir los datos.

MenQ para graficar los datos.

archi vos( haydatos 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) muestra0; break;

case ' 3 ' : if (calculado) graficao; break;

case '4': if (calculado) impriaae0; break;

case '5': if (!calculado) inicio = CIERTO; archivos(Lcalcu1ado); break;

1 if ( (?calculado) 6cb ( (eJecuta!='O')&&(ejecuta!n") 1 1

mn6aje(*NO HAY DATOS DISPONíBLESw,24); inicio = FALSO;

3 while (ejecuta!='O'); ventana( 1 ;clrscr( 1 ;

1 Fin de rutina principal main().

DEFINICION DE VARIABLES Y RUTINA PARA

W =t

LW = LT = TCOS = l'SIN = AMPLITUD = FASE =

CALCULAR LAS TRANSFORMADAS COSENO Y SENO.

Onda (aO, al, a2, ... ,am); Longitud de W = -1; Longitud de las Transformadas de Senos y Cosenosi Transformada Coseno; Transformada Seno; Coeficientes de Amplitud; Coeficientes de Fase;

33

..

Referencia Tbcnica CAST

COMIENZA

dang=PI/( It-1); angulo=O;

Polyev

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++) C

j=lw-ii+l; a= x/a + wC jl ;

1 Fin de polyev tcosc il=a.re; tsenCil=a.im; angu¡o=angulo+dang;

1

PARA (i=l;i<=lt;i++) {

Polar

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

SI (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 ) ;

3 1

Fin do polar

pj=o; PARA (i=2;i<=lt;i++) €

Drum

SI ( (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; 1 fasetil=faseCil+pj;

3 Fin de drum

TERM I NA

34

.

* CAST Programa para calcular las Transformadas de Seno y Coseno a partir de los coeficientes de una onda.

W = Onda (aO, al, a2, ... ,am); LW = Longitud de W = m+l; LT = Longitud de las Transformadas de Senos y Cosenos;

TCOS = Transformada Coseno; TSIN = Transformada Seno; AMPLITUD = Coeficientes de Amplitud; FASE = Coeficientes de Fase;

i nc 1 ude include i nc 1 ude include i nc 1 ude include include i nc lude

<stdlib.h> <stdio. h> <math. h> <mem. h> (conio. h> <string.h> (ctype. h> <graphics. h>

iefine NUMDIVX 10 iefine NUMDIVY 10 iefine CIERTO 1 iofine FALSO O

/ * nhmero de divisiones del eje X * / / * n\limero de divisiones del eje Y * /

iefine MAX 21 iefine HAXCOEF 301 ief ine HAXDATO 6 10 iefine PI 3.141592654 iefine espera0 while(!(kbhitO)); getch0;

ypodef struct {float re, im;) complejo; / * definici6n de NQmero Complejo * / -4+?Jo x,a; loat wCWAXl,tcos~HAXCOEF3,tsen~HAXCO~Fl,~~litu~~HAXCOEFl,faseC~XCOEFl; loat dang,angulo; nt lw,lt;

loat datos[MAXDATOI; nt archopen, 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;

/* 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 eje X * / / * delimitan el area disponible para * / / * trazar la grhfica. * / / * y(x1,yl) origen(x1,yl) x(x2,y2) * / / * colores para Menh Principal y Ayudas * /

har conjunto[61=~'1','2','3~,~4','0','5'~; hat letrerosC53 C 101 ; / * nombre de la grhfica * / har almacenCS603; / * alaracena el área de ventana; máximo * / nt inicio; har tecla; / * 8 renglones o 80 x 7 caracteres. * /

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 * / ,mp le 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; c.im=O; 3 return c;

olores( 1

har color;

clrscr( 1 i gotoxy(21,lS) ; cputs("¿ USARA MONITOR A COLOR Csínl ? " I ; colorogotch0; if ((color=='s' : :(color=='J' 11 {

clarol=l4; / * amarillo * / obscurol=l ; /* azul * / claro2=11; / * cian claro * / obscuro2=4 ; / * rojo * / c . XI---- ac:

else C clarol=lS; / * blanco * / obscuro2-0; / * negro * / c laro2=2; / * verde * / obscuro2=4; / * rojo * /

I 1 / * fin de colores * / ioid margen( 1

etruct text-info r; int i,alto,largo;

/ * enmarca la ventana que se ecuentra activa * /

gettextinfo(fr1; largo=r.winright-r.winleft; alto=r.winbottom-r.wintop; gotoxy( l,alto+l); putch(OxcB1; for(i=l;i<largo;i++) putch(Oxcd1; putch(0xbc); gotoxy( 1,alto-1); insline0; gotoxy( 1,li ; putch(Oxc9i ; for(i=l;i<largo;i++) putch(0xcd); putch(0xbb); pu tc h ( O xba ;

for(i=2;i<alto;i++i€ gotoxy(largo+l,ii;

I gotoxy(largo+l,altoi; putch(0xbai ; gotoxy(2,2) ;

putch ( O xba 1 ; putch ( Oxba i ;

I/* fin de margen * / ventana( i / * abre una ventana del tamaño de * / € clrscr0; / * todo e1 monitor, y l a enmarca * /

window(1,1,80,25); textbackground(claro2+BLíNK) ; textcolor (obscuro21 ; clrscr( i ; margen( i ;

1 /* fin do ventana * / menaaje(cadona,largoi / * abre una ventana sobre el 'cadena' y asigna * / char *cadena; I * un carater del tsol-e;do EL l a vir. 'tecla' * / int largo:

s t ruc t text-i n f o a ; /* 'a' datos de ventana actual */ struct text-info n; / * 'e' dato8 de ventana nuova, por abrir * / int x,y;

c

get text f nf oí 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.wintop=y; n . wi nr i gh t=x+ 1 ar go+3 ; 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 ; 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):

textcolor (obscuroí i ;

yuda( nivel nt nivel;

struct text-info a; struct text-info n; int 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 gh 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); text bac kg r ound ( c 1 aro 1 1 ; clrscr( 1; margen( 1 ;

textcolor (obscuro1 1 ;

switch (nivel) I / * mostrará mensaje deacuerdo al nivel de ayuda * / case O: j=2; / * 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

gotoxy (3 , j++ ) ;cputs ( "Para cualquier gráfica seleccionada, puede graficar "1; gotoxy (3 , j++ ) ;cputs ( "s610 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 nhero de coef. " I : gotoxy(3,~++);cputs("gtaticados es el DOBLE, permitiendo ver el espectro "1; gotoxy(3,j++);cputsí"completo. El nomero de coef. permanece sin cambio. "1;

break;

/ * menu archivo * / case 5: j=2;

gotoxyí3,j++);cputs("Para leor o oocribir de1 disco los 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 SIN 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 ;

int error = -1; char path-driverC3 = " ' I :

/ * inicializa el modo gráfico * /

detectgraph(&graphdriver,&graphmode); initgraph(Egraphdriver,&graphmodo,path-driver);

error = graphresulto; if ( error < O 1 C

clrscr(); printf("Error en initgraph : Ws",grapherrormsg(error)); exit(1);

1

cleardevice( ; maxx=getmaxx( 1 ; maxy=getmaxy( 1 ;

~1140; yl=iS; x2= 16 ; y2=25;

rectangle(O,O,maxx,maxy); rectangle(2,2,maxx-2,maxy-2);

1 / * fin de pantalla * / max-minimo( 1 c int i,negátivo;

/ * obtiene el m6ximo de X * / / * obtiene el máximo de Y * /

/ * define lo separado que e6tar6n los ejes * / / * del marco de la pantalla. * /

offsetm0; negativo=-1; iniy=O; f i ny=O ; i n i w 0 ; finx=nuadatos/2;

for (i=inix; i<=finx; i++) I if (finy < datoaíil) finy=datosCil; if (iniy > datosEil) iniy=datosCil;

1 if (iniy<O) offset=iniy*negativo;

finx=numdatos;

1 / * fin de max-mínimo * / e jesi 1 {

1 i ne ( xi, y1 , xi, maxy-y2 ; 1 i ne( xl-1 , y1 , xi-1 , maxy-y2+1) ;

/ * marco del monitor * /

/ * solo buscara en la mitad * / / * obtiene los valores * / / * mínimo y máximo para * / / * nueva escala. = /

/ * eje y * /

line( xl,maxy-y2-offset,maxx-x2,~taxy-y2-offsot~ ; / * eje x * / line~xi-l,rraaxy-y2-offset+l,~xx-x2+i,a-y2-off~et+l~:

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 / * fin 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 t e r va 1 o=rang ox/ NUMD I VX ; if ( xintervalo< 1 ) xi ntervalo=l; un i dadx=rangox/ xxx;

yyy=maxy-yl-y2; rangoy-finy-iniy; yintervalo=rangoy/NUMDIVY; unidady=rangoy/yyy;

/ * escala X * /

/ * 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 f set+6 1 ; strcpy( numero, 'I "1; i toa ( i+i nix, numero, 10 1 ; outtextxy( xxx+xl-8,maxy-y2-off 8et+lO, numaro) ;

1

for ( i i =y interva lo ; i i <=rangoy : i i +y interva lo ) € yyy=(ii+iniy)/unidady; lin~~xl-2,maxy-y2-yyy-offset,xl+4,~xy-y2-yyy-offs~t~; strcpy( numero, 'I 'I 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);

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; in t aax, aay , bbx, bby ; float auxx,auxy;

for(i=O;i<=finx;i++) / * obtiene el primor eloutonto dentro * / if(i==inix) € primero=i: / * del rango de x (finx-inix). = /

i=f i nx; 1

for(i=primero;i<=finx;i++) / * obtiene el ultimo elemento dentro * / if(i==finxi E ultimo=i; / * del rango de X. * /

irfinx; 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 f set-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; / * obtiene las coordenadas * / auxy-datos1 i 3 iunidady; / * del punto B(bbx,bbyi * / bbx=auxx+xl ; / * obtiene las coordenada8 respecto al monitor

line(aax,aay,bbx,bby): / * traza una línea entre los puntos A y B * / circle(bbx,bby,2): / * marca el punto B para que sea visible * / if( !mismaescala) line(bbx,maxy-y2-offoet,bbx,bbx,bby);

aax=bbx; / * el punto B será el punto A del siguiente trazo * / aay-bby ;

1 1 / * fin de dibuja * / 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(38,7); cputa(letroro8tol~~el); window(2,11,78,20);

cputs("¿ Desea grnficar un intervalo de datos específico (e/ni 7 " i : intervalo=getch( 1 ;

gotoxy(25,5); cputs("GRAF1CADOR X vs Y -- C A S T");

gotoxy( 12,s) ;

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);

puts( "intervalo en X quo desoa graficar. 'I ; gotoxy(l0,l); printf("De %d datos, solocione el ",numdatos);

do C

gotoxy(l4,41; cputo("A partír dol dato X ??? "1; scanf("Wd*,&inioio); if (inicio<O) / * O<=inicio<=(nuardatos-2)*/

gOtOXy(35,4); CpUt8(" " 1 ;

mensaje( "Minimo el dato: O", 17 1 ; else if (inicio>(nuardatos-J))

I

~ mensalie(cadena,23) ;

, ~ " . - , _ _ . . . . . . 1 w h i l e - t t f n i a l o < 0 ) :-~~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;

do c

gotoxy(l4,6); cputs("Hasta el dato X = 7 7 1 "1; scanf ( "Xd" , &fin 1 ; if (fin<inicio+3) / * inicio<fin<=numdatos * /

gotoxy( 35,6 1 : cputs( 'I I' 1 ;

mensaje(cadena,Zli; else if (fin>numdatos)

mensaje(cadena2,Sl); 1 while ((fin<inicio+3) : :(fin>numdatosii;

offset=O; negat i voz-1 ;

i ni x=i nic io; i niy=0 :

finx=fin; f i ny=O ;

for (i=inix;i<=finx; i++i i / * obtiene los valores * / if (finy < datoslií) finy-datoslil; / * minimo y máximo para * / if (iniy > datoslil) iniy=datosCil; / * nueva escala. * /

1 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 ; strcpy( letrsrost0l ,'I "1; 8trCpy(l~ttetO8Cll,"SE" "1; strcpy(ietreroaE23,"COSENO "1; strcpy~lotrerosC31,"MA~NITUD"); atrcpy(letrerosC41,"FASE I' 1 ;

1 / * fin de inicializa * /

i -. - -- - _ _ I

toma-datos ( E .char cadenat303 ,numeroCQI J int i,j,k;

inicializa( 1 ; ventana( ; do E gotoxy(23,41; cputs("C A S T - Transformada Coseno y Seno"); gotoxy ( 5,7 ; 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. I' ,23 1 ;

1 while( (lw<2) ; : (lw>=MAX) 1 ; / * valida que: 2 < lw < MAX * /

gotoxy(40,71; cputs(" u);

else if (lw<2) mensaje("Mínimo 2 coeficientes.",22);

strcpy(cadena,'Mínimo de coeficientes "1; itoa(lw,numero,lO); strcat(cadena,numero);

window(4,8,75,23); gotoxy ( 2,2 1 ; printf("Escriba los Xd coeficientes de W.",lw);

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(2,lS); cputs("E1 nomero do coeficiontos do TCOS y TSEW es - "1: gotoxy(45,15) ; cputst "1;

scanf ( " X d " ,Stlt) 8 if (lt>=MAXCOEF) irwnra)~(~l(aximo 900 coeficientes.",241;

else if (lt<lw) wnsaje(cadona,27); 1 whileíílt<lw) ::(lt>=MAXCOEP)); / * valida que l w < = I t < MAXCOEF * / ventana( 1 ; gotoxy(23,8); cputs("C A S T - Transformada Cosono y Seno"); gotoxy(21,16); cputs("Gracia8, esporo un moaaonto por favor...");

Variablo GRAFICA --------- * / numdatosrlt; / a ------__ 1 / * fin de toma datos * / transformada( 1 c c omp 1 e 3 o au x , aux2 ; int i,ii,j; float pj;

/ * CALCULA LA "4SPORMADA D1 SEW0 Y COSER0 * /

dang=PI/(lt-1); angulo=O;

for (i=l;i<=lt;i++) E x. re=cos (angulo) ; x. im=sin(angulo) ;

/* polyev * / a.re=a.im=O; for (ii=l;ii<=lw;ii++) C

j=lw-ii+l; aux. re=wC jl ; aux. im-O;

I. .--- aux2=mu 1 t í Lx La 1 ; A 9

a=surna(taux2,baux) ; 1 / * fin de polyev * / tcosCil=a.re; tsenC il=a. im; angulo=angulo+dang;

1

for (i=l;i<=lt;i++) E / * polar * /

amplitudCil=sqrt( tcosCi3*tcos~i3+tsenCil*tsenCil 1; if (tsenCiI<O) C

i f (tcosCiI<O) fa~eEi3=ata.n~tsenCi3/tcosEi3~-PI; 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) faseCil=atan(tsenEil/tcos[il);

1 1

/ * fin de polar * / pj=o; for (i=2;i<=lt;i++) i

/ * drum * /

i f ( (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; 1 faseCil=fase[il+pj;

1 / * fin de drum */ 1 / * fin de transformada * /

rncoef ( 1 / * muestra los coefioiontes W * / i int i s j;

ventana( 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);

for ( i=l; i<=lw; i++) E

margen( 1 ;

j=2; gotoxy(2*j);

printf(" W [Xdl = W5.2f " , i , w C i l ) ; if ((iW4)==0) gotoxy(2,++j);

€ espera( 1 ;

€ / * Fin de mcoef */

i-tseno( i / * muestra los valores de l a transfoutada seno * / i n t i , j , k ;

ventana( 1 ; gotoxy(23,2); cputs("C A S T - Transformada Coseno y Sono") ; g o t oxy ( 33,4 1 ; cputs( "TRANSFORMADA SENO" ; window( 2,6,79,23 1 ; j = k = l ; gotoxy(k, j); f o r ( i = l ; i < = l t ; i + + ) E

margen( 1 ;

p r i n t f ( " SCXdl= X7.4f " , i , t s enC i l i ; i f ( ( iW4 )==0 ) gotoxy ( l ,++ j ) ; i f ((iW68)==01 E j = k= l ; gotoxy (k , j ) ; 1

1 espera( 1 ;

t / * f i n de m-tseno * / x-tcoseno( 1 / * muestra los 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 Seno"): got oxy ( 3 1,4 ; cputs("TRANSF0RMADA COSENO'); window(2,6,79,23); j=k= 1 ; f o r ( i = l ; i <= l t ; i ++ ) C

gotoxy í k, j 1 ;

p r i n t f ( " CtWdl= X7.4f " , i , t c o s t i l ) ; i f ( ( i % 4 ) = = 0 ) gotoxy( l ,++j l ; i f ((i%68)==0i f j =k= l ; gotoxy (k , j ) ; 1

1 espera( :

b / * f i n de m-tcoseno * / namp 1 i tud ( 1 / * muestra los valores de l a amplitud * / 1

In+. i , J , k i ventana( 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: f o r ( i = l g i<= l t ; i ++ ) E

margen( 1 :

gotoxy( k, j 1 ;

p r in t t ( " A [Ud]= W5.2f ' , i , ampl i tudt i l ) ; i f ( ( i%4 )==0 ) gotoxy(2,++j); i f ((i%68)==O) C j=k=2; gotoxy0c.j); 1

1 espera( i ;

1 / * f i n de mamplitud * / a-fase( i / * muestra los valotos de l a fase * / E i n t i , j , k ;

ventana( ) ; margen( 1 ; gotoxy( 23,2) ; cputs("C A S T - Tran8forarada Coseno y Seno"); gotoxy(30,41; cputs("C0EFICIENTES DE F A S E " ) ; window(2,6,79,23); j=k=2: f o r ( i = l ; i <= l t ; i ++ ) C

gotoxy( k , j 1 ;

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; gotoxy (k , j ) ; 1

impcoef ( 1 / * imprime loo coeficientes W * / ( int i ; ventana( 1 ; gotoxy ( 2 3 , 3 ) ; cputs("C A S T - Transformada Coseno y Seno"); gotoxy ( 24,5 1 ; cputs("IMPR1MIR COEFICIENTES W " ) ;

margen( 1 ;

mensaje("¿ Est6 lista la impresora Cs/nl 7 " , 3 3 ) ;

i f ( ( tecla==='s' ) : :(tecla=='S' 1 ) c fprintf (stdprn, " \ n \ r "1; fprintf(stdprn,"Programa CAST - Transformada Coseno y Seno\n\n\r"); fprintf ( stdprn, ' I \ n\ r TABLA DE COEFICIENTES W\n\n\r"i; for( i = l ; i<=lw; i++) f

fpri ntf ( stdprn, " WC Wdl= Y5.2f 'I, i , wC i 1 1 ; if ((iW4)==O) fprintf(stdprn,"\n\r");

1 1

1 / * fin de impcoef * / imp-tseno( 1 / * imprimo los valores de la transfomada seno * / f int i ; ventana( 1 ; gotoxy( 23,3 ) ; cputs("C A 3 T - Transformada Coseno y Seno"); gotoxy ( 29 , 5 1 ;

margen( 1 ;

cputo("1MPRINIR TRAiUSFORMADA SENO'): mensaje("¿ Está lista la impraoora [s/n1 ? " , 3 3 ) ;

if ((tecla=='s') ::(tecla=='S'i) C fprintftstdprn, "\nit '1: fprintf(stdprn,"Programa CAST - Transformada Coseno y Seno\n\n\r'); f pr i nt f ( stdprn , " \ n \ r for(i=l;i<=lt;i++) C

TRAIQSPOR)(ADA SE#O\n\n\r"i;

fprintf(stdprn," S CXdI= %7.4f ",i,tsan[il); if ((i%4)==0) fprintf (stdprn,"\n\r");

1 3

3 /* fin de imp-tseno * / imp-tco6eno( 1 / * imprima los valores de la tranrfoarada Coseno * / c int i; ventana( 1 : gotoxy ( 23,3) ; cputs("C A 3 T - Tran8forwda Cowno y Seno'); gotoxy(27,S); cputs("1MPRIMIR TRAWSPOfPEUDA COSEffO");

margen( 1 :

mensaje("¿ Est& lista la impre8ora ts/nl ?" ,33 ) ;

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 / * fin de imp-tcoseno * /

impamplitud( 1 / * imprime los valores de la amplitud * / E int i ; ventana( 1 ; g o t oxy ( 23 ,3 1 ; cputs("C A S T - Transformada Coseno y Seno"); got oxy ( 25,s ; cputs("1MPRIMIR COEFICIENTES DE MAGNITUD");

margen( i ;

mensaje("¿ Está lista la impresora Cs/nl ?",33);

if ((tecla=='s') ::(tecla=='S'i) E fprintf (stdprn, " \ n \ r I' 1 ; fprintf(stdprn,"Programa CAST - Transformada Coseno y Seno\n\n\r"); f pr i nt f ( stdpr n , \ n \ r for(i=l;i<=lt;i++) E

COEFICIENTES DE MAGNITUD\ n\ n\ r" 1 ;

fpr i ntf ( stdprn, I' A C %dl= %6.3f ' I , i ,amp1 i tudC i I ; if ((i%4)==O) fprintf (stdprn,"\n\r"i;

1 1

1 / * fin de impamplitud * / impfase( 1 / * imprime los valores de l a fase * / E fnt i ; ventana( i ; got oxy ( 23,3 1 ; cputs("C A S T - Transformada Coseno y Seno"); g o t oxy ( 25 ,5 i ;

margen( i ;

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 CYdl= %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") ; gotoxy(l6,ó); cputs("Cua1 es el nombro del archivo do datos: "1;

strcpy(entrada," "i;etrcpy(tipo," " I ;

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 (opc ion 1 E case ' 1' t strcpyí tipo,"rb"); break; case '2' t strcpy(tipo,"rb"); break; 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 * / fc 1 ose ( fp 1 ;

fread( &amp1 i tudl i I , sizeof ( float 1 , 1 , fp 1 ;

strcpy ( nombre *entrada 1 ; strcpy(extension, ".faso') ; strcat(nombre,extension); if( ífpnfopen(nombre,tipo) 1 != NULL) E

for(i=O;i<WiXCOEF;i++) / * lee arch. c-f. do taro * / fcloseífpi ;

fread(&faooliI,sizeof~float),l,fp):

archopen = CIERTO;/* todos los archivos fuoron leidos * / 3

1 1

1 1

if (!archopen) mensaje("ERR0R:Imposible leer archivo.",29); else f lw=wtOI; / * asigna el nQmero de 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

'ser ibearch i vo( 1

FILE *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"); gotoxyíl6,61; cputs("Cua1 es 0 1 nombre de grupo de archivos de datos: "1;

strcpy( nombre, 'I ");strcpy(tipo," " 1 ;

scanf ( ' '%s '~ ,entrada) ; gotoxy( 16,9 1 ; cputs( "Tipo binario I 11 1 ;

gotoxy( 16,111 ; cputs( "Tipo asci i C 3 3 " ) ; gotoxy(l6,lO); cputs("Tipo hexadecimal C21");

do C gotoxy(16,141; cputs("Tec1ee su opcibn : " 1 ;

1 while (mernchr(conjunto,opcion,3i==NULL); opcion-getchí ) ;

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( "AVISO: Si ya existen archivos con el nombre " 1 ;

gotoxy(16,18); cputs(" serán borrados.. . 'I 1 ; gotoxy(l6,20); cputs("¿ Son correctos nombre y tipo [s/n3 ? * I ;

cputs(entrada);

tecla=getch( 1;

.f í í tecla=='s' 1 ! : í tecla=='Q' 1 ) E

W E 0 I =1 w; / * escribe el n6mero de coeficientes . b e n I O 3 =tcostO 3 =nuaidatos; / * escribe el número de datos o It , amp1itudCO1=faseIOl=numdatos;

w = / de * /

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 * / fc lose ( f p 1 ;

fwrite(&wIií,sizeof(flost)ri,tp)i

strcpy(nombre,entrada); strcpy(extenaion, .sen" i ; strcat(nombre,extension1; if( (fp=fopen(nombre,tipo)) != NULL) E

for(i=O;i<MAXCOEF;i++) /* escribe arch. transf. seno *

fclose(fp1; fwrite(&tsenCil,sizeof(float),i,fp);

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 * / fclose(fp1;

fwrite(&tcosCi3,sizoof~float~,l,fp1;

gotoxy(27,7); I cputsí"1 -- CALCULA TRANSFORMADA SENO y COSENO"); gotoxy(27,9); cputs("2 -- MUESTRA RESULTADOS"); go toxy í 27,111 ; cputs( "3 -- GRAFICA RESULTADOS" ; gotoxy(27,13); cputs("4 -- IMPRIME RESULTADOS"); gotoxy(27,15); cputs( "5 -- LEE/ESCRIBE ARCHIVOS" 1 :

gotoxy(27,17); cputs( " O -- TERMINAR" 1 ; if (inicio) C ayuda(0);

textbackground(obscuro1); textcolor (c larol 1 ;

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,4 1 ; cputs("C A 3 T - TRANSFORllADA COSENO Y SENO");

gotoxy(27,8); cputs(."l -- MUESTRA COEFICIENTES U " ) ; gotoxy( 27,lo 1 ; cputs("2 -- MUESTRA TRANSPORUADA SENO"); gotoxy(S7,12); cputs("3 -- MUESTRA T R A N S F O F A COSENO"); gotoxy(27,141; cputs("4 -- UUESTRA MAGNITUD" 1 ; gotoxy ( 27,16 1 ; ~ p ~ t ~ ( " 5 -- MUESTRA F AS E " ) ; gotoxy(27,18); CpUts("0 -- RENU PRINCIPAL " ) ; do E

gotoxy I 27,2 1 1 ; cputs("1ntroduzca su Opción => "1; opcion-getch0;

1 while (memchr(conjunto,opcion,6)==NULL); switch(opcion) C

caso 1 ' : mcoof ( 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 while (opcion!='O');

1 / * fin de muestra * / iraprlime( / * menu para imprimir los dato8 * / E char opcionx0; do <

ventanat 1 ; got oxy ( 23, I ) : cputs("C A 3 T - TRANSFORMADA COSEISO Y SENO");

gotoxy ( 27,8 1 ; cputs("1 -- IMPRIME COEFICIENTES W"): got oxy ( 27, lo 1 ; cputs("2 -- IMPRIME TRANSFORMADA SENO"); gotoxy(27,12); cputs("3 -- IMPRIME TRANSFORMADA COSENO") ;

- s ( " 4 -- 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. coe f . de amplitud * / fclose(fp);

fwrite(&amplitudCil,sizeof(float),i,fp)l

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 * / fclose(fp1 ;

strcpy(nombre,entrada); strcpy(extension,".grl"); strcat(nombre,extension); if( (fp=fopen(nombre,tipo)) != NULL) C

fwrite(&faseCil,sizeof(float),l,fp);

/ * escr. arch. transf. seno y coseno * I

for(i=O;i<MAXCOEF;i++)

for(i=O;i<MAXCOEF;i++)

for(i=O;i<MAXCOEF;i++)

for(i=O;i<MAXCOEF;i++)

fwrite(&taenti3,aizeof~float~,l,fpi;

fwrite~&tcosEiI,sizoof(float~,l,fp~;

fwrite(&amplitudlil,sizeof(float~,í,fp):

fwrite~&faseCiI,sizoof~float~,l,fp~;

fclose(fp) ; archopen = CIERTO: / * indica quo todos los datos * /

3 / * fueron escritos an archivos*/ 3

3 3

1 3

if (!archopen1 ~nsaje~"ERROR:Impo8ibla escribir archivo.",33); wCOl~trenCOl=tcoeCO1=amplitudtOl~fa~oEOl~O;

1 / * fin de si 108 datos fueron correetoo */ 3 / * fin do escribearchivo * /

zhar -nu() c char opcion;

/ * menu principal del programa * /

window(1, 1,80 ,25) ; textbackground(BLINK+clarol) ; textcolor (obscuro1 1 : clrscr( i : margen( 1 ; window(2,2,79,24); textbackground(obscuro1): textcolor(claro1); clrscr( i

tal " C A 5 T T W F Q R H A D A " I ac& - COSENO Y SENO" 1 ; -&

1 . 1 _- "" -- . ~ . .c- I- -"- s - . 1

gotoxy( 27 , 16 1 ; CpUt6("5 -- IMPRIME FASE" ) ; gotoxy(27,18); cputs("0 -- MENU PRINCIPAL ' I ) ;

do E got oxy ( 27,2 1 1 ; cputs("1ntroduzca su Opción => "1;

opcion=getch( 1; f wh i l e ( memchr (con junto, opc ion, 6 1 ==NULL) ; switch(opcion) C

case ' 1 ' : impcoef ( ; break; case ' 2' : imp-tseno( 1 ; break; case '3' : imp-tcoseno( 1 ; break; case '4' : impamplitud( 1; break; case '5' : imp-fase( 1 ; break;

1 f while (opcion!='O');

1 / * fin de imprime * / / * menu para graficar los datos * / graficai 1

E int i,offsetx; char opc i on=O ; do E

ventana( 1 ; gotoxyí23,4); cputs( "C A S T - TRANSFORMADA COSENO Y SENO\ n\n" 1 ;

got oxy í 27 ,8 1 : cputs("1 -- GRAFICA TRANSFORMADA SENO"); gotoxy( 27.10) ; cputs( "2 -- GRAFICA TRANSFORMADA COSENO" 1 ; gotoxy(27,12) ; cputs("3 -- GRAFICA MAGNITUD"); gotoxy(27,lQ); cputs("4 -- GRAFICA FASE"); got oxy ( 27,16 1 ; cputs("0 -- MENU PRINCIPAL " 1 ; do C

gotoxy ( 27.2 1 ; cputst " Introduzca su Opci6n => I' i ; opcíon=getch( 1; if (opcion=='\xlB' 1 C

1 ayuda ( 3 1 ; /* ayuda menu grafica * /

1 while (memchr(conjunto,opcion,S)rPNULL); -ai-isaw-escala=FALSO; for(i=O;€<MAXDATO;i++) datosC€I=O; / * limpia arreglo para graf. * / offsetx=nuauiatoo+l; switchíopcion) C

case '1': claserl; / * SENO * / for(€=l;i<=numdatos;i++)

btoak;

for(€=l;€<=nuiadatos;i++)

break;

for(i=l;i<=nuatdatos;€++)

break;

foríi=l;i<=nuaidatoa;€++)

break;

datost numdatoa+i : =datosí o f f setx-i l=tsenC i 1 ;

case '2': clasei2; / * COSENO * / datosCnumdatoa+€3~datostoffsetx-i3rtcoaC 13;

case ' 3 ' : clase=3; / * AMPLITUD * / datostnumdatos+i =datosCaffset~-il=amplitudC€3;

case ' 4 ' : ClaS0=4; / * FASE = /

datos t numdatoa+ i . =da tos t off setx- i 3 =f asel i 3 ;

1 if(mmchríconjunto,opcion,4)!=NULL) C numlatoa=numdatos*2;

rut:na_graficaO; / * graficar6 * / nura ?a tos=numdatos/2;

1 f while (opcion!='O'i;

1 / * fin de grafica * / - 1- c;7 -

rrchivos4haydatos) / * menu para leer o escr ib i r archivos en disco * / i n t * hayda t o6 ; c char grupoC31=E'0 ' , '1 ' , '2 ' } ; char opcion; do {

opc i on=O : ventana( 1 ; gotoxy ( 23,5 1 ; cputs( 'IC A S T - TRANSFORMADA COSENO Y SENO" 1 ;

gotoxy( 27,lo i : cputs( " 1 -- LEE ARCHIVOS" 1 ; gotoxy(27,13); cputs( "2 -- ESCRIBE ARCHIVOS" 1 ; gotoxy(27,16) ; cputs("0 -- MENU PRINCIPAL "1;

i f ( i n i c i o ) E ayuda(5); inicio=FALSO; 1

do E gotoxy (27,20 ; cputs( 'I Introduzca su Opci6n => 'I 1 ;

opcion=getchO; i f (opcion=='\xlB'i E

1 ayuda ( 5 i ; / * ayuda menu archivos * /

1 whi l e (memchr (grupo, opc ion, 3 1 ==NULL) :

6WitCh(OpCion) C case ' 1 ' : i n i c i a l i z a ( i :

l e ea rch ivo ( 1 ; i f ( a rchopen) *haydatos=CIERTO:

else E *haydatos=FALSO; mensaje("N0 HAY DATOS D19PO#IBUSm,24); 1

break: case ' 2 ' : i f (*hay-datos) escr ibearch ivo ( 1;

e l s e mensaje("N0 HAY DATOS DISPOP41BLESm,2CI: break;

1

1 while (opcion!='O') ; 1 / * f i n de archivo8 * /

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 ' : tomadatos ( 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 DISPONIBLE3" ,24 ) ; inicio = FALSO;

3 while (ejecuta!='O'); ventana( 1 :clrscr( 1 ;

1 / * C A S T * I

C A P I T U L O 2

.. " F O U R I E R : TRAMSFORMADA RAP~OA DE 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 Fourier 1 puede estar en forma ya sea trigonoudtrica 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 peribdicas.

Cuando se habla de serie trigondtrica 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 las 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 f unc 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 intuitivas que las reales), esta for= es mAs o-ata que la 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 los 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 da Fourier

Dada la función real f(t), que es periódica con período T segundos, existen nomeros reales a. ,al sbl ,bz ,. . . . tales que :

f(t) = no + al cos wot + b, sen wot + an coa 2wot +

bn sen 2w0t + at cos 3wot + br sen 3wot + ... o bien:

+inf

n= 1 f(t) = Po + 3- ( 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 anterior se conoce como Serie Triuonodtrica FourieL f(t).

Las constantes ao, al, bl, 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 ) I

o ' componente de cd de f(t) ' es :

f(t) dt

donde loa limites de la integral pueden substituirse por cualquier intervalo de T.

50

Referencia Tebrica FOURIER

Si en la fórmula de l a 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:

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 l a serie de Fourier por sen(nw9t) e integrando con respecto a ' t ' 68 obtiene de manera similar l a fórmula:

b, = : S T f ( t ) sen nwot dt ; para n = l,Zs3s... T o

donde la integral puede calcularse en un período arbitrario.

Otra representación de la Serie Trigonomtbtrica de Fourier es:

+inf

n= 1 f ( t ) = a. + Sulu An COS (nwot - 0 , )

2 2 -1 O, = tan ( b,/a, 1 . donde An * a n + b n Y

59

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 = cos O + j sen O

- 30 e = cos O - 3 sen O

se obtiene:

+inf jnwe t f(t) = S W C n e

HI=- i nf

donde wo = 2 p i / T . Esta es la mrmm ntacibn comr>lej a d l 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 :

-jnwe t C n = - f(t) o dt .

T s:

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. La representacibn en serie compleja de Fourier es:

+inf jnwo t f(t) = StllLA C n e

w-inf

donde wo = 2 p i / T y cn se define como:

T / 2 -Jnwo t - jnwo x dt = - f(x) e dx

T s:::, C n = 's f(t) e T - t i 2

Substituyendo en la representación en serie de fit) se obtiene:

+i nf 3nwo t

n=-inf

Puesto que wo = 2 p i / T, entonces l/T = wo / 2 pi y

3nwo t wo

+inf

n- i nf f ( x ) o

61

.\

- -

Referencia Teórica FOURIER

Si hacemos T grande, entonces la cantidadaw definida por wo = 2pi/T = n w se hace pequeña y entonces :

3n wt e W

T / Z +inf f i x ) e

n=-inf - T / Z

Conforme T -> +infinito , entonceanw -> 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 de variables :

-jwt dt] d w * I l l * 1

f(t) = - :::: [\ f(t) e 2Pi - a n *

la cual puede expresarse como :

asl l a Transformada deFourier de f(t) se defino pot t

- jwt + I n * S - í n f

f(t) c) dt 1

F (jwl = - 2Pi

62

..

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 :

jwt f(t) = - 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(jw) 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 es continuo y ya no representa las amplitudos o mgnitudes 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 I ; comunmente conocido como Método d a Transformada Rápida d e Fourier o FFT. Este método es muy eficiente y los datos requeridos son 2" valores, donde 'n' es cualquier entero positivo.

Los datos de entrada son :

N = n .

X = { X O , X I , xi, ... , x q - l 1 ; donde q = 2" y

SIGN = -1 O 1 . X son conplejos .

Y los resultados son :

R = E ro , rl , rn , . . . , r,-l 1 Parte Real de Y . I = { io, il, ir, ... , i q - l I Parte Imaginaria de Y.

A = C a. , al , a2 , . . . , aq-; I Magnitud . F = { f o , f , , fzp ... , f , - 1 1 Fase

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 obtenidos del programa Ya (para j = O,l,...,q-l) en el caso de que SIGN = -1 representan el espectro de frecuencia de 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

9- 1 2pi ikj

k=O q Ia Cy,I = - SvnÁ Xk sen

es el espectro seno.

64

..

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 X y 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.

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

si ahora los datos de entrada son como sigue8

N 3 2 ;

X - E ( 2 . 5 , 0 ) , (-0.5,-0.5) , ( -0 .5 ,0) , (-0.5,O.S) 3 ;

SIGN = -1 ;

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 I BL I OGRAF I A

DOUGLAS F. ELLIOT Sr RAO K. RAMAHOAN " Fast Transform "

Aca&enis Press inc. U.S.A. 1989.

HARRY F. DAVIS *I Fourier Series St Orthogonal Function 'I

Dover Publications Inc. New York, U.S.A. 1980.

ENDERS A. ROBINSON 'I Multichanel Time Series 'I

Holden-Day Inc. San Francisco, U.S.A. 1967.

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. México D.F. 1975.

KENDALL E. ATKINSON 'I An itroduction to Analysis Jhon Wiley & Sons Inc. New York U.S.A. 1978.

MAX A. SOBEL & NORBERT L E m R 'I Algebra I'

Prentice Hall Hispanoamericana S.A. México D.F. 1989.

MS-DOS, User's Guide " Microsoft Corporation U.S.A. 1987.

HERBERT SCHI LDT " 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, empleando el método de: n log n ' ; cowunmente conocido como : ' Método de Transformada Rapfda de Fourier l . Este -todo es muy eficiente y los datos requeridos son 2" valores comlplejos, donde 'n' es cualquier entero positivo.

Los datos de entrada son t

Y los resultados son f

Y = C y o , yt , yz, .. . , y,-l 1 i Y son complejos R = { ro, ri, rn, ... , r q - l 1 Parte Real de Y . I = E io, i t , io, ... , i , - t 1 Parte Imaginaria de Y. n = E ao, a t , az, ... , a q - l 1 Magnitud . F = c fo, ft, f l , ... , f q - l 1 Fase

67

..

.. . Manuaii ODerativo FOWLER

. . . 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

q- 1

k=O Im Cy,I = - SUMA

2pi i k j

q Xt sen

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 01 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 debe contener ademdr e1 archivo FOURIER.EXE.

C Introducir en la computadora el disco do trabajo con los archivos mencionados e itroducir 01 comanado: FOURIER <ENTER>.

68

.. 3kmsurl Ombrativo FOüRIIER

D El Menú Princiual y un mensaje de ayuda enmarcado por una ventana serán mostrados en el monitor. Después de ser leido pulse cualquier tecla para continuar con el desarrollo del programa.

E A s í aparecerá el Menú Prinoi-pal completo, que presenta las opciones siguientes:

F

G

H

N L O G N - TRANSFORMADA DE FOURIER

1 -- CALCULA TRANSFORMADA DE FOURIER 2 -- MUESTRA RESULTADOS 3 -- GRAFICA RESULTADOS 4 -- IMPRIME RESULTADOS O -- TERMINAR Introduzca su Opción => _.

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.

Si se desea ver el umn8aje do AYUDA del Henú Principal pulse E, y tne8trar6 oí smn8aJe que apareció al principio del prograu 10961iE#t, en general pulse para ver la AYiJüa del mnfi que se est6 trabajando; existen ayudas en las opciones de: CALCULA TfPÁ239PORWADA , ORAPICAR , RESULTADOS.

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 al final d e cada sentencia , corresponden a un eiemulo. A l iniciar los cálculos se mostrará un Mensaje de Ayuda el cual indica que el número 'no debe ser tal que : 2 elevado a la potencia 'n' debe ser menor o igual a 32 , implicando que el valor máximo será n = 5 . Pulsar cualquier tecla para continuar.

Si se desea volver a ver el mensaje de Ayuda oprima E, y después oprima culquier tecla para continuar.

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 'no tal que: l<= n <=5. y a continuaci6n se pedir& el signo:

El signo 1-1 6 11 es =

A continuacibn se introducirihn cada uno de los 2" valores o coeficientes COaplt~j06 de X.

n Escriba lor 2 camficíemtmr aomplejor do X.

XC1l.rs = 1 Xt23.re = 2 XLSl.re = 3 Xt4l.re = 4

XIll.fr = O xi21 .ir = b Xi33 . i m = O XC4l.fa = O

70

1

.. ihnual Operativo FOURIER

. . . c a l c u l a t r m n m * o ' r ~ a d a . . .

Los valores complejos de X pueden ser : enteros , decimales, positivos o negativos.

El n~rnero de 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 de Muestra Resultadom, y se elegirá la opcibn deseada.

N L O G N - TRANSFORMADA DE FOURIER

1 -- MUESTRA COEFICIEISTES X 2 -- MUESTRA PARTE IHAGIñAIPIA 3 -- MUESTRA PARTE REAL 4 -- MUESTRA MAGNITUD 5 -- MUESTRA FASE O -- MENU PRINCIPAL Introduzca su Opción => _.

Entonces se mostrarán en e1 monitor loa c~oficiontes cortespondientes ; si se quiere detener & mumrtieg & coefioiqntes, sobre todo cuando no cabon en una sola pantalla ( más de 68 coeficientes i, se teclea CONTRO& a, y nuevaaunte CONTROL 3 para continuar viendo los coeficiente* yarrtn nterr; si no se oprime esta secuencia se ir&n encimando sobro los primeros coeficientes mostrados, as1 hasta terminar de mostrarlos todos.

7 1

.\ 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 da 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 de 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 Graficar y se elegirá una de las opciones.

N L O G N - TRANSFORMADA DE FOURIER

1 -- O W I C A PARTE REAL 2 -- GRAFICA PARTE IHAGINARIA 3 -- ORAFICA MAGNITUD 4 -- GRAFICA FASE O -- XENU PRINCIPAL Introduwra BU Opci6n => __

Al pulsar la tecla Eaapsroc9rb 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á aráfica y esperará aue pulse u- tecla para continuar, 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 g a pulse unatecla, y volverá a preguntar si desea graficar un intervalo de datos especifico.

73

1 4 4 1 8 7

4 -- IMPRIME RESULTADOS

Permite a l usuario imprimir los coeficientes complejos de X , las partes Real e Imaginaria de l a Transformada de Fourier, as í 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 - TRANSFORMADA DE FOURIER

1 -- IMPRIME COEFICIENTES X 2 -- IMPRIME PARTE REAL 3 -- IMPRIME PARTE IMAGINARIA 4 -- IMPRIME MAGNITUD 5 -- IMPRIME FASE O -- 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 y / o colocar 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.

74

.. .iCanual Oxmratiuo FOURIER

V EJEMPLOS

Dado el conjunto de valores complejos X y SIGN = -1, se efctúan cálculos con el programa FOURIER ; y si los 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 emplearon. Es decir que si se efeckuan dos llamadas 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

si ahora los datos de entrada son como sigue:

N = 2 ;

X = € ( 2 . 5 , 0 ) , (-0.5,-0.5) , ( - O . S , O ) , (-0.5,0.5) 3 ;

SIGN = -1 ;

obtendrá como resultado nuevamente :

Y = E ( 1 , O ) , ( 2 , O ) , ( 3 , O ) , ( 4 , O ) 1 ;

que son los datos que 88 habían considerado UOIQO X para 01 primer cálculo de Transforaada de Fourier ( 8 ) .

Mediante el Plena d. IamrLqlL b s ultrrdoa so imprimieron los los coeficientes complejos do entrada X I la6 partcso Imaginaria y Real de la T .F . , la Uagnitud y la Fase de la T.F.; correspondientes al ejomplo anterior.

75

.--- I. .-.-. .

Programa NLOGN - Transformada de Fourier

TABLA DE COEFICIENTES X

XClI.re= 1.00 XCíl.im= 0.00 XC23.re= 2.00 XESl.im= 0 .00 XC3l.re= 3.00 XCSI.irn= 0.00 XC43.r0= 4.00 XC43.ime 0.00

SIGNO = 1

Programa NLüGN - Transformada de Fourier

PARTE IMAGINARIA

I C i 1 = 0.0000 I C21= -0.5000 I C 3 3 ~ 0.0000 I C41= 0.5000

Programa NLOGN - Transformada de Fourier

PARTE REAL

R C l l = 2.5000 R C23= -0.5000 R C 3 1 ~ -0.5000 R C41= -0,5000

Programa NLOGN - Transformada de Fourier

COEFICIENTES DE MAGNITUD

M C 1 3 = 2.500 M C23= 0.707 W C31= 0.500 H C41= 0 .707

Programa NLOGN - Transformada de Fourier

COEFICIENTES DE FASE

F C l 3 = 0.000 F C23= -2.356 F t33a -3.142 F (41- -3.927

Programa NLOGN - Transformada de Fourier

TABLA DE COEFICIENTES X

XCll.re= 2.50 XCil.im= 0.00 XC2l.r0= -0.50 XC2l.im= -0.50 XC3l.re= -0.50 XC3l.im= 0.00 XC43.re= -0.50 XCQl.im= 0.50

SIGNO = -1

Programa NLOGN - Transformada de Fourier

I c11=

R i l l =

n c 1 3 -

F i l l =

PARTE IMAGINARIA

0.0000 I C21= 0.0000 I C33= 0.0000 I 143- -0.0000

Programa NLOGN - Transformada de Fourier

PARTE REAL

1.0000 R C21= 2.0000 R C33= 3.0000 R (431 4.0000

Programa NLOGN - Transformada de Fourier

COEFICIENTES DE MAGNITUD

1.000 H 123s 2.000 H C31= 3.000 M C41= 4.000

Programa NLOGN - Transformada de Fourier

COEFICIENTES DE FASE

0.000 F t 2 3 = 0.000 F t 3 3 m 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

ventana( 1

Enmarca la ventana que se ecuentra activa.

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 mostrar 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 los puntos.

78

Referencia T k n i c a FDURI-ER

dibula( 1

amplifica0

Grafica un punto, traza una linea con el punto anterior y otra con el eje X .

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

m-imag ( 1

Muestra los coeficientes complejos de entrada X.

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.

impampi i tud( i

imp-fase( 1

Imprime los valores de la amplitud.

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 Men0 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;

break;

break;

break;

case ' 2 ' : if (calculado) muestra();

cage ' 3 ' : if (calculado) graficao;

case l 4 ' : if (calculado? imprime0;

1 if ((!calculado)bb(ejecuta!='O'1)

inicio = FALSO; mensaje("N0 HAY DATOS DISPONIBLES",24);

1 while (ejecuta!='O'); ventana( 1 ;clrscr( ) :

1 Fin de rutlna principal main().

DEFINICION DE VARIABLES RUTINA P W u RAPIDA DA FOURIER 2 F.F.T.

X = ( X O , X 1 , X 2 , ... , X q - l ) donde q=2 N = n; SIGN = 1 6 - 1 ; Y = ( Y O , Yi, Y2, ... , Y q - l ) ; REAL = Parte real de l a transformada de Fourier; I MAG = Parte imaginarla de la transformada de Fourier: AMPLITUD = Coeficientes de Amplitud: FASE = Coeficientes de Fase:

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 * f k/ 1 x ; wk.re=cos(v) ; wk. irn=sin(v) ; i star t=l bl oc k* ( i b 1 oc k- 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 ; S I (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 j I ; xt jI=x[ k+ll ; xC k+ 1 3 rho1 d ;

1 PARA íi=l;i<=n;i++)(

h=i; SI (k<mCiI) i=n+l;

OTRO k=k-mC 1 3 ; 1 k=k+mC h 3 ;

1 f lxaux. re-f lx; flxaux. im=O;

81

\. .-.

SI (signo>O) PARA (i=l:i<=lx;i++) i aux=xC i I ; xC il=divide(&aux,&f lxaux) ;

3 PARA ( i = l ; i<=lx; i++) E

real[ ii=xC i I . re; imagC i I=xC i I . im;

3 Fin de F.F.T.

Polar PARA (i=l; i<=lx; i++) E

magnitudCil=sqrt( realCil*realCil+imag~il*~magCil 1; 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~;

3 OTRO S I (imagCil==O) E

S I (realCil<Ol faseCii=-PI; SI (realCiI==O) faseEil=O; SI (realCiI>O) faseCil=atan(i~gCil/realCil)f

3 OTRO SI (imagCil>O) C

SI (realCiJ<O) fase~il=atan(imagCiI/roaltil~+PI; SI (realtil==O) faseCil=PI/2; SI (realtiI>O) fasetil=atan(iragti3/roaltil~;

3 3 Fin de polar

pj=o; Drum PARA (i=2;i<=lx;i++) E

SI ( (abs(faeeCiI+pj-faseti-ll)-PI) > O ) SI ( (faseíil+pj-faseti-ll) < O ) pj=pj+Pf*2; OTRO SI ( (faestil+pj-fasoíi-lI) > 0) p)-pJ-PI*S;

1 fasetil=faseCil+pj:

3 Fin de drum

TERM I NA

82

i

/ * FOURIER 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.) .

n X = (XO, Xi, X 2 , ... ,Xq-1) donde q=2 ; N SIGN = 1 6 -1;

n; -

Y = (YO, Y i , Y2, ... ,Yq-1); REAL = Parte real de la transformada de Fourier; I MAG = Parte imaginaria de la transformada de Fourier; AMP L I TUD = Coeficientes de Amplitud; FASE = Coeficient-ee de 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

<stdlib.h> <stdio. h> <math. h> <mom. h> (conio. h > <string.h> <ctype. h> <graphice. h>

#define NUWDIVX 10 +dofine NUWDIVY 10 +define CIERTO 1 #define FALSO O

/ * nQrnero de divisiones del eje X * / / * nSaiero de divisiones del eje Y * /

+define MAX 6 +define WAXCOEF 101 +define MAXDATO 210 #defino PI 3.141592654 #define ospera0 while(!(kbhitO)); getch0;

typedef struct <float re, fa;) complejo; / * definici6n de NQmoro Complejo a

complejo xCWAXCOEF3 ,xxCMAXCOEFI 8 float mCMAXCOEFl,realCMAXCOEFl,i~gC~XCOEFl,~gnitudC~XCO~Fl,fase~~XCOEFl: float dang,angulo,flx; int n,lx,signo;

float datoaCMAXDATO1; int archopen,clase; i nt m i smaesca 1 a ; int numdatos;

int inix,finx; float iniy,finy; float unidadx,unidady; f 1 oat off set ; int maxx,maxy; int xl,x2; int yl,y2;

/ * arrogio dando 88tAn los datos a grafioar * /

/ * numoro de datos a graficar */ / * delimitan e1 rango on X y Y de los * / / * puntos que so grafiuaran */ / * corrimiento en pixeles del eje X * / / * delimitan el area disponible para * / /* trazar la gráfica. * / / * 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 * / int inicio; char tecla; / * 7 renglones o 7x80 caracteres. * /

~ < * ~ . I X _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 de suma complejos * / comp 1 e j o 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 de 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 vi 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; c.im=O; 1 return c:

void margen( 1 { struct text-info r; int i,alto,largo;

/ * enmarca la ventana que se ecuentra activa * /

gettextinfo(lr1; largo=r.winright-r.winleft; alto=r.winbottom-r.wintop; gotoxy( l,alto+l) ; putch(Oxc8) ; for(i=l;i<largo;i++) putch(Oxcd1; putch(0xbc); gotoxy( 1,alto-1) ; insline0; gotoxy(1,lf; putch(Oxc9 1 ; for(i=l;i<largo;i++) putch(0xcd); putch(0xbb); putch(0xbai ;

for(i=2;i<alto;i++) C gotoxy(largo+l,i);

1 gotoxy(largo+l,alto); putch(0xba); gotoxy(2,2);

putch(Oxbal;putch(Oxba);

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( 1 i

1 / * fin de ventana * /

/ * abre una ventana del tamaño de * / / * todo el monitor, y la enmarca * /

11mnaa5e(cadena,largo) / * abre una ventana .obre 01 'cadona' y auigna * / char *cadena; / * un carater del teclado a l a var. 'tecla' * / int largo;

struct text-info a; / * 'a' dato8 do ventana actual * / struct text-info n; / * ' e ' datos de ventana nueva, por abrir */ int x,y;

<

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.wintop=y; n.wlnright=x+largo+3; n.winbottoai~y+2;

textbackground(WH1TE) : textcolor(BLl4CK) ; clracr( 1; margen( 1 ; gotoxy(3,S); tecla=getch( i :

cpu t 8 í cadena 1 ;

p u t t e x t ( n . w i n l e f t , n . w i n t o p , n . w i n r i g h t , n . c e n ) ; textbackground( GREEN+BLINK) ; textcolor(BROW4) 8 window(a.winleft,a.wintop,a.winright,a.winbotto~);

1 / * mensaje * /

ayuda(nive1) int nivel; E

/ * mostrará un mensaje de acuerdo al nivel de ayuda * /

s t ruc t text-i nf o a ; / * 'a' dato8 de ventana actual * / struct text-info n; / * ' 8 ' datos de ventana nueva, por abrir * / int x,y,largo,ancho,j;

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 . w i n r i gh t=x+ 1 argo+3 ; n.winbottom=y+ancho+l; 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 / * mostrará mensaje deacuerdo al nivel de ayuda * / case O: j=2; / * menu principal * /

gotoxy(3,j++);cputs("Si no hay datos disponibles, elija la opcibn 1"); gotoxy(3,j++);cpute("para introducir los coeficientes compleJos X , ' ) ; gotoxy(3,j); cputs("y obtener los Coef. de Ttansf. de Fourier."):

break;

case 1: j=2; / * menu tomadatos * / gotoxy(3,j++);cputs("El nQnraro In' debo ret 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;

/ * menu grafica * / case 3: j=2;

gotoxy(3, j++) ;cputs("Para cualquier grafica seleccionada, puede graficar "1; gotoxy(3, j++) ;cputs ( "a610 una parte de ella, eligiendo un intervalo dentro"); gotoxy(3,j++);cputs("del rango de datos del eje X , ampliándose la gráfica.");

gotoxy(3,j++);cputa("Al preeentar Q/U dri la8 grbficas el nhmro de ccmf. "1; gOtO~y(3,j++);cputs("graficados es el DOBLB:, permitiendo ver el eopeotro " 1 ;

teclangetch0; j=2; /* uagundo annsaje de menu grafica * /

gotoxy(3,j++):cputs("completo. El nGuro 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 window(a.winleft,a.wintop,a.winright,a.winb~ttom);

textoolor(BR0WN) i

1 / * fin de ayuda * /

>anta1 la( i 1 i n t graphdriver ; i nt graphmode ;

int error = -1; char pathdrivert 3 = "I* i

/ * inicializa el modo grhfico * /

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; y1=15; x2=16 ; y2=25 ;

1 / * fin do pantalla * /

/ * obtiene el máximo de X * / / * obtiene el aráximo de Y * /

rsctang le ( O ,O, maxx, maxy 1 ; rectangle~2,2,~arrxx-2,1~axy-2~:

/ * define lo separado que estarhn los ejes * / / * del marco de la pantalla. * /

maxminirno( i c int i,negativo;

/ * marco del monitor * /

/ * encuentra loo valores m4xioiro y mínimo * /

Off 6etmO ; i n i p 0 ; inixrnl; tinx=nuradatos/2;

nagat i vo- 1 ; f i ny=O ;

for (i=inix;i<=finx: i++) C / * obtiene los valores * / if ífiny < datostil) finy=datosCil; / * minimo y iiidximo para * / if (iniy > dato~til) iniy=datostil; / * nueva escala. * /

1 if (iníy<Oi off8atriniy*negativo1

1 / * fin de mx-minimo * / ejes( 1 / * traza 108 ejes XY * / c

1 ine( xi, y1 , xl, iaaxy-y2) ; /* eje y * / i ine( xl-1, y 1, xl-1 , maxy-y2+1) ; 1 i ne ( xl , maxy-ya-of f set, maxx-x2, maxy-y2-of foot i i / * eje x * / 1 ine( xl-1, maxy-y2-of fset+l .~xx-x2+1 ,maxy-y2-offaet+l) ;

settsxtotylo(DEFAULTFO"ORIZoIR,I); outtsxtxylxl-10,6,"Yn); outtsxtxy(raaxx-7S,l!3~letrerosíclase3~; out textxyi mxx-12, Wxy-of f6et-28, " x" ;

- 1 / * de ejes * / Q7

escalaxy( 1 E

/ * ohtine l a escala en pixeleo de io8 eje8 X y Y * /

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 1 o< 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;

for (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~;

itoa(i+inix,nurnero,lO); o u t t e x t x y ~ x x x + x l - 8 , n x y - y 2 - o f f 8 e t + l O , n u ~ r o ~ ;

strcpyi numero, u ) ;

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~;

if (yintervalo>=l) E / * esoala si Y son enteros * / strcpy(nun\ero, u ) ;

y=ii+iniy; reoiduor(ii+iniy-y)*lO; if(residuo>=6) y++; itoa(y,numero,lOi i

3 else gcvt(ii+iniy,2,nuenero); / * oeoala si Y son decimales * / outtextxy(4,rnaxy-y2-yyy-offset-4,numoro);

1 1 / * fin de escalaxy * / dibuja( 1 E int i,priinero,ultimo; i nt aax, aay , bbx, bby ; float auxx,auxy;

/ * gratioa un punto, traza una línoa con el */ / * punto antorior y otra con 01 ojo X */

for(i=O;i<=finx;i++) / * obtione 01 prifaor eleatento dentro * / if (i==inixi C pr€mero=i: /* del rango do x (finx-inix). * /

i-rfinx; 1

for(i=primero;i<=finx;i++) / * obtione el ultimo elemento dentro * / iftip-finx) € ultitno=i; /* de1 rango de x. * /

imfinx; 1

/ * obtiene las coordenadas del punto A(aax,aay) , primero a graficar * / au xx= í p r i mero- i ni xi /un i dadx i

-- V: Q Q

aax=auxx+xl ; /* obtiene las coordenadas respecto al monitor aay=rnaxy-y2-~ffs1~t -auxy ; circle( aax, nay, 2) i / * marca el punto A para que sea visible * /

f

for (i=primero+l;i<=ultirno;i++) C

auxx=( i-inix) /unidadx: / * obtiene las coordenadas * / auxy=datosC i I /unidady; / * del punto B(bbx,bby) * / bbx=auxx+xl ; / * obtiene las coordenadas respecto al monitor * / bby=maxjr-)rS-of f set-ataxy ;

line(aax,aay,bbx,bby); / * traza una línea entre los puntos A y B * / circle(bbx,bby,ai; / * marca el punto B para que sea visible * / i f ( ! mi s m a e sc a 1 a 1 line(bbx,maxy-y2-offset,bbxDbby):

aa x= bbx ; / * el punto B será el punto A del siguiente trazo * / aay=bby :

1 1 / * fin de dibuja * / 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 12,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 ;

ítoQ(nuadstor-9,nuawro,lO); PtrCat(CQdORÍ, nurero) ?

puts("interva1o en X que dmaoa graficar.");

8tropy(a&*~,"~XfRO 01 dato : "1;

gotoxy(l0,l); printf(*Do rrd datos, aolecione el ",numdatoe);

do C

gotoxy(l4,4); cputs("Apartir drl dato X = ??? "1; scanf("Wd",&inicio): if (ínicio<li / * O<=inicio<=(nuLadatos-2~*/

gotOxy(35,4); CpUt8( " *)i

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 el dato s " 1 ; itoa(inicio+3,nuraeroD10): strcat(cadena,numoro); strcpy(cadona2, "Máximo el dato : " 1 : itoa(nurndatos,numero,lO); R 9

strcat(cadena2,numero); do C

gotoxy( 1 4 , 6 ) ; cputsi "Hasta el dato X = ? ? ? " 1 ; gotoxy(35,6); cputs(" 'I ;

scanf( "Xd",&fin); if (fin<inicio+3) / * inicio<fin<=numdatos * /

mensaje( cadena, 21 1 ; else if (fin>numdatos)

mensaje(cadena2,21); 1 while ((fin<inicio+3) I :(fin>numdatos) 1;

offset=O; nega t i vo=- 1 ;

inix=inic io; iniy-0; f i ny=O ;

for (i=inix;i<=finx; i++) C / * obtiene los valores * / if (finy < datostil) finy=datosEil; / * mínimo y máximo para * /

f i nx=f i n ;

if (iniy > datoslil) iniy=datosCil; / * nueva escala. * / 1 if (iniy<Oi offset=iniy*negativo;

pantalla(); escalaxy( ; d i bu ja í ; teclaegetch0; closegraph( 1 ;

1 1 while ( (intervalo == ' 8 ' 1 I I (intervaio=='S' ;

1 / * fin de amplifica * / rutfnaarafica0 / * secuencia de subrutinas para graficar * / t maxminimo( 1 ; pantalla(); eocalaxy( 1 ; dibuja( 1 ; amplifica( ;

3 / * fin de rutinaarafica * /

toma-datocr( 1 /* pido dato8 a usuario para calcular transformada * / I complejo aux; fnt i, j , k ;

aux. re=aux. im=O; for (i=O:i<MAXCOEF;i++) mCil=O; / * Inicializa Arreglos * / for (i=O;i<MAXCOEF;i++i E xCil.re=xxCfl.re=O;

1 for (irO;i<MAXCOEF;i++) realCil=iniagtil=8aagnltud~il~fa8o~il~O;

strcpy(letreroíC21,"REAL "1; strcpy(letrero8t31,"MAGNITUD")I

ventana( ) ;

x~iI.ím=xxtil.i111=0;

strcpy(letrerost01," ; strcpy~letrerorCll,"I~~. "1;

strcpy( letrerosC41, "FASE "1;

do C gotoxy(23,2); cputs("N L O G N - Transformada de Fourier");

if (inicio) ayuda(1); got oxy ( 5,4 ) ; cpute(" n " ) ; gotoxy(40,5); cputsl" (I ; gotoxy ( 5,5 1 ; cputs("E1 nQmero de coeficientes X=2 ; n = ? ' I ) ;

scanf ( "Wd" ,En 1 ;

if (n>=HAX) mensaje("MAxirno n = 5; o 32 datos.",25); else if ín<li raensaje("Minimo n = 1; o 2 datos.",24);

1 while((n<l): :(n>=MAX)); / * valida que: 1 <= n <= MAX * / flx=pow(S,n); lxiflx;

do E

gotoxy(5,7); cputs("E1 signo 1-1 6 11 ea = I @ ) ;

gotoxy(20,7); cputs(" 1 ;

scanf ( "Yd" ,&signo) i if ((signo!=l)&&ísigno!=-l))

mensaJe("E1 signo 6610 es -1 6 1",23); 1 while ((signo!=l)&&(signo!=-li 1; / * valida que: signo 3: -1 6 1 * / window(2,8,78,23); got oxy ( 4,2 1 ; printf ( "E6criba los %d coeficientes compleajos do X . " , 1x1 ;

k=Q; j=Q;

for ( i= l ; i<=lx;i++) I gotoxy( k, 5 ; printf ( "Xtldl .re= " , i 1 ; scanf í "%f I' ,&aux. re) ; gotoxy(k+17,5); printf("Xt%dl.iap *,i); scanf ( "Yf ,Eaux. ira) ;

xi i Isxxt i Imaux; if( j==i3) C k=k+36; j.54; 1

if(i==20) € k=4; j=4: 1 else j++;

1 ventana( i ; gotoxy(23,8); cputs("N L O G iY -- Transformada de Fourier"); gotoxy(21,16); cputs("Graciae, @spore un momento por favor...");

numdatos=lx; / * -------- Variable GRAFICA --------- * / ? / * fin de toma datos */ fourier( i /* CALCULA LA T F O - A DE FOURIER = / c 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

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 ; ? k=k+mC hl ;

3 3 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[ 13 1 i=n+l; else

k-k-mt i 3 ; 1 k=k+mt h 3 ;

1 flxaux.ro=flx; f lxaux. im=O; if ( pi igno>O 1 for ( i = 1 ; i 1. =1 x; i++

aux=xt i 3 ; E

xt i Irdi vide( Sraux, &f lxaux) : 3 / * fin de niogn * /

for (i=l;i<=lx;i++) € real t i i=x[ i I . re; imagC i I =xC i I . im;

1

92

/ * --- polar --- * / for íi=l;i<=Lx;i++) f

magnitudtil=sqrt( realCil*real~il+iasag~il*i~g~i~ 1: 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 i fase[ i Ir0 i 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) faeeCil=atan(iiaagCi3/realCil);

1 1

/ * fin de polar * / pj=O; for (i=L;i<=lxri++) {

/ * drum */

if ( (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; 1 faaeCil=faseCil+pj;

I / * --- fin de drum --- * /

1 / * fin de fourier */

mcoef ( i /* sruomtra los coeficientes W * / ' c int i.3:

ventana( 1 ; gotoxyt 23,21; cputs("N L O CY Fl -- Treneforarada do Fourier"); got oxy ( 28.4 i : cputs("TABALñ DE COEPICIEWTIñS X " ) ;

rnargení 1 i

wi ndow( 2,6 79,23 i ; j=l; gotoxy(1,jig for ( i=l; i<=lx ; 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 ((i%68)==0) C jolt gotoxy(1,j); 1 if ((i12)==0) goto#y(l,++j);

1 espera( 1 s

1 / * fin de rncoef * /

- imag( 1 / * muestra la parte imaginaria de la transformada * /

int i, j, k; ventana( 1 ; 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

margen( 1 ; cputs("N L O G N -- Transformada de Fourier");

pr i ntf ( 'I I CXdI= X7.4f 'I, i , irnag[ i I 1 ; if ((iX4)==0) gotoxy(l,++j); if ((i%68)==0) I j=k=l; gotoxy(k,j); 1

1 espera( 1 ;

/ % fin de m-imag * / - real ( 1 / * muestra la parte real de la transfomada * / int i, j, ks

ventana( 1 ; gotoxy (23,21 ; gotoxy í 3 I, 4 1 ; window(2,6,79,23) ;

for(i=l;i<=lx;i++) C

margen( i ; cputs("N L O G N -- Transformada de Fourier"); cputs( "PARTE REAL" 1 ;

j=k=l; gOtOXy( k, 3 1 ;

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 * / 'amp 1 i tud ( 1 / * muestra los valores de l a amplitud * / int i, j,k;

ventana( 1 ; gotoxy(23,2); cpute("N L O a N -- Transformada de Fourier'); gotoxy ( 29,4 i ; window(2,6,79,23); j=k=2; gotoxy( k, j) ; for(i=l;i<=lx;i++) I

margen( 1 ;

cpute("C0EFICIENTES DE MAGNITUD");

pr i nt f ( " A t %d I = %5.2f 'I , i , magn i tudC i I 1 ; if ((iW4)==0) gotoxy(2,++j); if ((iW68)==0) { j=k=2i gotoxy(k,j); 1

1 -.srpera( ;

t / * fin de in-amplitud * / 1-fasei / * muoatra los valore8 de la taso * / int i, j , k ;

ventanat 1 ; gotoxy( 23,2) ; cputs("N L O G N -- Transformada de Fourier"); got oxy ( 30,Q 1 ; window(2,6,79,23);

for ( i= 1 ; i <= 1 x; i++ 1

margent 1 ;

cputs( "COEFICIENTES DE FASE" 1 ;

j=km2; gotoxy(k,j); f

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 * / Q A

impcoef ( i / * imprime io6 coeficientes X * / E int i; ventana( 1 ; gotoxy ( 23,3 1 ; gotoxy(24.5); cputsí"IMPRIM1R COEFICIENTES X " ) ;

margen( 1 ; cputs("N L O G N -- Transformada de Fourier"); mensaje("¿ Está lista la impresora [s/n3 ? " , 3 3 ) ;

if ((tecla=='s') :(tecla=='S')) E fprintf(stdprn,"\n\r I) 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, I' XCXdl .re= %5.2f 'I, i , xxC i I . re) ; fpr i nt f ( stdpr n, 'I Xi Xdl . i m= %5.2f if ((i%2)==0) fprintf(stdprn,"\n\r");

" , i , xxt i 1 . im) ; 1 fprintf (stdprn, "\n\r SIGNO = Xd\n\r",signo);

1 1 / * fin de impcoef * / irap-imag( 1 / * imprime la parte imaginaria de la tranafomada * / C int i ; ventana( 1 : gotoxy(23,3): goto%)t(29,5): cputs("1MPRIMIR PARTE IMEJINARIA");

margen( 1 ; cputs("N L O G N -- Transformada de Fourier"); menoaje( 'I¿ Está lista la impresora Cs/nl ? " ,331 ;

if ((tecla=='r') ::(tecla=='S')) E fprintf(stdprn,*\n\r I' 1 ; fprintf(etdprn,"Program NLOGN - Transfor :ada do Fourier\n\n\r'); fprintt {stdprn, "\n\ r PARTE IMAGI IARIA\n\n\r"); tor( i n l ; i<=lx; i++) C

fprintf(stdprn," I C%dl= %7.4f ",i,im gCil); If ((iWQ)==O) fprintf (stdprn,"\n\r")

3 1

3 / * fin da imp-ia\srg * / imp-roa1 ( 1 /* imprime la par"s -ea1 de la transformada * / € int i; ventana( 1 ; margen( 1 ; gotoxy(23,31; cputs("N L O G N -- Transformada do Fourier"); gotoxy(27,S); -aputo( IXPRIXIR PARTE REAL" ? ;

mensaje( " L EstA lista la impresora Cain3 ?" ,331;

if ((t0Cla=-'8') ::(tecla=='S')) C fprintf(stdprn,"\n\r "1; fprintf(stdprn,"Programa NLOGN - Transformada de Fourier\n\n\r"); fprintf í stdprn, " \ n\ r PARTE REAL\n\n\r"); fort i=l; i<=lx; i++i €

fprintf (stdprn," R t%dl= %7.4f ' I , i,realC 13 i ; if ((iW4)==0) fprintf (etdprn,"\n\r");

1 1

1 / * fin de imp-real * / (IC=

_"..

impamplitud( 1 / * imprime los valores de la amplitud * / t int i; ventana( i ; gotoxy( 23,3 ) : gotoxy(25,5); cputsí"IMPRIM1R COEFICIENTES DE MAGNITUD");

margen( i t cputs("N L O G N -- Transformada de Fourier"): mensaje("¿ Está lista la impresora [s/n1 ?",33i;

if ( (tecia=='s' 1 I : (tecia=='Q' 1) C fprintf (stdprn, 'I \ n\r 1 ; fprintf(stdprn,"Programa NLOGN - Transformada de Fourier\n\n\r"); fpr i ntf ( stdprn, I' \ n\ r f o r ( i=l; i<=lx; i++) I

f pr i nt f ( s tdpr n , 'I M C Xd 1 = X6.3f I' , i , magni tudC i I i f ( ( i 964 1 ==O 1 fpr i nt f ( s tdprn, " \ n\ r " ;

COEFICIENTES DE MAGNITUD\n\n\r"i ;

i

1 1

1 / * fin de impamplítud * / impfase( 1 / * imprime los valores de la fase * / E int i; ventana( 1 ; margen( ;

gotoxy ( 25,5 1 ; cputsí"IMPRIM1R COEFICIENTES DE FASE"); ' gotoxy(23,3) i cputs("N L O G N -- Transformada de Fourier");

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 fprintf(stdprn,"\n\r COEFICIENTES DE FASE\n\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 ;

* / * /

text bac kg r bund ( BLÍ NK+WHíTE 1 ; clrscrt ; atargon( ) ;

toxtoolor (BLACK) :

window(2,2,79,24); textbackgroundíl3LACK)i textcolor(WH1TE); clr8crO; gotoxy( 23,s) ; cputs("N L O 0 N - TRANSFORMADA DE FOURIER");

got oxy ( 27,9 1 : cputpi("1 -- CALCULA TRANSFORMADA DE FOURIER"); gotoxy(27,ll)g oputci("2 -- MUESTRA RESULTADOS"); gotoxy ( 27,13 ; cputs( "3 -- GRAFICA RESULTADOS" 1 : gotoxy ( 27,15 : cputs("4 -- IMPRIME RESULTADOS"); gotoxy ( 27,17 1 ; cputP("0 -- TECP13INAR");

if (inicio) ayuda(0); textbac kground ( BLACK : textcolor(WH1TE) ;

98 1 -...""

"X __".. ___ _II". _'_I". " . _. _ _ do c gotoxy ( 27,20 ; cputs("1ntroduzca su Opci6n => "1;

opcion=getchO; if (opcion=='\xlB') C / * ayuda menu principal * /

ayuda ( O 1 ; textbac kg round ( BLACK) ; textcolor(WH1TE) ;

1 1 while (memchr(conjunto,opcions5)==NULL): return opcion;

1 / * fin de menu * / muestra( 1 / * menu para mostrar los datos en el monitor * / c char opcion=O; do C

ventana( 1 ; got oxy ( 23 4 1 : cputs("N L O G N - TRANSFORMADA DE FOURIER"); gotoxy(27,8) ; CpUt6("1 -- MUESTRA COEFICIENTES X " ) ; gotoxy( 27,lo 1 ; cputs( "2 -- MUESTRA PARTE IMAGINARIA'' 1 : gotoxy(27,12) ; cputsí "3 -- MUESTRA PARTE REAL" 1 ; gotoxy(27,14); cputsí "4 -- MUESTRA MAGNITUD" 1 ; gotoxy( 27,16 i ; cputs("5 -- MUESTRA FASE"); gotoxy(27,18); cputs("0 -- MENU PRINCIPAL " i ; do i

gotoxy(27,21); cputs("1ntroduzca su Opci6n => "i; opcion=getch( i ;

1 wh i 1 e ( memchr ( conjunto, opc ion, 6 ==NULL) : switch(opcion1 E

case '1' : mcoef ( 1 ; break; case '2': m-imag0: break; case '3' : mareal( 1 ; break; case ' 4 ' : mamplitud( 1 ; break; case ' 5' : mfase( 1 ; break)

1 1 while (opcion!='O'i;

1 / * fin de muestra * / / * menu para imprimir 108 dato8 * / imprime( 1

c char opcion=O; do C

ventana( ; gotoxy( 23,4) : cputs("N L O O N - TRlf3L3FO-A DE FOURIER');

gotoxyí 27,8 1 ; CpUt8("1 -- IllPRIIlE COEFICIK"E3 X " ) ; gotoxy(27,lO); CpUts("2 -- IWRIHE BAaTE IMA(311YARfA"); gotoxy(S7,12); cput~("3 -- IHPRIRE PARTE R R A L " ) ; gotoxy(27.14); CpUts("4 -- IWRIXE PlAGMITUD"); gotoxy (27,16 1 ; CpUt8("5 -- IWRIXE FME"); gotoxy í 27,18) ; CpUt8("0 -- #$W PRIPOCIPAL "1; do E

gotoxy( 27 21 1 : cputs("1ntroduzca su Opción => " 1 ; opcionagetchi 1;

1 whi le ( memchr ( con junto, opc ion, 6 i ==NULL) ; switch(opcion) C

case ' 1 ' : impcoef í ; 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'); 97

1 / * fin de imprime * /

/ * menu para graficar los datos * / graf ita( 1 c i nt i , off aetx; char opclon=O; do c

ventana( 1 ; gotoxy(23,4); cputs("N L O G N - TRANSFORMADA DE FOURIER\n\n"); got oxy ( 27 , 8 1 ; cputs("i -- GRAFICA PARTE IMAGINARIA")! gotoxy(27,lO) ; cputs( "2 -- GRAFXGZA PARTE REAL" ; gotoxy(27,12) ; cputs( "3 -- GRAFTCA NAGNITUD" 1 ; gotoxy( 27,14 1 ; cputs( "4 -- GRAFICA FASE") ; gotoxyí27,16 1 ; cputs( "O -- MENU PRINCIPAL ' I ) ; do c

gotoxy ( 27,2 1 1 ; 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 graf. * / off set xanuuuia tos+ 1 ; awitchíopcion) {

case '1': claserl; / * IHAGINARIA * / for(i=l;i<=nuatdatos;i++)

break;

for(i=l;i<=nuiadatos;i++)

break;

for(i=l;i<=numdatos;f7+)

break;

for(i=i;i<=numdatoe;i++)

break;

datos~nusadatos+i3=datostoffs~tx-il=i~gtil:

case ' 2 ' : claser2; 1 % REAL * / datosCnumdator+il=datostoff~etx-i~~realtil;

case ' 3 ' : ClaS0=3; / * MAGNITUD */ datostnumdatos+il~da~o8toff~etx-il=1nagnitud~il;

case '4': claser4; / * FASE * / datoolnumdatoa+~3~datostoffsetx-il~fasetil;

3 if(wemchr(conjunto,opcion,4)!=WLL) 4 nunbatoo=numdatos*2;

rutínagraficaf); /* grafícarQ * / nudatoe=nudatos/S~

3 1 while (opcion!='O' 1 ;

? /* fin de grafica * /

98

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;

case '2': if (calculado) muestra( 1; break;

case ' 3 ' : if (calculado) graf ica( 1 ; break;

case ' 4 ' : if (calculado) imprime0; break;

1 if ((!calculado)&&(ejecuta!='O'))

inicio = FALSO; 3 while (ejecuta!='O'); ventanat 1 ;clrocr( 1 ;

wnoaje("N0 HAY DATOS DISPONIBLES",24);

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 su 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 programs son descrito8 en el inicio del liatado de cada uno de éstos, además se incluyen ejemplos para la mayoría de ellos. L a 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., los 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 una matriz s i mé t r i ca ;

141: NORMEH .- Normaliza un arreglo, dividiendo cada elemento por el valor r.m.6 del arreglo.

142: NORM1 .- Normaliza un arreglo, dividiéndolo por el primer elemento del arreglo.

143: NOREUG .- También normaliza un arreglo, dividib-idolo por el elemonto ds, grande del arreglo.

144: CROSS .- 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.

107, 145: FOLD .- Realiza la multiplicación de polinomios, también llarnada convolución.

107, 146: POLYDV .- EfectJa la divioi¿n do dos polinmi08 ¿ deconvoluci6n, con coeficientes rmales o complejosi incluye las 8ubrutincrs ZERO que inicializa con ceros un arreglo y MOVE la cual copia un cierto nJmro de elementos de un arreglo a otro.

108, 147: PSRQT .- Encuentra 108 primeros m+l " coeficientes de la raiz cuadrada de un pol inomio.

102'

.. Prouramaa Para Series de T i m o

148: POLRT .- Calcula las raices de un polinomio con coeficientes reales.

35: POLYEV .- Efectiia la ovalución de polinomios con coef icientss reales o comple jos.

109, 151: FADDEJ .- 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 la solucibn de las llamadas ”

ecuacicmes normales de canal simple” ; relacionadas con problemas de predicción y filtros por series de canal simple.

112, 156: INVTOP .- EfectQa la inversión de una matriz Toplitz, empleando como subrutinas a EUREKA y a IHPULS la cual forma la respuesta impulso en un vector a partir de una posición.

114, 158: TRIANG .- Obtiene la factorización triangular de una matriz y eu tranopuosta.

114, 159: SPUR .- Calcula la suma de la diagonal de una matriz.

160: MATRAN .- Emplea la perinutación ordénada en l a transpuesta do una matriz rectangular.

162: COSTAB .- A partir do una longitud de onda genera una tabla de cosenos.

163: SINTAB .- A partir do una longitud de onda genora una tabla do senos.

164: COSP .- Calcula 01 k-Ooimo valor de una transforaacián de seno 6 coseno.

76 , 83: FOURIER.- Calcula la Trnn~formada de 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 un valor de la Transformada de Fourier a partir de sumas de ihngulos en f ó rmu 1 as t r i g onomé t r i cas.

167: DRUM .- Calcula la fase de una curva continua. 27, 35: CAST .- Calcula 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.

168: POLAR .- Calcula los coeficientes de fase de un vector complejo

115, 169: SHAPE .- Calcula el filtro "weaveshaping" Ó de forma de onda, emplea la8 subrutinas do CROSS,EUREKA,DOT,FOLD y ZERO.

117, 172: SPIKE .- Calcula el filtro "spiking", en la posición bptima de 'spike'; emplea las subrutinas de: IMPULS, SHAPE, EUREKA, DOT, FOLD, MINSN y ZERO.

119, 175: SPIKER .- Calcula el filtro "spiking", en la posición bptima de 'spike', similar a SPIKE pero más eficiente, emplea lae subrutinas de: INPULS, SHAPE, EUREKA, DOT, FOLD, MINSN, ZERO y además SIDE.

120, 179: SHAPER .- Calcula el filtro "weaveshaping" 6 de forma de onda, similar a SHAPE pero más eficiente, emplea las subrutinas de CROSS, EUREKA, DOT, FOLD, UINSFJ, SHAPE, ZERO y aüe,cehe SIDE.

184: COSTR .- Calcula l a transformada dol cosono a partir de coeficientes empíricos de autocorre lac i ón.

185: SMOOTH .- Calcula una estimcián dol espectro, por desarrollos de "smoothing operation a del períodograma, a partir de la fórmula de Hammi ng-Tukey .

186: AUGURY .- Calcula la predicción multicanal Winor.

104

..

192: OMEN .- Rutina auxiliar para AUGURY, emplea las subrutinas: MAINE, BRAINY y HEAT.

121, 197: SISMOGRAMA .- Calcula un sismograma marino sintético, a paritr de un grupo de coef ic4erttes de ref iexión.

122, 199 : BRAINY .- Desarrolla una multiplicación de matrices polinomiales, es la contraparte de la rutina FOLD, sólo que para multicanal.

201: MACRO .- Calcula la correlaci6n cruz para mufticanal, con muestras de series de tiempo de p-canal.

123, 204: MACR0EJ.- 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.

126, 207: MACRO2 .- Subrutina creada para leer e imprimir 108 archivo6 generado8 por e1 programas XACROEJ.

209: DATOS .- 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.

129, 210: 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.

132, 214: HEAT .- Calcula la oorrelacion aruz de eorio8 do tiempo, aon núrnmro de muestras distinto al n8-m do elementos de la serie do tiempo. Permite imprimir lo. teoultados.

133, 216: HEATEJ .- Caloulr la oorrolaeibn cruz empírica para un ejemplo, confsidersndo 108 datos generadas por 0 1 programa MACROEJ en el archivo "rn~08tras.dat". Permite imprimir los archivos generados.

105

..

_I

P

Proatamms mar a Series de TiemDo

219: QUADCO .- Calcula el espectro de cuadratura y autoespectro, de una función de correlacibn multicanal.

136, 223: COHERE .- Calcula magnitud y atraso de fase de la coherencia de dos series de tiempo.

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 imprimir- directamonte 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 y E! respectivamente. 2 3 Escriba los coeficientes del polinomio A . c11 = 1 C2-J = 2 Escriba los coeficientes del polinomio B. c11 = 1 c-] = -1 c 3 1 = (3.5

Producto de polinomio pi )c E : C13 1 .(3:)(:1 C21 1.000 c31 -1 .5(:)(:) C41 1 .o00

P O L Y D V

Escriba N, M y L respectivamente. PI L

1 5 Escriba los coeficientes de 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. Q C i I = c 1.0000 , Q.OO0O 3 QCZI = C 0.5000 , (:).O000 3 QCS3 = C 0.2500 , O.CiócSó 1 QC41 = C 0.1250 , O.(:)OOO 3 QC51 = C 0.0625 , 0.00130 1

P S U R T

Matriz I n v e r s a .

109

ADJUG L1.1 E 1 7 ADJUG Ci.1 CL3 ADJUG C 1 1 E31 ADJUG C 1 1 C41 ADJUG C 2 J C i l ADJUG C 2 7 C 2 3 ADJUG Ciz l C31 ADJUG C 2 7 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.

Escriba los coeficientes de autacorrelacían. C i l = ir', c 2 1 = 4 Escriba los coeficientes del lado derecho. c 1 1 = ,-, .L c 2 7 = <:I

'Z &

111

I N V T O F '

E s c r i b a e l orden de l a mat r i z : T p l i t z .

Escriba l a pi-imera fi1.a de la m a t r i z de T p 1 I . t ~ . c11 = I(:) C 2 - J = 4 c 3 1 = 1 C43 = 4 c 5 1 = 4

5

M a t r i x I n v e r a s a :

112

113

S P U R

Escriba

Escriba MEllClI MCZlC11 M C 3 7 C Y. 3 MC 1.1 CLI MC2lC23 MC3lC21 MC1lC3l M C 2 l C 3 1 MC3ICS3

3 el arden de la matriz.

las coeficientes d e la Matriz(i,j). = 5 = 6 = 7 = 3 = 4 = 5 = 1 - 2 - = 9

Suma de la Diagoanl ie.(X)

S H A P E

Los coeficientes C de la actual salida del filtro s o n : CC11 = 1.350507 C1.21 = 0 . i 8H i .34 CC31 = -1.(:)14832

El rangcri de error cci.acir6tico entre deseada y actcial es : 0.6789634

115

Escriba e1 n ihe rn de coeficientes de A (rni-1) = 2

C H A P E

Los coeficientes del filtro de forma de onda son : AC11 = (:).63388(3 AC21 = 0.699454

El rariqo d e error cctadrdtico entre deseado y actual es : 0.8825136

Los Coeficientes d e l a onda de entrada B son:

Los coeficientes del filtro 'spike' s o n :

La posición bptima d e 'spike' es : 12

El rango d e error ciiadratico e5 : 0.2861007

Los coeficientes de ' 5 ' s o n :

117

S P I t:: E

L.05 Coeficientes de 1.a onda de ent rada E 5on:

L.as coeficientes del filtro ‘spike‘ son :

La posición Optima de ‘spike’ e5 I 12

E l rariyo de errar cuadrAtico e5 : 0.2862729

Los co~ficientes de ‘ 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 de 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 coeficientes C d e la actual salida del filtro s o n : CC11 = (2.297755 CC21 = 0.198428 CC31 = 0.07430C) CC41 = 0.425139 CC53 = 0.776816 CC61 = 0.85(3364 CC71 = Ci.895027 CC81 = (5.332212 CC9.1 = --Ci.(l91?91 C:C1(31 = -0.076546 CC111 = -0.012018

E l error m i n i m o es el Error [81 = : (:~.1200710 El error de rango cuadrático es = : 0.0769016

120 - “._lf- Ilyll_

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 , NCA y I-A respect i vamente. 3 2 -.. ... ?I

2 3 Escriba las coeficientes de B Clcl Crenyl Ccoll. LB = 1

C I I C l l = (3 C l l C 2 1 = (3 c 2 3 c 1 1 = 1 [2][2] = (:)

C l l C 1 l = (:I

c 1 1 c 2 1 = 3. c 2 1 c 1 1 = 1 c21c21 = 1

C i I C I l = 1 C i l C 2 1 = 1 C 2 1 C i l = (1) C 2 I C 2 1 = (3

LB I 2

LB = 3

Los coeficientes de C.

t l A C Ft í3 -- E j e m p l o

P r o y r a m a M A G R O - Ejemplo

TABLG DE MUESTRAS 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 XC91= 107.06 X C I O l = 79.06 X C 1 1 1 = 38.C36 X C 1 2 1 = 21 .O6 X C 1 3 Y = -8.94 XC143= -23.94 X C 1 5 1 = -36.94 XC161= -22.94 XC173= 36.r.i6 XC181= 85.Ci6 XC191= 84.06 XC2(:il= 71 .O6 X C 2 1 ] = 43.i:)h X [ 2 2 ] = 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 xc311= -32.94 X C 3 2 1 = -12.94 X C 3 3 3 = -1.94 XC341= -3.94 X C 3 5 1 = 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

X C 5 3 1 = -42.94 XC541= -44.94 X C 5 5 1 = -38.94 XC561= -29.94 XC577= -10.94 XC581= 3.06 XC991= 15.06 XC601= 20.06 XC611= 24.06 XC623= 1.06 XC637= -18.94 XC641= -38.94 XCt?51= --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 [7 J ]= --- .r~.94 XC741= -55.94 XC751= -31.94 XC761= -6.94 XC771= 15 .O6 XC781= 51 .O& XC791= 77.06 XC801= 49.06 XC811= 19.06 XC821= 17.06 XC833= 7.06 XC841= -7.94 XC851= -25.94 XC861~ -39.94 XCS71= -42.94 XC881= -23.94 XC891= 8.06 XC901= 47.06 XCY11= 49.06 XC921= 30.06 XC931- 12.(36 XC941= -2.94 XC951= 0.06 XC961= -16.94 XC971= -30.94 XC981= -39.94 XC991= -9.94 XC10(31= 27.06

X C l ( 3 5 1 = -63.93 XClC)61= -63.93 XC1(371= -91.93 XC1081= 22.07 XC1(:)91= 38.07 XC1101= -43.93 X C 1 1 1 1 = 34.07 X C 1 1 2 1 = 1(:)2.(37 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 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= -6T 4 . 93 X C 14.0 1 = -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= -3t : i .C?3 X[I51:1:: 7.07 X C 1 5 L ] = . -:y?"c?:., x1:1531= -43.93 X C i . 5 4 1 = -41 -93 X C 1 5 5 1 = --5(3.92 XC1561= -28.9:5

XC4?1= -16.94 XL501= -22.94 XCSlI= -30.94 X C 5 2 1 = -39.94.

X C l ( : ) í l = 91 .O7 XC1023= 49.67 XC1(331= -60.93 XC1041= -93.93

X [ 1 2 t ] = -t33.?3 X [ 1 2 L ] = -&3.92 X [ 1 2 3 ] = -51.93 X [ 1 2 4 ] = -6S.93

123

824

P r a g r a m a P! A C H Q - Ejemplo

CQEF I C I ENTEZC DE CORFIELRC T ON G

TABLn 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 XC3][1] = 19.<jh X[3]C21 = -&:).Y3 xc31cy1 = -31.97 XC4lC11 = -11.94 XC4lCil = --t=lT .4. 93 xc41c31 = 99.03 XC5IC11 = -15.94 XC57C23 = -6T CJ . 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 XCSlC11 = 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 xc111c11 = 313.c.,¿ X C i l l E 2 7 = 34.07 xc111c31 = Y.C)3 XCl21C11 = 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

XC231C11 = 13.Ct6 XC23lC21 = -51.93 XC231C31 = -27.97 XC24lC11 = 0.06 XC24lC23 = -63.93 XC24lC31 = -51.97 XC25lC11 = -5.94 XC25lC21 = -26.93 XC2SlC31 = -1.97 XC26lCJ.l = -25.94 XC26lC21 .= -49.93 XCZ6lC31 = -19.97 XC271c11 = -30.94 XC27lC21 = -52.93 XC27lC31 = 12.03 XC28lC11 -40.94 XC28ltZl -35.93 XC281C33 = -18.97 xc291c11 = -42.94 xc297c21 = -44.93 XC29lC31 = -12.97 XC30lC11 = -39.94 XC3C)IC21 = -33.93 XC3OlC31 = 15.03 XC31ICll = -32.94 XC31lC21 = -52.93 XC31lC31 = -38.97 xc321c11 = -12.94 xc321c21 = -37.93 xc321c31 = -11.97

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 XC38lCll = -36.94 XC38lC21 = -46.93 XC38lC31 = -70.97 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 XC43lC11 = -41.94 XC43lC23 = -48.93 XC433C37 = 79.03 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 xc511c11 = -30.94 XC511E21 = '7.07 xc311c31 = -7.97 XC52lC11 = -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 xc551c11 = -38.94 XC55lC21 = -r-- 3Li.93 xc551c31 = -18.97

XC22][1] = 2(:).(56 XC22lC21 = -63.93 XC22lC31 = -5.97

XC33][1] = -1.94 XC33lC:?1 = -6.7 .i . 93 XC33][3] = 101.tj3

127

I_ "I-

--*, . - -- - *---. . .*. ". - d.

128

t l R í: R O - GENERAI-

Escr-iba l o n g i t u d de CorreLaciOn Cruz : 1Ci

Programa M R C I4 U -I General

T A B L A 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 XC l t : ) l= 79.06 X C 1 1 1 = 38.06 X 1 1 2 1 = 21 .O6

X C 1 7 1 = 36.(:)6 X C 1 8 1 = 85.06 XC191= 84.06 X C X ) I = 71.06 XC2j . ]= 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. X C 3 5 1 = 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 XC491- -16.94 XC501= -22.94 X C 5 1 3 = -30.94 X C 5 2 1 = -39.94 'xC531= -42.94 XC541= -44.94 XCSSl= -38.94 XC561= -29.94 X C 5 7 1 = -10.94 X C 5 8 3 = 3.06 XC591= 15.06 XC601= 20.(:)6 XC617= 24.06 XCb21= 1.06 XC631= -18.94 XC641= -38.94 XC651~ -33.94 XC661= 1(:).[35 XC6.71~ 75.06 XC687= 91 .O6 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 XC771= 15.06 XC781= 51 .O6 XC791= 77.06 XC8(:)1= 49.06 XC811= 19.06 XC821= 17.i:)h XC831= 7.06 XC841= -7.94 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 XCll41= 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 -h7 d . 9-:' ,.J

X[1,>?1].- , ~ , 77 \i X C - J 2 2 ] = -153.93 X C i 2 3 ] = -51.93 XC124]= -6. d I 8 9-? ,.J

X C 1 3 7 = -8.94 XC141= -23.74. X L 1 5 1 = -36.94 XC16'J= -22.94

629 - 3 = - 35 *y-:. == -173 9 - 7 XI 1 R] Y 7 . ..: f -

Prcqr-ama M A C !? 13 -- General

131 --- I -I-*..---

E:e;crii ha rl L

*r

L

,7

P I

Escriba LY = 1 c13r .11 t l I C 2 1 C2lCl.l c 2 1 c 2 1 L Y = 2 C l l C 1 1 t l l C 2 1 t 2 3 C l l c23cza

Escr-j. ba

LC

1.05 cueficientes de X C1x3 Crenc~l [col]

NRY, PJCY y 1.Y respectivamente.

los coeficientes de Y Cly3 tren57 Ccol7 .

la longitud de la correlación c r u z LG : 3

Programa H E A T

TABLA DE COEFICIENTES C

132

c ..

H E k "í- - Ejemplo

Escriba la l o n g i t u d d e la correlacibn c r u z LG : 10

F a v o r r-1~ ecperai- un momento...

TABLA DE MIJESTRAS X = Y

X C 1 3 C 1 1 X E f ' l C 1 . 7 xc31 I: 1 1 xc41c11 xc51c11 xc6Ic11 xc71c11 X C 8 l C 1 1 xc91 c 1 1 x c 10 1 c 1 1 X C 1 1 l C 1 1 xc121c11 xc131c11 xc141 c 1 1 x c 151c 1 1 X C 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 X C 4 ( : ~ l c l l x c 4 1 IC 1 1 xc421c11 x c43 1 c 1 1 y r w i r i 1-

54.06 XClICZl 91.07 XCl?l:33 -31.97 35.í:)& X[2]Cf] 49.07 hff]C3] -35.97 19.06 XC31C21 --bC).SS XC3lC31 -31 -97 -11.94 XC41C21 -53.93 xc41c71 99.(53 -15.94 XC51C21 -63.93 XC5lC31 -34.97 -39.94 XC6lC21 -63.93 XC6lC31 -97.97 -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 - 7 O . 9 7

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 ~ ~ ~ 9 4 XC16lC21 109.07 XC16lC31 118.03 36.06 XC17lC21 174.07 XC17lC31 73.03 85.66 XC18lC21 83.07 XL18lC31 -27.97 84.06 XC19lC21 -63.93 xc191c31 43.(13 71 .O6 XC2OlC21 -63.93 XC2OlE31 -28.97 43.06 XCZllC21 -63.93 XC21lC31 62.03 2(:).0& X[22][2] -67 LJ. 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 79.03

--~L-,~B~LL..K.L;- 1. . . - t23,m x r 44 1 c I-I -TI -49.97

X C 1 (1 1 C 2 1 -4 C.; .?if X C 1 (1) 1 C 3 1 38.06 XC11lC21 34.07 XC11lC31 9.03

133

c

X L 4 5 3 C 1 7 x c 4.6 1 c 1 :I x c471 C 1 3 X C 4 8 1 C 1 1 x C 491 c 11 x C 5 ~ : ~ 1 C 1 1 x c 5 1 3 c 1 1 x c 5 2 1 E 11 X C 5 3 l C 11 xes41 c 11 X C 5 5 1 C 11 X C 5 6 1 C 1 1 X C 5 7 l C l l X C 5 8 1 C 11 x c 5 9 1 c 11 X C 6 O l C 1 1 X C 6 l I C 1 3 X C 6 2 1 E 11 X C 6 3 l C l l X C 6 4 l E 1 1 X C 6 5 l C 1 1 X C 6 6 1 C 1 3 x c (27 1 c 1 1 X C 6 8 1 C 11 X C 6 9 l C 1 1 x c 7 0 1 c 11 x c 7 1 I C 11 x c 7 2 1 c 11 x c731 c 1 1 x c741 c 1 1 x E 7 5 1 c 1 1 X C 7 6 l E l l x c771 C 1 1 X E 7 E I I c 11 x t79 1 c 1 1 x C 8 0 3 t 11 X C 8 1 I C 11 Y; c 82 :I c 1 3 X C831 C 1 1 X C841 C 1 1 x C85 3 I: 1 1 2: C 8 h 3 c l :I x C 8 7 3 C : l l X C O 8 7 c 1 :I x c 9 9 3 I:. 11 Y. 1 . l C ) :I [: 1 1 X C . l . n t l 1 'i [ <3 ">

t .i.. 3 1.. 1. 3 xcyy:][:1] i. r: 94 7 I: i :I x C 95 1 c 1 :I X f 9 6 1 C I . 1 x c 97 3 c 1 I x i 9 8 3 e 1 :: X C 9.3 C 1 1

: ..

-32. y4 -11.94 - (3 . Y 4 -5.94 -S6.Y4 -22.94 -30 . 94 -39.94 -42.94 -44.94 -38.94 -29.94 - 1 C) . 94 3.06

15. (56 2 i] . 0 6 24. 06

1.06 -18.94 -38.94

A d . 94 3. O . 06 75 . 06 9 1 . 06 39 . 136 16.06 -9.94 LL. 94

-35.94 -31.94 -6.94 15 . 06 5 1 . 06

49. 06 19. (36 17 . 06 7 . 06

-7.94 -25 . 94 --39 L1 (34 -42.94 La. 94 8 I (76

4 7 . 0 6 49 . O6 ;59 . Ob 1 L . i:)b --2 .) 94

0 . o A -16.94 .- 3 (5 , y 4 .-?-?C> . 94

C? ~ 9 4

-77

5 6 . (36

---

77. (36

-rnT

.-r "

x c 4 5 1 c 2 1 X C 4 6 l C L l

x c471c21 X C 4 8 3 C 2 1

X C 4 9 l C 2 1 X f 5 0 1 C 2 1 X C 5 1 l C 2 1 X C 5 Z l C 2 1 X C 5 3 l C 2 1 X C 5 4 l C 2 1 X C 5 5 1 E 2 1 X C 5 6 l C 2 1 X C 5 7 l C 2 1

X C 5 8 l C 2 1 X C 5 9 l C 2 1 X C 6 0 1 E 2 1 X C 6 l l C 2 1 X C 6 2 l C 2 1

X C 6 3 l C 2 1 X C 6 4 l i 2 3 X C 6 5 l C 2 1

X C 6 6 l C 2 1 X C 6 7 l C 2 1 X C 6 8 l C 2 1 X i 6 9 l C 2 1 X C 7 0 1 E 2 1 X C 7 1 l C 2 1 x c 7 2 1 C 2 1

X C 7 3 l C 2 1 X C 7 4 l C 2 1 X C 7 5 1 ~ 2 1

X C 7 6 l C 2 1 X C 7 7 1 C 2 1 X C 7 8 l C 2 1 X C 7 9 l C 2 1 X C 8 0 1 C 2 1 X C 8 1 l C 2 1 X C 8 2 1 C 2 1 X C 8 3 l C 2 1 X C 8 4 l C 2 1 X C F 3 5 1 t 2 1 X f S 6 7 t 2 1 X C 8 7 l C 2 1 xC8í31c21

x i :891c27 X C 9 0 1 K 2 3 x c 9 1 1 c 2 1 X C 9 2 1 C L I x c 4 3 3 c 2 1 x c 9 4 1 c 2 1 X C 9 5 l C ' r l

X C . 9 6 I C 2 1 X C 9 7 l C 2 1 X C 9 8 3 C 2 1

X C 9 9 1 c 2 1

Froqrama 1-1 E A T .- Ejemplo

G C ~ I C 1 l C 1 1 -23480.89 GC51C1IC21 21825.23 Gt5lC11C31 19236.81 GC5lC2lCll 9203.84 GC51C23CL-I 39321.84 GL5lC2lC31 -270(:)4.61 (s1.5lC3lCll 3138.49 GC51C31C21 24483.04 GC5IC31C31 8257.38

GC6lC1lCll -36839.91 GC6lC1.ICZl 15487.16 GC63CllC31 26885.71 GC61 C21 C 11 3433 .87 GC6lC21 CZI 24305.12 GC61 C21 L31 -1S891.20 GC6lC3lCll -1121.90 GC61C31C21 24960.39 GCblC33CSI -1853Ci.36

GC7lC1lClI -29361.52 GC7lCllC21 28052.71 GC7lCllE31 22032.97 GC7lC2lCll 11327.70 GC7lC21C21 16148.31 GC7lC2lC31 -49618.20 GC7lC3lCll 4226.97 GC7lC31C21 -15377.86 GC71C31C31 82233.60

GC81 C 1 1 C 1 1 -5983.72 GC81 C 11 C 2 3 . 488C)C). 27 GC 81 C 1 3 E31 20742.14 GC8lC21C11 22118.03 GC8lC21C21 4799.21 GC8lC21C31 -16616.73 GC8lC3lCll 9333.69 GC8lC3lE21 -6542.64 GC8lC3lC31 -17112.41

G C 9 1 C 1 1 C 1 1 1 1450. (1) 1 GC9lC2ICll 19302.87 GC91i2lC21 5142.24 GC9~C2IC31 9848.70 GC9lC3lClI 12473.20 GC9lC31C21 7938.74 GC9lC3lC31 -24421.87

22739.85 G C 9 1 C 1 1 I: 2 1 70274.16 G C 9 1 C 1 1 C 3 1

GC 101 I: 11 C 11 4S819.62 GC 101 C 11 C21 864O8.16 G C 101 C 11 C31 -7236.09 GC101~2lC11 6854.48 GCl(:)lC2IC21 13063.64 GC10lCZlC31 -13532.31 GC101C37C11 3470.40 Gt16lC3lC23 -13269.57 GC1OlC31C31 -34044.25

C O H E R E

Para SCl,n,nl escriba L y N : 2 2 Escriba LS = 1 C 1 l C l I C l l C 2 1 c23 c 11 c21c21 LS = 2 C 1 l C l I c 11 c21 c21c11 C2lC21

los coeficientes de S C 1 1 Crengl Ccoll . = 5 = -1.5 = o = 4

= -9 = -0.5 = o = 2

Programa C O H E R E

Tabla de Coeficientes S

5.0000 - 1.5000 O . O000 4.0000

LS = 2

-9.0000 -0.5000 o. O000 2.0000

Programa C O H E R E

Tabla de Coeficientes C

LC = 1

O .3556 O. 3354 180 .O000 1.0000

LC = 2

-1.0000 0.1179 180.0000 O . 5000

1 .

a ARITMETICA 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; c.im=O; 1 return c;

/ * 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 = ' I ) ;

cscanf("%f",&auxl.re) ; printf("\n"); printf(" A.imag.= ' I ) ;

cscanf ( "%f ' I , & a u x l . im) ; pr i ntf I: * \ n \ n" ;

printf ( 'I Escriba el nthnero complejo B.\n\n"); printf(" B.real = "1; cscanf ( "%f 'I , &nuxi!. re 1 ; print f ( 'I \ n" 1 ; printf(" B.imag.= + I ) ;

cscanf ( "%f" ,&aux2. im) ; printf("\n\n");

.

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 / * COHPLEJO * /

1138

/ * MAINE .Rutina que calcula la inversa da, una matriz oimtrica.

N = Orden de la matriz. A = Matriz. B = Matriz Inversa.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> # i nc 1 ude <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 *.it 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) bCil~rI-bLil~m1-btil~ jl*aC jltcaI/ok; bCm3 t i l=bC i I t ml ;

1 for (i=l;i<=k;i++)

for ( j=l; j<=k; j++) bt i I L jl=b[ ilt jl+bt il [rl*btml C j l * e k ; 3

1 / * fin de matriz-inv * / main( 1 € int i,j;

clrocr0; gotoxy(20,5); printfi'lil A I W $\n\n' ) ; for (i=O;i<MAX;i++)

for (j=O;j<MAX;j++l atilCjI=~b~ilCjl~O;

printf(" Escriba el Orden de l a Matriz.\n");

printf(" Escriba los coeficientes de A Crongl Caoll.\n'); for (i=l; i<=n; i++) €

s

scanf í "Wd" ,sin) ; / * T m de dato8 * /

for (jpl; j<=n; j++) C printfí" A tWd3 tWd3 = ",í,j); scanf("Xd",&aCilCjl);

3 1 139

, p i 7 in

c i r s c r 0 ; gotoxy(l5,S); printfi" Matriz Invoraa.\n\n"); for (i*l;i<=n;i++) {

for (j=i; j<=n; j++) {

3 printf(" B CWdl CYdl = %6.3f\n",i,j,bCiltjJ);

3 getcharO;getchar( );clrscr( 1;

3 / * fin de main * / / * MAINE * /

140

/ * NORMEM Normaliza un arreglo por el RMS del mismo

LX = Longitud del arreglo X = Arreglo a normalizar

* / #include <stdlib.h> #include <stdio.h> # i nc 1 ude <coni o. h> #i nc lude <math. h>

#define MAX 10

float xCMAXl , r m s = O ; int i , lx=O;

for (i=O;i<MAX;i++) xCiI=O.O; / * Inicializa rogistro * / clrscr0; gotoxy(20,5); printf("N O R M E M\n\n"i;

printf(" NQmero de elementos = "1; / * Toma de dato8 * / scanf ( " X d " ,&lxi ; printf(" Escriba los coeficientes de X. \n"); for (i=l; i<=lx; i++i C

printf(" XCXd3 = ",ii; cscanf ( "%f ' I , &xC i 1 i ; printf( "\nu 1;

1 for (i=l;i<=lx;i++i rms=rms+xCi3*xCiI; / * Cálculo do l a funci6n * / rms=sqrt(rms); for ( i = 1 ; i <= 1 x ; i ++ i xi i 1 =xC i 3 / rms ;

printf("\n El arreglo X normalizado es : \n"); for (i=l;i<=lx;i++) printf(" XtYdl=W6.2f ",i,xtiIi; g e t c h a r 0 ; g e t c h a r O ; c l r s c r O ;

1

/ * NORM1 Normaliza un arreglo por el primer elemento del mismo.

LX = Longitud del arreglo X = Arreglo a normalizar

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h>

#define MAX 10

main( 1 {

float xCMAX3 ,primero=O; int i , lx=O;

for (i=O;i<MAX;i++) xCil=O; / * Inicializa registro * / clrscro; gotoxy(20,5); printf("N O R M I\n\n");

printf(" N6mero de elementos = ' I ) ;

scanf ( " X d " , &l xi ; printf(" Escriba los coeficientes. \n"); for ( i=l; i<=lx; i++) {

printf(" CWdl = ",i); cscanf ( "%f ' I , &xC i 1 1 ; printf ( "\n" 1 ;

1 prirnero=xC 11 ; for (i=l;i<=lx;i++) xCil=xCil/primero;

/ * Toma de datos * /

printf("\n El arreglo normalizado es : \ n u ) ; for (i=1; i<=lx; i++) printf ( 'I Cldl %6.3 f " , i ,xC i l l ; ge tcha r0 ; ge tcha rO ;c l r s c rO ;

1

142

. X ~ , I Y " . . I A - ,_<_II,--"I-" *- . , - ~ Y -I------

/ * NORMAG Normaliza un arreglo por el elemento más grande del mismo.

LX = Longitud del arreglo X = Arreglo a normalizar

* /

#include <stdlib.h> #include <stdio.h> #include <conio.h> # i nc 1 ude <math. h>

#define MAX 10

float xCMAX1 ,grande=O,aux; int i , 1 x 4 ;

for (i=O;i<MAX;i++) xCil=O; / * Inicializa registro * / clrscr0; gotoxy(S0,5); printf("N O R M A G\n\n");

printf(" NQmero de 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 'I ,&xC i 1 I ; printf ( "\n" 1 ;

1 for (i=l; i<=lx; i++) {

i f ( xi i 1 <O 1 aux=-1 *xC i 1 i

if (grande < aux) grande=aux; 1 for (i=l;i<=lx;i++) xCil=xCil/grande;

else aux=xCiI;

/ * Toma de datos * /

printf("\n El arreglo normalizado es : \no'); for (i=l; i<=lx; i++) printf(" Eldl %6.3f", i ,xCiI i ; getchar( I;getcharO;clrscrOg

1

143

/ * CROSS Correlación cruz de dos vectores.

LX = longitud de X = m + 1 X = (xO,xl, ... ,xm) LY = longitud de Y = n + 1 Y = (yO,yl, ... ,yn) LG = longitud deseada de la correlacibn cruz = k + 1 G = (gO,gl, ... ,gk)

* / #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <conio.h>

#define MAX 7 1

main( 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 ( I' Escriba LX, LY y LG respectivamente. \nn 1 ; scanf("YdWdKd",&lx,&ly,&lg); 1% Torna de data6 * / printf(" Escriba los coeficientes del vector X . \ n " ) ; for (i=O;i<lx;i++) C

printf(" Cldl = ' I ,i); cscanf ( "%f I' , &xC i 1 1 ; printf("\n");

1 printf(" Escriba los coeficientes del vector Y.\n"); for (i=O;i<ly;i++) C

printf(" CXdl = ",i); cscanf ( "Xf ' I ,&y[ i 3 1 ; printf("\n");

1

for (j=O; j<lg; j++) {

if (ly < (lx-j)) menor = ly; else menor = lx-j;

gC ji=O; for(i=O;i<menor;i++) gCj3=gtj3+xt~+i3~ytil~ / * Producto punto * /

1

printf("\n Vector de correlaci6n cruz : \n"); for (i=O;i<lg;i++) printf(" CKdI K7.5f ",i,gCiI); g e t c h a r 0 ; g e t c h a r O ; c l r s c r O ;

1

144

/ * FOLD Multiplicación de polinomios 6 CONVOLUCION.

LA = longitud de A = orden m A = (aO,al, ... ,am) LB = longitud de B = orden n B = (bO,bl, ... ,bn) LC = longitud de C = m+n-1 c = (CO,Cl, ... ,c IC)

* / #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <conio.h>

#define MAX 10

main( 1 { float aCMAXl,bCMAXl,cCMAXl; int la, lb, IC, i, j, k;

for (i=O;i<HAX;i++) aCil=bCil=cCil=0; / * Inicializa Arreglos * / la=lb=lc=O;

clrsc print scanf

r 0 ; gotoxy(20,5); printf("F0LD - Convolución\n\n"); f(" Escriba el Orden de l o a polinomios A y B respoctivamente.\n"); ( "WdWd" ,&la,flb) ; / * Toma de datos * /

printf(" Escriba los coeficientes de1 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 ' I , &bC i 1 1 ; printf ( "\n") ;

1 1 c= 1 a+ 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 j 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;

1

1 4 5

/ * POLYDV División de polinomios 6 Deconvolución.

N = n + l DVS = (bO,bl, ... ,bn) M = m + l DVD = (aO,al, ... ,ami L = k + l Q = (qO,ql, ... ,qk)

* / #include <stdlib.h> #include <stdio.h> #include <mem.h> # i nc lude <coni o. h>

#define MAX 10

main( 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; / * Inicializa Arreglos * / ; n=m= 1 =O

/ * Muow o l o ~ n t o s * /

clrscr0; gotoxy(20,5); printf("P O L Y D V\n\n"); printf(" Escriba N, M y L respectivarnente.\n"); scanf ( "WdWdKd" ,&n,&m,&l) ; / * Toma de dato8 * / printf(" Escriba los coeficientes de DIVISOR.\n"i; for (i=l;i<=n;i++) {

printf(" CKdl = ",i); cscanf ( "Xf I' ,&dvsC i 1 i ; printf("\n");

1 printf(" Escriba los coeficientes de DIVIDENDO.\n"); for ( i=l; i<=m; i++) C

printf(" tXd1 = ",i); cscanf ( "Kf I' ,&dvdC i 1 1 ; printf("\n");

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

/ * PSQRT Encuentra los m+l primeros coeficientes de la raíz cuadrada.

N = n + l C = (cO,cl, ... ,cn) Polinomio M = m + l A = íaO,al, ... ,am) R a í z Cuadrada

* / #include <stdlib.h> #include <stdio.h> #include <conio. h> #i nc lude <math. h>

#defino MAX 10

main( 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; / * Inicializa Arreglos * / n=m=O ;

clrscr0; gotoxy(20,5); printf("P S Q R T\n\n"); printf ( 'I Escriba N y M respectivamente. \nu 1 ; scanf ( "%d%d",&n,&m) ; / * Tom 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;

ps=o ; else pa=cCiI;

ih=i/2; for (j=2;j<=ih; j++i C

k=i- j ; ps=ps+aCjl*aCk+ll;

1 pa=pa-2*pa; if ((2*ih-i)!=O) pa=pa-(atih+lI*atih+ll~; aCíl=pa/ta;

1

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); g e t c h a r 0 ; g e t c h a r O ; c l r s c r O ;

1

147

/ * POLRT Calcula raíces reales de un polinomio.

XCOF = (aO,al, ... ,am) , a0 != O . M = Orden del polinomio.

COF = Polinomio auxiliar de orden m+l. ROOTR = (re Z l , re 22, ... ,re Zm) , raíces reales. 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 + j im Zi , para i=1,2, ... , m .

#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h>

#define MAX 10 #define CIERTO 1 #define FALSO O

float xcofCMAX1 ,cof int n,m,ier;

tomada t os ( 1 E int i;

IA

for (i=O;i<=MAX;i++)

1 ,rootreCMAXl ,rootimCMAXI;

/ * Inicializa Arreglos * / xcof C MAXI ncof CXAXl=rootreCMAXl =root imC MAXI=O ;

clrscr0; 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 I' ,&xcof C i 1 1 ; pr i nt f ( " \ n 'I 1 ;

1 1 / * fin tomadatos * /

valida0 E

ier = O ; n=m; if (xcofEn+ll == O ) ier = 4;

else if (n <= O ) ier = 1 ; else if (n > 36) isr = 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;

-- 148

1 i".. ~ IC.-..

eti45=eti50=eti55=eti60=CIERTO; eti 14O=FALSO;

xpr=ypr=k j i=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; xo=- 10* yo; yo=- 10 * x; x=xo; y=yo; 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; / * 60 * / 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; u=u+cofC ll*xt2; ux=ux+i*xt*cofC13; uy=uy-i*yt*cofCll; / * fi * / xt=xt2; yt=yt2;

v=v+cof c 11 *yt2;

1 sumsq=ux*ux + uy*uy; if (sumaq ! = O ) E / * if sumsq=O go 110 * /

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; if (ict<500) eti60rCIERTO; / * etibO=CIERTO * /

else if (ifit!=O) I x=xpr ; y=ypr ;

else if ((in-5)>=0) ier=3; ?

1 else C

for (l=l;l<=nxx;l++) C / * 100 = /

cofC1l=temp:

ternp=xc of C k j i - 1 + 1 3 ; xcofEkji-l+ll~~~fC 1 1 ;

1 i temp=n; n=nx; nx=itemp; if (ifit==Ol eti55=CIERTO: / * if ifit!=O go 120 * /

1 1 / * if sumsq !=O * / else if (ifit==O) etiSO=CIERTO; . / * 110 if ifit=O go 50 * /

x=xpr; / * otro go 120 * / y=ypr;

else C

?

if ( (!eti55) & (!etiSO) & (ier==O) & (!etióO) 1 C 149

if ( (abs(x/y)-lE-Q) >= O ) C a 1 pha=x+ x ; sumsq=x*x+y*y ; n=n-2; eti 140=CIERTO;

I

I / * if u !=O * / 1

else E x=O ; nx-- ; nxx--;

I

/ * 130 * /

if ( (!eti55) 6( (!eti50) & (!eti60) & (ier==O) 1 E if (!etil40) E

y=sumsq=O ; / * 135 * / alpha=x; n-- ;

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 13 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 while ( (eti45) ::(etiSO) I:(eti55)!:(eti60) i; / * c i c l o * / "I /* fin evalua * /

main( 1 E int i;

toma-datosí 1 ; valida( 1 ; if (ier==O) evalua(); if (ier==O) C

printf í "Coeficientes reales de la ra í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.

AINV = Matriz Inversa. DET = Determinante de a. ADJUG = (Adjugate) = adj A = (det a) inv (a). P = Coeficientes del polinomio característico.

* / #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <conio.h> #include <math.h>

#define MAX 5

int aCMAXIEMAX1; float ainvCMAXlCMAX1 ,adjugCMAXICMAXl; float polaCMAX1; i nt det-a, n;

brainy( i { int i , j , k ;

/ * Realiza e1 producto de dos matrices * /

for (i=O;i<=n;i++) 1 % Subrutina Zero * / for (j=O;j<=n;j++)

ainvCilC jl=O;

for (i=l;i<=n;i++) for (j=l;j<=n;j++)

for ( k=l; k<=n; k++ 1 ainvC i 1 C j I=ainvC i I C j ]+al i 3 C kl *ad jug[ kl C j 3 ;

1 / * fin brainy * / scale(esca1ar) / * Multiplica una matriz por un oscalar * / f 1 oa t esca 1 ar ;

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 de sacale * / toma-datos( 1

int i, j; clrscr0; gotoxy(20,S); printf("F A D D E J\n\n"); for (i=O;i<MAX;i++i

for (j=O; j<MAX; j++) / * Inicializa Variables * / aCilCjl=ainvCilCjl=adjuqCllCjl=O;

for (i=O;i<MAX;i++) polacil-O;

/ * Toma de datos * / I - , - . n x d n k - W . J . n de l a M atriz : " I ; - 151

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;

1 1

3 / * fin tomadatos * / faddej() { int i,j,k;

/ * Subrutina MOVE(n,a,ainv) * / for (j=l; j<=n; j++)

for ( i=l; i<=n; i++)

ainvC i 1 E jl=aC i 1 C jl ; / * fin de 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 de HOVE * / for (i=l;i<=n;i++) ad jugC i3C i l = a i nvC i lC i 3 - po l ~ aCk l ; brainy() ;

1 1

/ * 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; deta=polaC nl ; if ((n%2)!=1) € deta=-deta; for (i=l;i<=n;i++)

for (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; for Cd=l;i<=n; i++) E

for (j=l;j<=n; j++ ) E

1 printf(" ADJUG C%dl C%dl = %6.3f\n",i,j,adjugCiICjl);

1 printf("\n DETERMINATE = %d\n",det-a); printf("\n Polinomio Característico d e A " ) ;

for (i=l;i<=n;i++) printf(" %6.3f " , p o l a C i l ) ; getchar( );getchar( );clrscr( 1;

1 / * fin resultado * / main() E

toma-datos ( i ; fadde j ( 1 ; r e s u l t a d o 0 ;

1

_- -

/ * EUREKA Solución a ecuaciones normales de canal simple

LR = Longitud del filtro = m. R = Coeficientes de autocorrelacion = (rO,rl,...,rm). G = Coeficientes de lado derecho.

F = Coficientes del filtro = (fO,fl,...,fm). A = Operador de prediccíon de error.

* / #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <conio.h>

#define MAX 10

main( 1 fa- poiydvín,dvs,m,dvd,l,q) * / 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; / * Inicializa Arreglos * / clrscro; gotoxy(20,5); printf("E U R E K A\n\n");

printf(" Escriba longitud del filtro.\n"); scanf ( "Kd" , &lr 1 ; /* Toam do datos * / 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 ( I' \ n" 1 ;

1 printf(" Eacriba los coeficientes del lado derecho.\n"); for ( j = 1 ; j<=lr: j++1 1

printfí" CKd1 = ",j); cscanf ( "Kf" ,&gC j 1 1 ; printf("\n");

1 v=rC 11 ; d=rt21; aC 13=1;

q=f C 11 * r C 21 ; if(lr!=l) C

fCll=gCll/v;

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 11 *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++) C

k=l-j+2; d=d+aC j 1 *r C kl ; q=q+fC jl*rCkl;

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"); for (j=l; j<=lr; j++) printfi" C%dl %8.6f, ' I , j,aCjl); printf("\n");

1 getcharO;getchar( );clrscrO;

3

155

/ * INVTOP Cálculo de la inversa de matriz Tplitz.

LR = Orden de la matriz. R = Primera fila de la matriz de Tplitz.

(2 = Matriz Inversa. SPACE = Arreglo auxiliar de trabajo.

* / #include <stdlib.h> #i nc lude <s tdi o. h> #include <mem.h> #include <conio.h>

#define MAX 10 #define MAX2 20

int lr,h: float rCMAX21 ,qCMAXlCMAXI ,spCMAX21 ,sp2CMAX21;

/ * Eureka Soluci6n ecuaciones normales de canal simple.

LR = Longitud del filtro = m. R = Coeficientes de autocorrelncíon = (rO,rl,...,rm). G = Coeficientes de lado derecho. F = Coficientes del filtro = (fO,fl,...,fm). A = Operador de prediccíon de error.

* / toma-datosí 1 E int j , k ;

lr=h=O; for (j=O;j<(2*MAX);j++) sp[j3=sp2CjI=O: / * Inicializa Arreglos * / for (j=O;j<MAX;j++)

for (j=O; j<MAX; j++) rC jl=O; for ( k=O ; k<MAX; k++) qC j í 1 kl=O;

clrscr0; gotoxy(20,5); printf("1 N V T O P\n\n");

printf(" Escriba el orden de l a matriz Tplitz.\n"); scanf ( "Xd" ,&lr) ; /* Toma de datos * / 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 sc a nf ( " Xf 'I , &r C J 1 1 : pri ntf ( 'I \ n" 1 ;

1 1 / * fin tomadatos * / 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

- €56 I__

l<=lr:l++)

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 13 *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í ) ;

/ * Subrutina IHPUL.3 * / for (k=l;k<=lr;k++) C

for (i=l;i<=lr;i++) spLil=O; spC kl=l; h=k; eureka( 1 ;

1 printf ( " \ n Matriz Inveraaa : \n" 1 ; for (i=l;i<=lr;i++) C

for ( k=l ; k<=l r ; k++ i pr intf ( " t Xd, Xdl X8.6f " , i , k, qC i 1 t kl 1 ; printf("\n");

1 getchar~);getchar~);clracrO;

1

157

/ * TRIANG Matriz transpuesta de un matriz triangular.

N = Orden de la matriz. TOP = Matriz dada.

S = Matriz triangular. SAPACE = Matriz auxiliar.

* / #include <stdlib.h> #include <stdio.h> #include <math.h> #include <conio.h>

#define MAX 10

main( 1

I float topCMAXICMAX1 ,sCMAXICMAXl ,spaceCMAX*MAXI; f 1 oat e, x ; int n,l,i, j,k,im,ip;

for (j=O; j<MAX; j++) / * Inicializa Arreglos * / for (i=O;i<MAX*MAX;i++) spnceCiI=O;

for (i=O;i<MAX;i++) top~jlCil=sC~lCi1=0;

clrscr0; gotoxy(20,S); printf("T R I A N G\n\n'); printf(" Escriba el orden de la Hatriz.\n"); scanf ( "%d" , Ln 1 ; / * Tom de datos * / printf(" Escriba los coeficientes de l a Hatriz(i,j).\n"); for (j=l;j<=n;j++)

for (i=l;i<=n;i++l I printf(" CXd,%dl ' I , j,i); cscanf ( " W f 'I , &top C j 3 C i 1 1 ; printf("\n");

1

ip=i+l; i m= i - 1 ; sCi3Cil=sqrt~topCilCil-spacetil~; if (n==l) break;

for (i=l;i<=n;i++) I

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 ki+x*x; sC i 1 C kl=x;

1 ?

1 printf(" Matriz Inverasa :\n"); for (i=l;i<=n;i++) C

for ( k= 1 ; k<=n; k++ 1 p r i ntf ( printf("\n");

C Wd, %dl %6.3 f , " , i , k, st i 3 C kl 1 ;

? getchar( ):getchar( );clrscr( 1;

1

I58

/ * SPUR Suma de la diagonal de la matriz.

N = Orden de la matriz. TOP = Matriz dada.

SPUR = Suma de la diagonal. * / #include <stdlib.h> #include <stdio.h> #include <math.h> #include <conio.h>

#define MAX 10

main( 1

E 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;

f o r (j=O; j<MAX; j++) / * Inicializa Arreglos * / 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"): scanf ( "Xd" , &n 1 ; / * Tom de datos * / printf(" Escriba los coeficientes de l a Hatriz(i,j).\n"); for í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 j 1 1 ; pr i nt f ( 'I \ n" 1 ;

1

spur=spur+topCilCil; ip=i+l; im=i-1; sC i lC i l=~topEi3~ i l - spaoe [ i l ) l if (n==l) break;

for (i=l;i<=n;i++) I

else E for (k=ip;k<=n;k++) C

e=O ; if (im!=O) for ( l=l~l<=irn; 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 1

1 printf("\n Suma de l a Diagoanl W6.2f ",spur); getcharí );getcharO;clrscr( 1;

1

/ * MATRAN Emplea permutaciones sobre la transpuesta de una matriz rectangular hacia arriba.

N = Ndmero de filas. M = NGmero de columnas. MATRIX = Matriz dada.

MATRIX = Matriz transpuesta. * / #include <stdlib.h> #include <stdio.h> #include <math.h> #i nc lude (coni o. h>

#define MAX 10

main( 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*); scanf ( "XdXd" , &m, &n 1 ; / * Toma de datoo * / 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; i j = 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= ka tch ; ij=ji;

)while (ij!=l); 3

1 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++: I60 1

1 getchar( 1 ;getchar( 1 ;clrscr( 1;

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 = m + l . * /

#include <stdlib.h> #include <stdio.h> #i nc lude <coni o. h> #include <math.h>

#define MAX2 20 #define PI 3.1415927

main( 1 E 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"); printf ( 'I Angulo - Valor\n\n" 1 ;

fm=m+m-2; mm=m+m- 1 ; for (i=l;i<=mm;i++) C

angulo = ((i-l)*2*PI)/fm; tabletii=cos(angulo); printf(" '117.Sf 17.5f \n" ,angulo, table[ i 3 1 :

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 ( 2 * m ) 1;

M = m + l . * / #include <stdlib.h> #include <stdio.h> #include <coni o. h> #include <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 \n"); scanf ( "%d" ,&m) ; printf("\n La tabla de Senos es :\n\n"); printf(" Angulo - Valor\n\n");

f m=m+m-2 ; mm=m+m- 1 ; for (i=l;i<=mm;i++) {

angulo = ((i-l)*L*PI)/fm; table~iJ=sin(angulo); printf(" X 7 . 5 f X 7 . 5 f \n",angulo,tabletil);

f g e t c h a r 0 ; g e t c h a r O ; c l r s c r O ;

f

/ * COSP Calcular el k-simo valor de una transformación de Seno o Coseno.

TABLE = Tabla de Cosenos (cosO,cos,cos 2,cos 3,...,cos (2*m1 1; ó

M = m + l . Tabla de Senos (sinO,sin,sin 2,sin 3,. ..,sin (2*m) 1;

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h>

#define MAX2 20 #define PI 3.1415927

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( 1 C float angulo; int i,rnrn,fm;

/ * valor m6ximo de ' 2 * m ' * /

f m=m+m-l; mm=m+m- 1 ; for (i=l;i<=iam;i++) {

angulo = ((i-íi*S*PI)/fm; tableCiI=ftin(angulo);

1 1 / * fin de seno * / tomadatos( 1 c int i;

for (i=O;i<MAXL;i++) tableCil=O; opcion='c'; clrscr0; gotoxy(20,5); printf("C O S P\n\n");

printf(" Escriba el valor de n = "1; scanf ( "Wd" ,En) ; n++;

printf("\n Los Coeficientes del Vector X son:\n"); for (i=l:i<=n;i++) C

1 printf(" Desea valor de Seno ( S I 6 Coseno (cl : "1; opcion=getcharO;opcion=getcharO;

printf ( " XL%dl = ' I , i 1 ; scanf ( "%f" ,&datal 1 3 1 ;

--

printf(" Escriba el valor de m = "1; scanf("%d",&m); m++; 164 a ( O < = k <= m ) : ' I ) ; --.-n-Asrma - valor dese

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; if (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 j 3 ; j=j+kk; if ( ( j-mm) >O 1 j= j-mmm;

1 / * fin de cosp * / 1

main() c

toma-datosí 1 ;

resultado0; COSP();

1

165

/ * TRIG Calcula el valor de la Transformada de Fourier, por fórmulas trigonomtricas de suma de ángulos, para senos y cosenos.

X = (xO,xl, ... ,xn). LX = Longitud de X . W = Frecuencia Angular.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> # i nc 1 ude <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 ( I' \ n" 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; ~ = = C O ~ W * C O S ~ W - S ~ nw*sinnw; sinnw=cosw*sinnw+sinw*cosnw; cosnw=t;

1 printfí" El valor para Coseno es printf(" El valor para Seno es ge tcha r0 ; ge tcha rO ;c l r s c rO ;

1

: %7.5f\n",coseno); : W7.5f \ n " , seno 1 ;

166

/ % DRUM Calcula la fase de una curva continua. * / #include <stdlib.h> #include <stdio.h> #i nc lude (conio. h> #include <math.h>

#define MAX3 20 #define PI 3.141559265

main( 1 E float faseCMAX31,pj; int lonfase, 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 Calcula los coeficientes de fase de un vector complejo * /

#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <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 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

ximC i l=reC i ]=amp[ i l=phzC i ]=O;

printf(" CXdl = " , i i ; cscanf ( "%f 'I ,&re[ i 1 i ; pr i n t f ( 'I \ n" 1 ;

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 ' I , &ximi i 1 1 ; printf ( ''\n") ;

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"); for ( i=l; i<=l; i++) printf ( 'I CIdl W7.5f 'I, i ,phzl i I ) ; getchar( );getchar( 1;clrscrO;

3 / * POLAR */

168

/ * SHAPE Calcula el filtro "weaveshaping' 6 de forma de onda.

B = Onda permitida en la entrada al filtro. LB = Longitud de B igual a n+l. D = Onda permitida que es la deseada a la salida del filtro. LD = Longitud de D igual a k + l . LA = Longitud de A, ó número de coeficientes del filtro, igual a m+l.

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. CASE= Rango cuadrático del error entre el actual y el deseado.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <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 de B (n+l) = "1; ecanf(*%d",&Ib); printf("\n Los Coeficientes de la onda de entrada B son:\n"); for ( i=l; i<=lb; i++) E

3 printf("\n Escriba el número de coeficiente. do D ( k + l ) = "1; rcanf('%d',lld); prfntf("\n Los Coeficientes de la onda doroada D a la salida son:\n'); for (i=l;i<=id;i++) C

3 printf("\n Escriba 0 1 número de coeficientes do A ( m + l ) = "1; 8canf("%dn,&la);

printf(" B[%dl = '',i); scanf("%f",&bCiJ);

printf(" DCldl = ",i); scanf(*Xf",&dCil);

3 I * fin de tom datos * / resultado0 E int i;

clrscr( 1 ; gotoxy(20,3) ; printf ( " S H A P E\n\n" i ; printf("\n Los Coeficientes de la onda de entrada B son:\n"); for ( i=l; i<=lb; i++) E

3 printf("\n\n Los Coeficientes de l a onda deseada D a la salida son:\n"); for (i=l;i<=ld;i++) E

printf(" BCWdl = K6.4fB',f,bCi1i;

169 -^_I-y -.. -u -.PY__-___ rintf(" DtXdI = X6.4f8',i,dCil);

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;

gC jl=O; for(i=l;i<=menor;i++) gC jl=gC jl+xC j+i-ll*yCil;

else menor = ly;

1 1 / * fin de cross * / 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;

q=ffCll*rrC23; if(lr!=l) C

ffCll=ggCll/v;

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; ff c lI=(ggC 11-q 1 /v; 13=1- 1 ; for (j=l;j<=13;j++) C

k=l-j+l; ff C jl=ffC jl+ffC 1 l*aaC kl ;

1 if (l==lr) break;

else C

/ * Producto punto * /

170 d=q=O ; ~ - I - for (j=l;j<=l;j++) { 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 int 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; / * subrrutinas DOT * / 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 =c C kl +aC i 1 *bC j 3 ;

1

1 / * fin de shape * /

/ * subrrutina FOLD * /

main( 1 i tomadatos( 1 ; shape( 1 ; resultado( 1 ;

1

171

/ * SPIKE Calcula el filtro "spiking" ,para una óptima posición del 'spike';

B = Onda permitida en l a entrada al filtro. LB = Longitud de B igual a n+l. LA = Longitud de A, 6 ni5mero de coeficientes del filtro, igual a m + l .

A = 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 60

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 do B (n+l) = "1; scanf ( "Xd" ,&lb) ; printf("\n Los Coeficientes de la onda de entrada B son:\n"); for ( i=l; i<=lb; i++) E

1 printf("\n Escriba el número de cooficientes de A (m+l) = ' I ) ;

scanf ("Xd",&la); printf("\n Espere un momento por favor...");

printf(" BCXdl = ",ii; scanf("%f",bbCil);

1 / * fin de toma dato6 * / 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 í ( iX4 1 ==O 1 pr i ntf ( I' \ n" 1 ;

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); printf("\n\n Los coeficientes de ' S I son : \n\n"); for(i=l;i<la+lb;i++) €

172 ^^ printf("-sC%dl = %8.6f ",i,sCil); c

... -

if( (i%4)==0) printf("\n"); 1 g e t c h a r 0 ; g e t c h a r O ; c l r s c r O ;

? / * 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;

gC jl=O; for(i=l;i<=menor;i++) gCj3=gCjl+xCj+i-1l*yCil; / * Producto punto * /

else menor = ly;

? 1 / * fin de cross * / eureka ( 1 r , r r , gg , f f , aaa 1

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;

q=ffClI*rrC23; if(lr!=l) C

ffClI=ggC13/v;

for ( 1=2; l<=lr; 1++) E if ( v! =O 1 aaaC 1 I =-d/v;

i f (1!=2) C else aaaC13=0;

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*aaat kl ;

1 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; 173 -- - -+-I--- I_ -

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 sumad, sumaag ;

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++) suma~d=suma~d+ddCil*ddCil; / * subrrutinas DOT for(i=l;i<=laa;i++) suma~ag=suma~ag+aaCil*spacetlaa+il; i f ( sumad ! =O 1 *asee= ( sumad-sumaag 1 /sumad ; else *asee=O; lcc=laa+ 1 bb-1 ; / * subrrutina FOLD * / 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 * / spike( 1 C int i , j:

ld=la+ 1 b- 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 ; / * subrrutina #INS * / index=l; for(i=l;i<=ld;i++i { if(ase>sCili i ase=sCil;

3 / * fin de subrrutina INDEX * / for(j=l;j<=ld;j++) sCld+jl=O; / * aubrrutina IHPULS * / S C ld+indexl=l; shape~lb,ld,la,ld,b,&8tldl,a,&sCldl,&sC2*ldl,ase~;

indox=i; 3

3 / * fin de spike * / main( 1 C tomabatos( ; spike( 1; resultado( ; 1

174

/ * SPIKER Calcula el filtro "spiking" ,para una bptima posición del 'spike'.' !

B = Onda permitida en la entrada al filtro. LB = Longitud de B igual a n+l. LA = Longitud de A, ó número de coeficientes del filtro, igual a m+l.

A = Coeficientes del filtro 'spiking' en la posición óptima. C = Onda permitida que es la actual salida del filtro. LC = Longitud de C igual a m+n+l. INDEX = Posición óptima del 'spike' (p+l). ERRORS = Arreglo de errores. EMINIMO = Error minimo. ESPACIO = Arreglo para area de trabajo.

-

* / #include <stdlib.h> #include <stdio.h> #include <conio. h> #include <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 de coeficientes de B (n+l) = "1; scanf ( "Xd" ,&lb) ; printf("\n Los Coeficientes do l a onda de entrada B son:\n"); for (i=l; i<=lb;i++) C

1 printf("\n Escriba el nQmero de coeficientes de A ( m + l ) = "1: scanf ( "Xd" ,&la) ; printf("\n Espere un momento por favor...");

I

i printf(" BCIdl = ",i); scanf("%f",bbCiI);

1 / * fin de toma datos * / resultado( 1 c

I i

clrscro; gotoxy(25,2); printf("S P I K E R\n\n\n"); ~

printf(" Los Coeficientes de la onda de entrada B son:\n\n"); I

int i; ~

I

I printf(" BtXdI = W6.4f ",i,bCil); I

i f ( ( iX4 i ==O 1 pr i nt f ( 'I \ n" 1 ; I

for (i=l;i<=lb;i++) {

1

1 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

F . ~- . . . _ . . ... . _I . __--., " _ ̂ I" . . ... ~.

i f ( ( i Y4 1 ==O pr i n t f í " \ n" 1 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 de errores es : \n\n"); for( i=l; i<=lc; i++) C

printf(" ErrCXdI = %6.4f ",i,errorsCil); i f ( ( i%4 1 ==O 1 p r i ntf ( 'I \ n" 1 ;

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

pr i ntf ( 'I EiC %dl = K6.4f ' I , i ,espacio[ i 1 1 ; if ( ( i%4 1 ==O pr i ntf ( " \ n" 1 ;

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 ; I* Producto punto * /

1 / * fin de cross * /

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;

q=f f C 13 *rrC 21 ; if(lr!=l) C

f f c 13-ggc 11 /v;

for (1=2;l<=lr;l++) C i f ( v ! =O 1 aaaC 1 1 =-dl v ;

if (1!=2) C else aaaClI=O:

11= (1-2)/2; 12=11+1; for (j=2;j<=l2;j++)

hold = aaat jl: k=l-j+l; aaaCjl=aaaCjl+aaaC1l*aaaCkl; aaaCkl=aaaCkl+aaaC ll*hold; 176 1

- ---̂ __l-.. h I

if ((2*11)!=1-2) I

1 1

v=v+aaaCl1*d; if (v!=O 1 ffC lI=(gg[ 11-q) / v ;

-- ~ -- -I___------ > .- -“I.r”. -l>l,”.il. . . . I I

I

aaaC 12+1l=aaaC 12+1I+aaaC ll*aaaC 12+13; I

else ffCll=O; 13~1-1; 1

for (j=i; j<=13; j++) {

k=l-j+l; f f C jl=f f 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 sumad, 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=( sumad-sumaag 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 ji ;

3

1 / * fin de shape * / side(lf,h,ff,a-a,r-r)

int If; f 1 oat h , * f f , * a a , * r-r ;

int i , j; float s,t,v,w,flf;

c

/ * 8ubrrutina FOLD * /

v=r-r C 11 ; s=t=O; if (lf!=l) E ----

177 in.”

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

if (v!=O) w=(h-s+flf*t)/v;

if (lf!=li

flf=f-fClf1;

else w=O;

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;

3 / * fin de spiker * /

1 / * fin de side * /

I

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) eureka~la,eapacio,EespacioClal ,a, lespacioC2*lal i ;

else side(la,espacioCla+lJ,a,&espacioC2*lal,espacio~;

I q=o ; /* subrrutina DOT * / 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 j 1 ;

1 errors1 il=l-q;

1

/ * subrrutina FOLD * / 1

/ * fin de subrruitna fold * / I

eminimo=errorsC 1 3 ; / * subrrutina MINS * / i ndex=l ; for(h=l;h<=lc;h++) E if (e-minimo>erroraChli C e~minimo=orrorsChl;

1 / * fin de subrrutina mins * / for(j=l;j<=lc;j++i cCjI=O; / * subrrutina IMPULS * / cCindexI=l; shape~lb,lc,la,lc,b,c,a,c,espacio,&~~rango):

i ndex=h ; ?

main( 1 . I toma-datosí 1 ; spiker( i; resultado( i;

E

178

/ * SHAPER Calcula el filtro "weaveshaping" Ó de forma de onda.

B = Onda permitida en la entrada al filtro. LB = Longitud de B igual a n+l. D = Onda permitida que es la deseada a la salida del filtro. LD = Longitud de D igual a k+ l . LA = Longitud de A, ó n6mero de coeficientes del filtro, igual a m+l.

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. INDEX = Posición optima del error. E M I N I M O = Rango cuadrático del error entre el actual y el deseado. ERRORES = Arreglo de errores determinados.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <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 a ng 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");

printf(" Escriba el ndmero de coeficientes de B (n+l) - "1; scanf("Wd",&lbi; printf("\n Los Coeficientes de la onda de entrada B sono\n"); for ii=l;i<=lb;i++i €

? printf("\n Escriba el nomero de coeficientgs do D (k+l) = "1: scanf í "Wd" ,&ldi ; printf("\n Los Coeficientes de la onda deseada D a la salida sonr\n"); for (i=l;i<=ld;i++) E

? priiatf("\n Escriba el ntmero de coeficientes de A (m+l) = "1; scanf( "Wd",&la); printf("\n Espere un momento por favor...");

printf ( ' I BCXdl = ", i ; scanf ("Xf" ,&bC 1 3 1 ;

printf ( DCWdI = 'I, i 1 ; scanf ( "Xf" ,&dC i 3 1 ;

1 / * fin de 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

--".AL1 _ I / ,-1 I_s__u i q n

printf(" ErrC%dl = %6.4f ",i,erroresCil); I

i f ( ( i %4 ) ==O 1 pr i nt f ( 'I \ n 'I 1 ; I I

1

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;

q=ffClI*rrt21; if(lr!=l) C

ffCll=gg~ll/v;

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

i

hold = aaaC jl; .- *--- a. k= 1 - j+ 1 ; 160

aaaC j 1 =aaaC j 1 +aaaC 1 1 *aaaC kl ; aaaCkl=aaaCkl+aaaC1l*hold;

1 if ((2*11)!=1-2)

aaaC12+ll=aaaCl2+ll+aaaCll*aaaCl2+ll; 1 v=v+aaaC 1l*d; if ( v! =O ) f f C 1 1 = ( ggC 1 1 -q 1 / v i

else ffCll=O; 134 - 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 j 1 *rr C kl ; q=q+ff C jl*rrC kl ;

1 1

1 3

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 sumad, 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++) suma~d=eua~~d+UUCil*ddCil; / * 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; ccCkl=ccCkl+aaCi3*bb~jl;

1

3 / * fin de shape * / side(lf,h,ff,aa,rr)

int If; f 1 oat h , *f -f , * a a , * r-r ;

/* subrrutina FOLD * /

{ int 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 1 1 * ( r-r C i I 1 ; t = t+ ( a a C j 1 1 * ( r-r C i 1 1 ; v=v+ ( a a C i 1 1 * ( r-r C i I 1 ; 1

1

if ( v! =O 1 w=( h-s+f 1 f*t 1 / v ;

if (lf!=l)

f 1 f =f -f c 1 f 1 ;

e 1 se w=O ;

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;

/r subrrutina DOT * /

1 c= 1 a+ 1 b- 1 ; lcd=lc+ld-l; dd=O ; for (i=l;i<=ld;i++) dd=dd+dCil*dCil; cross(lb,lb,la,b,b,espacio): for (i=l;i<=lcd;i++) {

for (p=l:p<=lcd;p++) cCpl=O; / * subrrutina ZERO * / Id i= ld- i ; if (i<=ld) for(p=l;p<=i ;p++) cCpl=dCldi+pl; / * subrrutina MOVE * / i ld=i-ld; if (i>ld) for(p=l;p<=ld;p++) cCild+pl=dCpl; / * subrrutina MOVE * / cross(lc,lb,la,c,b,&espacioClal~; if (i<2) eureka~la,espacio,&eapacioClalra,&eopacioC2*lal~;

ag=O ; / * subrrutina DOT * / for (p=l;p<=la;p++) ag=ag+aCpI*espacioC1a+pl; for(p=l;p<=lc;p++) cCpl=O; / * subrrutina FOLD * / for (p=l;p<=la;p++)

else side~la,espacioCla+ll,a,&espacioC2*lal,espacio~;

for (j=l;j<=lb;j++) C I

k=p+ j- 1 ; cCkl=cCkl+aCpl*bCjl;

if(dd!=O) errorestil=(dd-ag)/dd; 1 / * fin de subrruitna fold * / else erroresCil=O;

3 e m i nimo=erroresC 11 ; / * subrrutina MINS * / i ndex= 1 ; for(p=l;p<=lcd;p++) C

if(eminimo>orroresCpl) 4 s-minimo=erroresCpl; indexrp; 1

1 / * fin de subrrutina mins * / for(p=l;p<=lcd;p++) cCpI=O; / * aubrrutina ZERO * / ldi nd=ld- i ndex; if (index<=ld) for(p=l;p<=index;p++) cCpl=dCldind+pl; / * subrrutina HOVE * / indld=index-ld; if (index>ld) for(p=l;p<=ldsp++) cCindld+pl=dCpl; / * subrrutina HOVE * / shape(lb,lc,la,lc,b,c,a,c,ospa~So,&e~rango);

3 / * fin de shapsr * / main( i

t

toma-datos( 1 ; shaper( 1 : resultado( i ;

1

183

/ * COSTR Calcula el valor de la Transformada de Coseno.

R = (rO,ri, ... ,rn). LR = Longitud de R = n+l. W = Frecuencia Angular = 2rPI*frecc.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <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); c scan f ( 'I % f 'I , &r C i 1 1 ; print f ( 'I \ n" i ;

3 printf(" Escriba la frecuecia angular W : " I ;

cscanf("%f",&w); printf("\n");

cosnw=l; si nnw=O ; si nw=s i n ( w 1 ;

seno=ri 1 3 ; for (i=1; i<=lr; i++) €

CO8W=CO6( W) ;

t=cosw*cosnw-sinw*sinnw; sinnw=cosw*sinnw+sinw*cosnw~ cosnw=t; seno=seno+S*rCil*cosnw;

3 printf(" El va lor para Seno es r %7.5f\nN,senoi; ge tcha r0 ; ge tcha rO ;c l r s c rO ;

1

/ * SMOOTH Calcula la estimación espectral de "smoothing operation 'I

por la fórmula de Hamming-Tukey.

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 / (2m).

LS = Longitud de SPECT = m+l.

SPECT = ( S ( O ) , S(Q*f), S(2*8*f), ... ,S (m*a* f ) i. donde S(f) es estimación espectral.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h>

#define MAX2 20 #define PI 3.14159265

main( 1 E 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 del 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. 46.8~~ t C mail ; sj=spectt 13 ; sk=spec t C 2 3 ; for ( i = l ; i<=mm; i++) E

si=sJ; 8 j=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.3f ",i,spectCill; g e t c h a r 0 ; g e t c h a r O ; c l r s c r O ;

1

185

’ * AUGURY Calcula la predicción multicanal Wiener.

N LX LR SP 1 KE FLOOR R LF F LY Y ERROR

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.

*i nc lude <stdl i b. h> $include <stdio.h> Kinclude <mem.h> 4include <conio.h>

#define MNCANAL 2 / * ndmero de canales * / ikdefine MLTIME 40 / * longitud de l a aerie de tiempo * / Icdefine MAXIM0 10

typedef float MATRIZZD CMNCANALICMNCANALI; / * matriz de 2 dimenciones * / typedef float MATRSZ3D CMLTIME3CMNCANALlEMNCANALl; /*matriz de Sdimenciones*/ typedef float MATRIZDZ CMAXIM03tMAXIl401; typedof 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++) €

3

ERRORCiI=O; for (j=O;j<MAXIMO; j++) vfLiltjI=vbtilt jl=O;

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;

for (i=O;i<MAXIMO;i++i C

3

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++)

for (k=l;k<=ncx;k++) C printf(" CYdlCYdl = ",j,k); cscanf ( "%f 'I ,&aux) ; xC i 1 C jl C kl=aux; pr i nt f ( *I \ n" 1 ;

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 : ' I ) ;

scanf ( "%d" , &n 1 : printf("\n Escriba el prámetro de ruido blanco 'spike': " i ; c scanf ( I' Yf I' , &sp i ke 1 ; p r i n t f ( I' \ n " i ;

cscanf("Yf",&floor); printf("\n"); printf("\n Escriba la longitud de la estimaci6n del operador de ' I ) ;

printf ("predicción LR: " i ; scanf ( "%dll ,&lr) ;

. printf("\n Escriba el límite inferior del error cuadrado medio CO..ll: "1;

/ * fin de tomadatos * / esultado( 1

int i, j , k ; clrscr( 1 ; printfí" Los coeficientes de R.\n"); for (i=l;i<=lr;i++) C

for (j=l;j<MNCANAL;j++) { for (k=l;k<MNCANAL;k++) printf(" %5.2f ",rCiltjlCkl); pr i nt f ( " \ n 'I i ;

3 1 printf("\n Longitud estimada en el"); printf(" error del operador de grodicci¿n: %5.2f",lf); printf("\n Los coeficientes de P.\n"); for (i=l;i<=lf;i++) C

for (j=l;j<MNCANAL;j++) i for ( k-1: k<MNCANAL; k++ i pri ntf ( I' %5.2f ' I , f I: i 1 C jl C kl 1 : printf ( " \ n" 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");

187 printf(" error de las series de tiempo: %5.2f",ly); getchar( );getchar( 1; ^^ 1 1 - - 1 u < Y " " , - ~ ~

/ * 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++) / * Subrutina Zero * /

for (j=l; j<=nra; j++) for (k=l;k<=ncb;k++i 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 13 Cnl ; 3

i=nrb; 3 / * fin de brainy * / form(m,n,l,aa,bb,cc)

int m,n,l; MATRIZ3D aa,bb,cc;

I int i,j,ii,k;

/ * recibe matrices hasta de Bdimenciones * /

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 IC j1-bbt 11 t i 3 C iil+ccfkl E 111 t jl ; I /*fin de form * / naine (n,aa,bb)

int n; XATRIZZD aa,bb;

i float ok; int i t j , k ,m;

/ * calcula la inversa do una matriz * /

for (i=l;i<=n;i++) for (j=l:j<=n;j++) bbCilCjl=O;

if (sa[ 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++)

bbCm1 C i 1 =bbC i 3 C ml ; if í ek! =O 1 bbl i I C mI=bbl i 1 Cml-bbC i 1 C jl *aaC j 1 Cml /ek;

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; 1 / * 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 ;

1 1

f / * fin de heat * / 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;

if(longitud-1) i for(i=t;i<=ncanal;i++) / * move(r,vf) y raove(r,vb) * /

for(j=l;j<=ncanal;j++) v f t 1 3 C jl=vbC 11 t jl=rrC 1 3 C ilt 33;

’* for(i=l:i<=longitud;i++) for(j=l;j<=ncanal;j++)

for ( k= l ; k<=ncanal ; k++) a ft 1 3 L j I t kl=O;

zero(af) * /

for(i=l;i<=ncanal;i++) afCilCilCil=l;

for(i=l;i<=longitud;i++) move ( a f , ab 1 fot(j=l;j<=ncanal;j++)

for (k=l; k<=ncanal ; k++) ab[ 1 3 t j1C kI=af C 11 C jí C kl ; 1 / * fin de if * /

-.--. . -, -_.1_3i_. ., . I .-, ..)--.. ... -.. ."

else E icio ly = 2 % /

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 , sp 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++) / * zero(sp1 * / for(j=l;j<=ncanal;j++) spCllCilCjl=O;

for(i=l;i<=longitud;i++) / * move(sp,ab) * / for(j=l;j<=ncanal;j++l

for( k=l; k<=ncanal ; k++) 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 / * fin de else * / 1 / * fin de omen * /

130 --- e_____.-- ---- -

augury( ) I int 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 llCilCil=rC llCilCil*( l + sp ike ) ; rt=rt+rC 11 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(nnrl+l) * / for(i=l;i<=n;i++) i / * j=(i-i)*n+l; +i es sobre la diagonal ó +l es la columna 1 * / 1 if ( rt! =O 1 ERRORC 1 l=q/rt ;

lf=l; if(ERRORClI<=floor) l=lr+l;

ly= 1 x+l f - 1 ;

q=O ;

q=q+vfC i l C i l :

else ERRORCll=O;

1

brainy(n,n,lr,n,l,lx,f,x,y);

1 / * fin de augury * / main( 1 c tocaa-datos( 1 ; augury( 1 ; resultado( 1 ;

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. Núm. entre CO..lI, del límite inferior del error cuadrado medio. 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 <stdlib.h> #include <stdio.h> #include <mem.h> #include <conio.h>

+define MNCANAL 3 / * nomero de canales * / #define MLTIME 38 / * longitud de la serie de tiempo * / #define MAXIM0 10

typedef float MATRIZ2D CMNCANALI ElWCANALí ; / * matriz de 2 dimenciones * / typedef f 1 oat MATRIZ3D C MLTIMEI C MNCANALI E I(NCANAL3 ; /*matriz de 3dimenci ones*/ typedef float MATRIZDS C M L T I W E 3 t ~ X I ~ l E M X I N O l ; typedef float 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=af C k3C i 1 C jl=af t kl C í 3 C jí=O;

1

for (j=O; j<MNCANAL;j++) vfCilI jl=vbtiIt jI=O; for (i=O;i<MNCANAL;i++)

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 los 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; cscanf ( ' I W f " ,&aux) ; aft i 3 C j l C kI=aux; pr i nt f ( 'I \ n" 1 ;

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 ( 'I \ n" 1 ;

3 1 printf("\n Escriba el nQmero de canales p : "1; scanf ( *%d" ,&ncanal i ; printf("\n Escriba la longitud de la estimaci6n del operador de "1; printf("predicción LR: "1; scanf í "%d" ,&lr) ;

1 / * fin de toma-datos * / resultado( i c 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 ",r[il[jiCkli; printf "in") ;

1 1 printf("\n Los coeficientes de 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 ( 'I \ ni' i ;

1 3 getcharO;getchar( 1;

1 / * fin de resultado * / brainyinra,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;

c int i, j, k, 1 ,m,n, IC;

1 c= 1 a+ 1 b- 1 ; for (i=l; i<=lc;i++) / * Subrutina Zero * /

for (j=l;j<=nra;j++) for (k=l; k<=ncb; k++) cc C i 1 C j 3 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 il CmIC 1 l*bbC jl C 11 C nl ; 1

i=nrb; 3 / * fin de brainy * /

form(m,n,l,aa,bb,cc) int m, n, 1 ; MATRIZ3D aa,bb,cc;

1 int i,j,ii,k;

~

/ * recibe matrices hasta de Bdimenciones * /

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 *ccC kl C i i 1 C j l ; 3 /*fin de form * / m i n e (n,aa,bb)

int n; MATRIZ2D aa,bb;

E float ek; int i,j,k,m;

/ * calcula la inmrsa de una matriz * /

for (i=i;i<=n;i++) for (j=í;j<=n;j++) bb[i][j]=O;

i f (aaC 13 C 13 ! =O 1 bbC 11 C 13 =l/aaC 1 3 C 13 ;

for (m=2;m<=n;m++) E k=m- 1 ; ek=aaCmltml; for (i=l;i<=k;i++)

for íj=l;j<=k;j++) ek=ek-aatmlCi3*bbti3Cjl*aat~lC~l;

i f (ek==O i bbCml C mI=O; el se bbt ml C m l = l/ek;

for (i=l;i<=k;i++) C for (j=l;j<=k;j++)

bbtml C i l=bbC i 3 Cml ; if (ek! =O 1 bbC i 3 Cml=bbC i 3 Cm3 -bbC i 3 t 3 l*aat j 1 C ml lek;

1 for ( i=1; i<=k; i++i

for ( j=1; j<=k; j++) bbC i 1 C jI=bbC i 3 C j l+bbC i 3 Cml*bbCml C jl *ek; 1 e--.- --" - - ~ - - ~ - ~ ~ - 194 1

I

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 11 ;

1 3

1 / * fin de heat * /

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) * /

zero(af1 * / / * 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;

for(i=l;i<=ncanal;i++) afCil~i3Ci3=l;

/ * for(i=l;i<=longitud;i++) rnove(af,ab) * / for(j=l;j<=ncanal;j++)

for( k=l; k<=ncanal ; k++) ab[ 13 t jl C kl-af t 11 t jl t kl ; 1 / * fin de i f * / else C / * inicio ly = 2 * /

for(i=l;i<=ncanal;i++) for(j=l;j<=ncanal;j++) 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++) I95

for ( k=2; k<=ncanal ; k++) for ( k=2; k<=ncanal ; k++)

spC i 1 C jl C kl=ab[ i 3 C j] C k] ; spC i 1 C j I C kl=abC i ] [ j 1 k] ;

for(i=l;i<=ncanal;i++) / * zero(sp) * / for(j=l;j<=ncanal;j++) spCllCilCjl=O;

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 11 C j1 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);

? / * fin de else * / 1 / * fin de omen * / main( 1

toma-datos( 1 ; omen( 1 ; resultado( 1 ;

? / * OMEN * /

/ * SISMOGRAMA Programa de un Sism6grafo Marino para Coeficientes de Reflexión.

LC = Número de coeficientes de reflexion. C = Coeficientes de Reflexión.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h>

#define MAX3 50

main( 1 E float c~MAX31,phi~MAX31,aCMAX31,apCMAX31,uCMAX31,vCMAX31; float ar~MAX3l,upCMAX3l,downCMAX3l,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

1 I

l=lc; / * Valor no especificado * / clrscr( 1; gotoxy(20,5); printf("SISMOGRAF0 MARINO\n\n"):

printf(" Escriba el NQmero de 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 j I =a[ j 1 -c t i I *at i - j 3 ;

3 for (j=l;j<=(i-li;j++) aCil~aptj3: aC i 1 =-cC i 1 ; printf("\n Operador de Predicción de Error \n"); for (k=l;k<=i;k++) printf(" W7.5f ",atkl); pr i n t f ( " \ n 'I 1 i vCil=vti-ll*~l-ccil*cti 1;

printf("\n Sismograma Sintt co\n"); for (k=l; k<=lc; k++) printf í I' W7 .Sf " ,phi C kl 1 ; printf("\n\n Curva de Varianza\n"); for (k=l:k<=lc;k++) printf(" %7.5f ",vCkl); pr i nt f ( I' \ n I' 1 ; s = l * - "" .- *m. ." - -~ .L . - -___~-~

3 ,.) e

- 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 at i 1 =-cl i 1 ; / * 33 * / printf("\n Operador de Predicci6n de Error \no'); for ( k= 1 ; k<=i ; k++ 1 pr i n t f ( I' W7.5f 'I aC kl 1 ; 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;

for (t=l;t<=l;t++) downCtl=upEtl=0;

for (g=l;g<=(i+li;g++) / * subrutinao fold * /

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;

? / * subrutinao fold * / 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

1 I/* 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"); for ( k=i; k<=lc; k++) printf ( " %7.5f I' 8cC kl 1 ; getcharO;clrscr( i ;

1 / * fin de main * /

~

/ *

* /

BRAINY Multiplicación de matrices polinomiales para multicanal.

NRA = NAC = LA = A =

NRB = NCB = LB = B =

Número de filas de A = p Número de columnas de A = q Longitud de l a señal multicanal A = m+l (aO.al,. . . ,am)

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 <stdlib.h> #include <stdio.h> #include <mem.h> # i nc 1 ude <coni o. h>

#define MLTIME 5 #define MNCANAL 5

I typedef float MATRIZBD CMLTIMEICMNCANALICMNCANALI; /*aLatriz de 3dimenciones*/ i

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;

1 c= 1 a+ 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 Cml tnl=ccC kl C m l Cnl+aat ilCml E ll*bbC jl C 11 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; clrscr0; gotoxyí20,5); prIntf("B R A I N Y\n\n");

printf í 'I 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 = ' I , j , k ) ; cscanf ( "%f I' ,&aux) ;

__ 199 .. I

aCilC jlCkl=aux; pr i nt f ( 'I \ ni' 1 ;

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 ( 'I C%dlCWdl = ",j,k); cscanf ( "%f 'I , &bC i 1 C j 3 C kl 1 ; p r i n t f ( 'I \ n 'I 1 ;

1 ?

1 / * fin de tomadatos * / 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 getcharO;getchar( );clrocr( 1;

1

main( 1 c

toma-tiatos( 1 ; brainy (a, b, c 1 ; resultado( 1;

1

/ * MACRO Calcula la correlación cruz multicanal de impulsos p-canal, en series de tiempo.

N = número de canles = " p " . LX = longitud de X = m. X = (xO,xl, ... ,xm) LY = longitud de Y = n + 1 Y = (yO,yl, ... ,yn) LG = longitud deseada de la correlacion cruz = k + 1 G = ( g O , g l , ... ,gk)

* / #include <stdlib.h> #include <stdio.h> Xi nc lude <coni o. h>

#define MAX 101 #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 C int i, j ;

I

for (i=O;i<MAX*MAX2;i++) xCil=yCil=gCil=O; / * Inicializa Arreglos * 1 X' 1 y= 1 g=O ;

clrscro; gotoxy(20,5); printf("l4 A C R O\n\n"); printf(" Escriba el nfimero de canales : ' I ) ; / * Toma de dato6 1:

scanf("%d",bnumcanal); printf("\n Escriba LX y LY respectivamente. \n"); 8canf("%d%d",&lx,&ly); j = numc a na 1 * 1 x ; printf("\nEscriba 106 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");

1 j=numcanal*ly; printf("\nE8criba los coeficiente6 del vector Y on forma multiplexada.\n for (i=l;i<=j;i++) C printf(" YtXdl = ",ii;

cscanf ( "%f" ,&y[ i 3 ) ; printf ~ " \ n " i;

1 printf("\n Escriba longitud de Correlaci6n Cruz ; "1; scanf("%f",&lg);

3 / * fin de tomadatos * / crea-tabla( 1 C int i, j ; float promxCMAX21 ,promyCMAX23 ;

fori i=O;i<MAX2;i++) promxCil=promytil=O; / * inicializa promedios * /

for(i=l;i<=numcanai;i++) / * calcula promedio de muestras * / for( j=i;j<=lx;j=j+numcanal) C

promxCil=promxEil+xCjI; L promyCi3=promyti3+yCjl; 201 -_

1

promxC il=prornxl ilílx; promyCil=promyCil/ly;

for(i=l;i<=numcanal;i++l C

1 for(i=l;i<=numcanal;i++)

for(j=i;j<=ly;j=j+numcanali C xC jl=xC jl-promxCi1; y[ jl=yC jl-promyCi1;

1 1 / * fin de crea-tabla * / 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++) C

j i=l+ ( j-1) * ly ; 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; else menor = lx-t; / * subrutina Dot * /

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 / * fin de subrutina cross * /

1 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; clrscr0; gotoxy(20,l); printf(*TABLA DE MUESTRAS X\n\n"); if (imprime=='s') C

getchar0;getcharO; 1

fpr i ntf ( stdprn, I' \ n\ r Programa l4 A C R O\n\n\r"); fprintf(stdprn,"\n\r TABLA DE MUESTRAS X \ n\n\ rD 1 ;

3 for(i=l;i<=nuatcanai*lx;i++) C

printf("XC%dl= %5.2f ",i,xCiI); i f ( i mpr ime== ' s ' 1 f pr i nt f ( stdprn , " XC Xdl= X5.2f " , i , XI i 3 1 ; if ((iX4)==0) C printf("\n"i;

1 if (impria\e=='s') fprintf(stdprn,"\n\r");

1 getchar( 1; if(irnprime!='s') getchar( 1; clrscro; gotoxy(20,l); printf("TABLA DE MUESTRAS Y\n\n"i; if (imprime=='s'i C

f p r i n t f ( s tdpr n , 'I \ n \ r fprintf (stdprn, "\n\r TABLA DE MUESTRAS Y \n\n\r" 1 ;

Programa M A C R O \ n \ n \ r " ) ;

I

1 ----l-lli*L---u-L1l

for(i=l;i<=nurncanal*ly;i++i E p r i n t f ( '' Y C Xd 1 = K5.2f if(imprime=='s' 1 fprintf(stdprn,"YtKdI= X5.2f ",i,yCiI); if ((iX4)==0) E printf("\n");

1

'I , i , y C i 1 1 ;

if (imprime=='s') fprintf(stdprn,"\n\r")I

1 getchar(); clrscr0; gotoxy(l5,l); printf ("COEFICIENTES DE CORRELACION G\n\n"i; if (imprime=='s') {

f p r i n t f ( s tdpr n , 'I \ n \ r Programa M A C R O\n\n\r"); fprintf(stdprn,"\n\r COEFICIENTES DE CORRELACION G\n\n\r");

1 for(i=l;i<=lx-lg;i++) C

printf("GCXdl= %9.2f ",i,gLil); i f ( i mpr ime== ' s I 1 f pr i n t f ( stdprn , "GC Xdl= X6.4f if ((i%4)==0) E printf("\n");

1

'I , i , g C i 3 1 ;

if (imprime=='s') fprintf(stdprn,"\n\r");

1 getchar(); clrscr0;

1 / * fin de resultado * / main ( i c

tomabatos( 1 ; creamtabla( 1 ; macro( i ; resultadoí 1;

1

/ * MACROEJ Calcula la correlaci6n cruz multicanal de impulsos p-canal, en series de archivo (mue y otro archi

tiempo, con datos para un EJEMPLO; genera un stras.dat) con los datos de las muestras proce~adas, vo (coeficie.dat) con los coefientes de correlacibn.

N = L X = x = LY = Y = LG = G =

* /

número de canles = " p " . longitud de X = rn. (xO,xl, ... ,xm) longitud de Y = n + 1 ( y O , y l , ... ,yn) longitud deseada de la correlacion cruz = k + 1 ( g O , g l , ... ,gk)

#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h>

#define M A X 101 #define M A X 2 4 #define MAX3 2

/ * máximo de muestras por canal p * / / * máximo nomero de canales p * /

typedef float MATRIZ3D CMAXlCMAX2lCMAX31;

tomadatos( 1 E int i, j, k;

for ( i =O ; i <MAX*'MAX2 ; i ++ for (i=O;i<MAX;i++)

~Cil=yCiI=gCil=O; / * Inicializa Arreglos * / 1 x=ly=lg=0 ;

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 - Ejemplo\n\n"); printfí" Escriba el n h w r o de canales : ' I ) ; / * Toma de datos * / scanf ( "Xd" ,&numcanal ; 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 : I * ) ;

scanf ( "%d" ,&lg) ; printf("\n Espere un momento por favor.. .I1);

1 / * fin de tomadatos * / crea-tabla( 1

int i ; float promxEMAX21;

for

for

3 for

i=O;i<MAXS;i++) promxCiI=O; / * inicializa promedios * / i=O;i<lx;i++) C / * calcula promedio de muestras * / promxCll=promxCll+xlCil; I

promxC23=promxC23+x2C i l ; I promxC 3 1 =promxC 3 1 +x3C i 1 ; 1

, I

i= 1 ; i <=numcana 1 ; i++ 1 promxC i 3 =promxC i 1 / 1 x ;

/ * construye tabla, restando a clmuestra el * *I for(i=O;i<lx;i++) f xC i+ll=xlC i3-promxC 11; / * promedio correspondiente a cada canal p y[ i+lI=xt i+ll; / * en el Ejemplo xCi1 ea igual a ytil y * A

zC i+ll C 11 ClI=xC i+ll ; / * zClxlCnumcanallCll el la muestra en arch.+& xClx+i+ll=yClx+i+ll=zCi+llC2lCll=x2Cil-promxC2l; xC 2* 1 x+ i + 1 1 =y C 2* 1 x+ i + 1 I =zC i +I 3 C 3 3 C 11 =x3 C i 1 -promxC 3 I ;

? 1 / * fin de 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 / * fin de subrutina cross * /

1 1

1 / * 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 ? : "1;

t~ n II: I-

c .ax imprime=getcharO; - I t * . *."L

if (imprime=='s') { printf("\n\n Prepare la impresora . . . I ' 1;

clrscr0; gotoxy(20,l); printf("TABLA DE MUESTRA5 X = Y\n\n"); if (imprime=='s') {

getchar( 1;getcharO; 1

f p r i n t f ( s t d p 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

pr i ntf ( "XC%di= %5.2f if ( imprime==' s' 1 fprintf (stdprn, "XC%dl= X5.2f if ((i%4)==0) E printf("\n");

3

' I , i , xC i 1 1 ; * I , i , xC i 1 i ;

if (imprime=='s') fprintf(stdprn,"\n\r");

1 getchar(); if (imprime!='s')getcharO; clrscr0; gotoxy(l5,l); printf("COEFICIENTE5 DE CORRELACION G\n\n"); if (imprime=='s') E

f p r i n t f ( s tdp r n , I' \ n \ r Programa M A C R O - Ejemplo\n\n\r"); fprintf (stdprn, ' I \ n\ r COEFICIENTES DE CORRELACION G\n\n\r"); 1

for(i=l;i<=lx-lg;i++) i pr i n tf ( "GI. %d 1 = A9 .2f i f ( i mp r i me== ' s 1 f p r i n t f ( s t dp r n , I' G C %d 1 = %9 .2 f " , i , g C i 1 1 ; if ((i%4)==0) E printf("\n");

if (imprime=='s') fprintf(stdprn,"\n\r"); 3

" , i , g C i 3 1 ;

3 getchar( );getchar( );clrscr( 1;

1 / * fin de resultado * / 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' !\no'); delay(7000);

1 else E

fwrite(&z,sizeof(MATRIZ3D),l,fp); fclose(fp1;

1 if( (fp=fopen("coeficie.dat","wb")) == 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++) fwrite(&gCi3,sizoof(float~,l,fp~; fclose(fp1;

1 3 / * fin de archivo * / main() i

tomadatos( 1 ; crea-tabla( 1 ; macro( 1 ; archivo( 1; resultado0;

3 206

/ * MACRO2 Lee los archivos que contienen las muestras y los coeficientes de correlación, generados por MACR0EJ.C , en base a los datos del ejemplo.

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h>

#define CIERTO 1 #define FALSO O #define MAX 101 / * máximo de muestras por canal p * / #define MAX2 4 / * máximo nQmero de canales p * / #define MAX3 2

typedef float MATRIZSD CMAXlCMAX23CMAX31;

MATRIZ3D x; float gCMAX*MAX21; int lx, lg,numcanal; int archopen;

resultado0

int i, j; char imprime;

clrscr0; 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 . . . I ' 1;

clrscr0; gotoxy(20,l); printf("TABLA DE MUESTRAS X = Y\n\n"); if (imprime=='s') C

getchar( );getcharO; 1

fprintf ( stdprn, " \ n\ r Programa M A C R O 2\n\n\r*); f pr i n t f ( s tdpr n I " \ n \ r TABLA DE MUESTRAS X 5- Y\n\n\r'i;

1 for ( i=l; i<=lx; i++)

for(j=l;j<=numcanal;j++) E pr i ntf ( I' XCWdl Cldl = %S. 2f 'I , i , j , xC i I C j 1 C 11 1 ; if ( imprim==' 6 ' 1

fprintf(stdprn," XíICdICldl = WS.2f",i,j8xCilCj1Cll); 1 printf ("\n" 1 ; if (imprime=='s'i fprintf(stdprn,"\n\r");

3 getchar(); if (imprime!='s') gmtchar0;clrscrO; gotoxy(l5,l); printf("COEFICIEiUTE3 DE CORRELACION G\n\n'); if (imprime=='o') C

f p r i n t f ( 8 t dp r n , 'I \ n \ r Programa M A C R O 2\n\n\r"); fprintf (stdprn, ' I \ n\ r COEFICIENTES DE CORRELACION G\n\n\r");

3 for(i=l;i<=lx-lg;i++) {

printf("GtXdl= X9.2f ",i,gCil); if (imprime=='s' 1

fpr i ntf ( stdprn, " if ((iK4)==0) E

printf ( 'I \ni' 1 ; i f ( i mp r i me== s ' 1

GCIdí C = X9.2f ' I , i , gC i 1 ) ;

f p r i n t f ( s tdp r n , " \ n \ r " 1 ;

getchar ( ) ; getchar ( ) ; c l r s c r o ; 1 / * f i n de resultado * / l e ea rch ivo ( 1 c FILE * f p ; int i , j , k;

archopen=FALSO; 1 x= 100 ; i f ( (fp=fopen("muestras.dat","rb")) == NULL) E

1 g = 1 O ; n umc a n a 1 = 3 ;

pr int f ( "\n\n\n ALERTA : No fu posible abr i r archivo 'muestras.dat' ! ' I ) ;

archopen=FALSO ; delay(7000);

f e l se E

fo r (i=O;i<MAX;i++) for(j=O;j<MAX2;j++)

fo r ( k=O; k(MAX3; k++ 1 f read( &xC i 1 C j 1 C kl , sizeof ( f l oa t 1 , 1 , f p 1 ; f c lose ( f p 1 ; archopen=CIERTO;

i f ( (fp=fopen( "coef ic ie .dat" , "rb" 1) == NULL) E p r int f ( "\n\n\n ALERTA : No f u posible abr i r archivo 'coef ic ie .dat ' ! ' I ) ;

archopen=FALSO ; delay(7000);

f e l se E

for ( i=O; i<=lx- lg ; i++ ) fread(&gCil,sizeof(float),l,fp); f c lose ( f p 1 ;

f 1 / * f i n e l s e * /

1 / * f i n de archivo * / main( i E

l e ea rch ivo ( 1 ; i f (archopen1 resultado( 1 i

f

/ * DATOS 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 paro generar los archivos de medición o muestras y el de coeficientes de correlación .

N = número de canles = "p". X = ( x O , x l , ... ,xm) LX = longitud de X = m. Y = (yO,yl, ... ,yn) LY = longitud de Y = n + 1 G = (gO,gl, ... ,gk) LG = longitud deseada de l a correlacion cruz = k + 1 * /

#include <stdlih.h> #include <stdio.h> #include <conio.h> #include <dos.h>

#define MAX 100 / * máximo de muestras por canal p * / int x1[1001 = 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;

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,110 1 ;

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;

int x2C1001 = C

int x3ClOO1 = E

tomadatos( 1 C clrscr0; gotoxy(20,5); printf("D A T O S - Ejemplo\n\n"); 1 / * fin de tomadatos * / 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' !\n"); 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++) fwrite (&x3Ci l ,a izeof ( int ) , i , fp ) ; fcloas(fp);

I 1 / * fin de archivo * / main( 1

tomabatos( 1 ; archivo( 1 ;

? 209

/ * MACROGRL 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 = número de canles = " p " . LX = longitud de X = m. X = ( x O , x l , ... ,xm) LY = longitud de Y = n + 1 Y = (yO,yl, ... ,yni LG = longitud deseada de la correlacion cruz = k + 1 G = (gO,gl, ... ,gk)

* / #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #include <string.h>

#def i ne #define #define Qdef i ne #define

typedef typedef

MMUESTRA 101 MNCANAL 4 MNTABLA 2 CIERTO 1 FALSO O

/ * máximo de muestras por canal p * / / * máximo nQrnero de canales p * /

float MATRIZ3D CMMUESTRAI CMNCANALI CMNTABLAI; 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 archopen, 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 Arreglos * / for (i=O;i<MNCANAL;i++)

for (i=O;i<MMUESTRA;i++)

xC i ]=y[ i l=gC i 1 =O;

for (j=O;j<MMUESTRA;j++) datosCiICjl=O;

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 ( 'I 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"); printf ( I' Tipo asci i C3l\n\n\n Teclee uu opción : "1; scanf("%d" ,&tipo) ;

switch( tipo) C case 1 : strcpy(opcion,"rb");

2 í 0 -I I

break; *I--*

case 2 : strcpy(opcion,"rb");

case 3 : strcpy(opcion,"r "1; break;

break; 1 if( (fp=fopen(entrada,opcion)) == NULL) E

printf("\n\n\n ALERTA : No fu posible abrir archivo %s !",entrada); delay(7000);

printf("\n Escriba el nilimero de canales : "1; / * Toma de datos * / 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...");

if (tipo!=3) E

1 else E

i=j=i;

while( (!feof(fp)) && (i<=numcanali E

f read( &datosC i 1 C j 1 , si zeof ( i nt 1 ,1, fp 1 ; if( j==lx) E i++; j=l; 3

else j++; 1

3 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 fclose(fp1 ;

1 / * fin de tomadatos * / 3

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++)

for( j=1; j<=lx; j++) E / * construye tabla, restando a c/muestra el * / indice=((i-l)*lx)+j; / * proaindio correspondiente a cada canal p * /

yCindicel=xCindicel; / * z~ixlCnumcanal3Cll el la muestra en arch.*/ zt jl C i 3 C ll=xC indicel;

xCindicel=datosCilCj3-prowx[i3;/* en el Ejemplo xCi3 = yCi1 y * /

3

1 / * 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 ( LX, X ( i i 1 , LY, 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 / * fin de subrutina cross * /

1 1

1 / * 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;

clrscr0; gotoxy(20,l); printf("TABLA DE MUESTRAS X = Y\n\n"); if (imprime=='s') E

getchar0;getcharO; 1

fprintf (stdprn, " \ n\r Programa i! A C R O - General\n\n\r"); f p r i n t f ( s t d p r n , " \ n \ r TABLA DE MUESTRAS X = Y\n\n\r");

3 for( i=l;i<=numcanal*lx; i++) E

pr i n t f ( I' XC Kdl = K5.2f if(imprime=='s' 1 fprintf(stdprn,"XCKdl= %5.2f ",i,xCil); if ((iX4)==0) E printf("\n");

if ( imprime==' 8 ' 1 fprintf (stdprn, " \ n\ r" 1 ; 1

" , i , xt i 1 1 ;

1 getchar(); if (imprime!='s')getcharO; clrscr0; gotoxy(l5,l); printf("C0EFICIENTES DE CORRELACION G\n\n"); if (imprime=='s') C

fprintf ( stdprn, 'I \ n\ r Programa Bl A C R O - General\n\n\r"); fprintf t stdprn, "\n\r COEFICIENTES DE CORRELACION G\n\n\r"); 1

j=l; for(i=l;i<=lx-lg;i++) E

pr i nt f ( "GC %dl= X9.2f if(imprime=='s') fprintf(stdprn,"GC%dIn %9.2f ",i,gCil); if ( ( j%lg)==O) E printf("\n");

'I , i , g t i 1 1 ;

if (imprime=='s') fprintf(stdprn,"\n\r"); j=o;

1 else if ((j%4)==0) E printf("\n");

if (imprim=='s' 1 fprintf(stciprn,"\n\r"); 1

j++;

h a r 0 ; clrscr0; _I_

212 1

1 / * fin de resultado * / archivo( i E FILE *fp; int i;

if( (fp=fopen("medicion.dat","wb") 1 == NULL) C printf("\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 , f p i ; fclose(fp);

1 if ( (fp=fopen( "ccorrela.dat" , "wb" 1 1 == NULL) {

printf("\n\n\n ALERTA : No fu posible abrir archivo 'coeficie.dat' ! \ n " ) ; delay(7000);

1 else C

for(i=O;i<=lx-lg+l;i++) fwr i te (Eg [ i l , s izeof ( f loat ) , i , fp ) ; fclose(fp);

1 1 / * fin de archivo * / main( i c

toma-datos( ; crea-tabla( : macro( i : archivo( i ; resultado( ;

1

213

/ Y HEAT Calcula los coeficientes de correlación cruz empírica.

NRX Número de filas de Xi = p. NC X Número de coumnas de Xi = q. LX Longitud de Xi = m. X (xl,x21,x3.. .xmi arreglados en forma multiplexada.

NRY Número de filas de Xi = r. NC Y Número de coumnas de Xi = q. LY Longitud de Xi = n. Y (yl,y2l,y3 ...y ni en forma multiplexada. LG Longitud de la correlación curz.

G CGxy(0) ,Gxy( 1 1 , . . . ,Gxy(ki 1 arreglados en forma multiplexada. % /

#include <stdlib.h> #include <stdio.h> # i nc lude <mem. h> #include <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;

for (i=O;i<MNCANAL;i++i / * inicializa arreglos * / for ( j=O; j<MNCANAL; j++)

for ( k=0; k<MLTIME; k++) xC i I C jl E kí=yt i 1 1 jl I kl=g[ i 1 t jl 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 11 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 ( 'I CXdl CXdl = 'I, j, k) ; cscanf ( I' Xf , &y t i 1 C j I C k 1 1 : printf("\n" 1 ;

3 1 A - Il- -̂ I -11-_ .ll - 1

1 printf("\n Escriba la longitud de la correlación cruz LG : "1; scanf ( "Xd" ,&lg) ;

1 / * fin de tomadatos * / resultado0 { int i, j, k; char imprime;

getchar0;clrscrO; gotoxy(3,lO): printf(" Desea IMPRIMIR los resultados (sin) ? : "1; imprime=getcharí i ; if (irnprime=='s') C printf("\n\n Prepare la impresora . . . ' I 1;

clrscr( 1; printf(" Los coeficientes de C.\n"i; if (imprime=='s'i C

getchar( );getchar( 1; 1

fpr i ntf ( stdprn, 'I \ n\ r Programa H E A T\n\n\r"); f p r i n t f ( s tdpr n , \ n \ r TABLA DE COEFICIENTES C\n\n\r");

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

p r i n t f ( 'I %5.2f 'I , g t i I C j I C kl i ; if(imprime=='s') fprintf(stdprn," X5.2f " , g C i I C jltkl);

for (k=l;k<=ncy;k++) {

1 printf("\n"); if (impriino=='s') fprintf(stdprn,"\n\r"I;

3 1 getchar( 1 ; if (imprimo!='s' 1 gotchar( 1 ;

1 / * fin de 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 ;

for(i=l;i<=lmin:i++) else lmin=lx-j+l;

k=i+ j-1; gg C j 3 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 de heat * / main( 1 E

tomadatosi 1 ; heat(x,y,g); resultado( 1;

215 1

/ * HEATEJ

NRX NCX LX X

NRY NCY LY Y LG

G * /

Calcula los coeficientes de correlaci6n cruz 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.

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.

Niimero de filas de Xi = r. Número de coumnas de Xi = q . Longitud de Xi = n. (yl,y2l,y3 . . . y n) en forma multiplexada. Longitud de l a correlación curz.

CGxy(0) ,Gxy( 1 1 , . . . ,Gxy(k) 1 arreglados en forma multiplexada.

#include <stdlib.h> #include <stdio.h> #include <dos.h> #include (conio. h>

#define CIERTO 1 #define FALSO O #define MLTIME 101 #define NCANALl 4 +define NCANAL2 4

/ * máximo de 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; / * si 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 j 3 C kl , sizeof ( float 1 , 1 , fp 1 ; y[ iI C jl Ckl=xC 13 C j1 C kl ;

1 fclose(fp1; arc hopen=C I ERTO ;

1 1 / * 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 I kl=gC i 1 C 52 C kl=0; a r c h o , p e n = F ALSO ; 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 : ' I ) ;

scanf ( "%d" ,&lg) ; printf("\n Favor d e esperar un momento...");

1 / * fin d e tomadatos * / resul tadot 1 E int i , j,k; char imprime;

getchar0;clrscrO; gotoxy(3,lO); printf(" Desea IMPRIMIR las muestras y los resultados (s/n1 7 : ' I ) ;

imprime=getcharO; if (imprime=='s') { printf("\n\n Prepare la impresora . . . I ' 1;

clrscr0; gotoxyí20,l); printf("TABLA DE MUESTRAS X = Y\n\n"); if (imprime=='s') C

getchar0;getcharO; 1

fprintf (stdprn, \n\ r Programa H E A T - Ejemplo\n\n\r"): fprintf (stdprn, " \ n\ r TABLA DE MUESTRAS X = Y\n\n\r");

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 n t f ( " \ n" 1 ; i f ( imprime== ' s ' 1 f pr i ntf ( stdprn , I' \ n\ r I' 1 ;

1 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 ("GCYdI CWdlCWdl 19.2f if (imprime=='s' 1

' I , i, j, k,gC i l C jICk3) ;

fprintf(otdprn," GC%dlC%dlC%dl %9.2f ",i,j,k,gCilCjlCkl); 1 printf ( "\n" 1 ; if (imprime=='s' 1 fprintf(stdprn,"\n\r");

1 printf("\n"); if (imprime=='s') fprintf(otdprn,"\n\r");

1 getcharO;clrscr( 1;

1 / * fin de 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 1 l*yC i 1 C nl C 1 1 ;

3 3

3 / * fin de heat * / main( 1 E

torna-datos( 1 ; leearchivo( ; if (archopen) E

heat( 1; resultado0;

3 3

218

/ * QUADCO Calcula l a s matrices empíricas de autoespectro,co-espectro y de cuadratura de espectro, de una función de autocorrelaci6n para multicanal.

NRR Número de filas de Ri. NCR Nitmero de coumnas de Ri. LR Longitud de Ri . R trl,r2,r3...rm) arreglados en forma multiplexada, RCrlCnrrIlncrl.

S CM(O),M(dfl,M(2df),M(3dfl, ..., M(mdfl1, donde df=(l/í?m). * / #include <stdlib.h> #include <stdio.h> #i nc 1 ude <math. h> # i nc lude (conio. h>

#define PI 3.1415927 #define MNCANAL 3 #define MLTIME 3

typedef float MATRIZ2D CMNCANALIEMNCANALI; / * matriz de 2 dimenciones * / typedef float MATRIZJD CMLTIMEILMNCANALICMNCANALI; /*matriz de 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 13 1. jl C kl=sC i 3 C jl C k3=0; for (i=O;i<nLTI~*~ANAL;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 de R C11 Crengl [col] . \ n * ) ; for (i=l;i<=l;i++l C

printf ( " LR = Sd\n", il; for (j=l;j<=nsj++i

for (k=l;k<fn:k++l f prlntf(" C%dlt%dl = ",j,kl; cscanf í "%f " ,&rC 13 L jl C kl 1 ; p t i n t f ( " \ n I' l ;

1

3 / * fin de toma-datos * / 1

219

resultado( 1 E int i,j,k; char imprime;

getchar0;clrscrO; gotoxy(5,lO); printf(" Desea IMPRIMIR los resultados (s/n1 ? : ' I ) ;

irnprime=getchar( 1 ; if (irnprime=='s'i E printf("\n\n Prepare la impresora . . . ' I 1;

clrscr( 1 ;gotoxy(35,11; printf("Q U A D C O\n\n"i; printf ( I' Tabla de Coeficientes R\n"); if (irnprime=='s'i {

getchar( 1;getcharO; 1

f p r i n t f ( s tdpr n , 'I \ n \ r fprintf (stdprn, " \ n\ r

Programa Q U A D C O\n\n\r"); Tabla de Coeficientes R\ n\ n\ r" 1 ;

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 í 'I %5.2f 'I ,rC il C jl C kl i ; i f ( i mp r i me== s 1 f p r i n t f ( s tdpr n , 'Y5.2 f I' , r C i 3 C j 1 C k3 1 ;

1 printf ( "\nI'i ; if (imprime=='s' i fprintf(stdprn,"\n\r")i

1 1 getcharO;getcharO;c l rscrO;gotoxy (25,2 ) ; printf("Q U A D C O\n\n"i; printf ( 'I Tabla de Coeficientes S\n"); if (imprime=='s'i C

fpr i ntf ( stdprn, It \ n\ r f p r i n t f ( s t d p r n , 'I \ n \ r

Programa Q U A D C O\n\n\r") ; Tabla de Coaf icientea S\ n\ n\ r" 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 ( 'I X5.2f I' , st i 1 I: j 1 C kl 1 ; if(imprime=='s') fprintfíatdprn," SL5.2f ",aEiJC j l C k 3 ) ;

1 printf ( " \ n" i ; if ( imprime== s i fpr i ntf ( stdprn, 'I \ n\ r " i ;

3 1 ' getchar(); if (imprime!='a') getchar();

1 / * fin de resultado * / sintab(rn,table)

int m: float *table;

c float angulo; i n t i , mm, f m;

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) ; 220 1

)/J(. fin de 5intable */ costab (m, table)

int m; float *table;

.: float anqulo; i n t ; i ,mm,fm;

cosp n-n , m m , x , y , z )

.I int n--.n,m-m,:.:,y,r;

i n t i , i i , j , ct C:: , mm , mmm , :.: :.: , y y , z z ;

j=i; 55 c :< 1 c y 1 c 2 1 =o ; kk=x-l; mm=2*mm-l; mmm=mm-1; for(i=l;i-<=n-n;i++) .C

x : . := i / (n*n) ; ii=iX(n*n);

if (xx==O) C xx=l ; i I-i ;

3 e l se if (li==O) li=n*n;

e 1 se xx=xx+ 1 ;

S C XI Cy1 C zI=sC XI Cy1 C zI+rC xxl C yyl tzzl*espacio[ 3 1 ;

j= j+kk; if ( ( j-mm) >O)

1 / * fin de cosp * / j= j-mmm;

3

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 il C jl C kl-rC i I C kl C jl ; rEilCk3C jl=weight*odd; r C i 1 C j 3 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);

for (i=l;i<=l;i++i cosp~l,l,iyj,k~: rt íl C j 1 t kl=rt 11 E j 1 C kl*2;

else sintab( 1 ,espacio) ;

1 1

1 / * fin de quadco * / main( 1 c

toma-datoa( i i quadco( i ; resultado( 1 ;

/ * QUADCO * /

/ * COHERE Calcula la magnitud y atraso de fase de la coherencia.

N Número de canales p . L Longitud, l=m+l. S CM(0) ,M(df 1 ,M(Zdf 1 ,M(3df), . . . ,M(mdf 1 3 , donde df=( 1/2m).

C CH(O),H(df),H(2df),H(3df),. ..,H(mdf)l, donde df=(1/2m). * / #include <stdlib.h> #include <stdio.h> #include <math.h> #include <conio.h>

#define PI 3.1415927 #define MNCANAL 3 #define MLTIME 3

typedef float MATRIZ3D CMLTIMEICMNCANALICMNCANALI; /*matriz de 3dimenciones'í

float cCMLTIME1 CMNCANALICMNCANALI ,sCMLTIMEICMNCANALI CMNCANALI; int 1 ,n;

toma-datos( 1 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 de 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 = ' I , J,k); cscanf ( "Xf" ,&sC i 3 C J 3 C k3 1 : pr i nt f ( It \ n" i ;

1

1 / * fin de tomadatos * / 1

resultado( 1 E 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 i ; ~

clrscrO;gotoxy(35,1); printf ("C O H E R E\n\n") ; printf(" Tabla de Coeficientes R\n" 1 ; if (imprime=='s') E

getchar0;getcharO; 1

f pr i n t f ( s tdpr n , I' \ n \ r Programa C O H E R E\n\n\r" ) ; f p r i n t f ( s t dpr n , 'I \ n \ r Tabla de Coeficientes S\n\n\r");

-"_1_-

223 1 .~ _p. P - U - P

for (i=l;i<=l; ++) C printf("\n .S = %d \n",i); if (imprime = ' S O fprintf(stdprn,"\n LS = %d \n\n\r",i); f o r Cj=i;j<= ;j++) C

for (k=l;i:<=n;k++) C printfi" %7.4f ",sCilCjlCkl); if ( imprime==' s' 1 fprintf (stdprn, " % 7 . 4 f 'I ,sC i l C jICk1) ;

1 printf ( "\n" 1 ; i f ( i mp r i me== ' s i f pr i n t f ( s tdp r n , " \ n \ r " 1 ;

1 1 g e t c h a r O ; g e t c h a r O ; c l r s c r O ; g o t o x y ( 2 5 , 2 ) ; printf("C O H E R E\n\n"); printf(" Tabla de Coeficientes C\n" 1 ; if (imprime=='s') C

fpr i ntf ( stdprn, 'I \ n \ r Programa C O H E R E\n\n\r"); f p r i n t f ( s t dp r n , " \ n \ r Tabla de Coeficientes C\ n\ n\ r " ) ;

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 getchar0; if (imprime!='s') getchar();

1 / * fin de resultado * / cohere( 1 E int i,j,k,jp,negativo; float maximo, afase ,coerenc ia; f 1 oat auxl , aux2, c oc 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 il C jl C jI*sC 13 C kl C kl ; if (aux2!=0) cociento=auxl/aux2;

else cociente=O; i f ( c oc i en t e<O 1 c oc i en te=c oc i e n te* nmga t i vo ; coerencia=sqrt(cociento); af ase=atan2 ( sC i 3 C kl C j 1 , sC i 1 C j 1 C kl 1 ; cC i 1 C jl C kl=coerencia; cCilCklCjl=l80*(afaoe/PI~;

3 1

1 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++) {

. 224 cCilC j l C jl=sCilC j l C 91; --"--.-----

if (cEilC jlC jl>=O) auxl=cCilC jlC jl;

if (rnaximo<auxll rnaxirno=auxf ; else auxl=cCilCjlCjl*negativo;

3 for(i=l;i<=l;i++) E

1 cCilC jlC jl=cCiíC jlC jl/maxirno;

3 3 / * fin de cohere * / main( 1 E

tornadatos( l ; cohere( 1 ; resultado0;

3 / * COHERE * /

I-

I I I

I : Este programa grafica puntos en XY,con la posibilidad I I

I I de graficar 6nicamente una parte de la gráfica general, i I t obtiene automaticamente la escala nesesaria ; la parte I I I del monitor que es empleada como área de graficación es : I I delimitada por los puntos siguientes, mismos que pueden I I : ser ajustados deacuerdo a las nesesidades. Si se tienen i I t varios grupos de datos (canales) pueden graficarse todos i I I al mismo tiempo y a una misma escala, 6 c/u a su escala, I I I en cuyo caso podrá graficarse solo un grupo de datos. I

I

I

I

I

I

I

I

I I

I I 1 I I I

I y 2 +------------------------------------------------------ I I

I x i x2 I

+-------------------------------------------------------------------- +

I I

I I I I

* / #include <stdlib.h> #include <stdio.h> #include <dos.h> #include <conio.h> +include <math.h> #i nc lude <8tr i ng . h> +include <graphics.h>

#define espara0 while(!(kbhitO)); getch0; #define NUMDIVX 10 / * nhutro de divisiones dol ejo X * / #define NUMDIVY 10 / * nQaiero de divi8iono6 del oJe Y * / #dofino CIERTO 1 +dofine FALSO O #dofino MAXDATO 610 +dof i ne MMUESTRAS 30 1 / * máximo do muostras por canal p * / +define MNCANAL 5 / * máximo nSmoro do canalos p * / #defino MTABLA 3

typodof float MATRIZ3D tMMUESTRASlt#r(ICA#ALlt~~~J~

MATRIZSD x; float datoatMAXDATO1; i n t a r c h 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 loa * / / * puntos que 80 gratíoarán. * / / * corrimiento en pixole. dol eje X * / 1 % delimitarn 0 1 aroa di8ponible para * / / * trazar la gráfica. * / / * y(x1,yl) origon(xl,y2) x(x2,y2) * /

char conjuntoC63=E'11,121,13','4','0','511; char almacent4003; int numdatos,numcanales,numtablas;

225 int cana1,tabla;

~ -* . .U_"". - l.u"yy

void margen( E struct text-info r; int i ,alto, largo;

/ * enrnarca la ventana que se ecuentra activa * /

gettextinfo( Er ; largo=r.winright-r.winleft; alto=r.winbottom-r.wintop; gotoxyi l,alto+li; putch(Oxc8); for(i=l;i<largo;i++) putch(0xcd); putch(0xbc); gotoxy( 1,alto-1); insline(); gotoxy(1,l); putch (Oxc9 1 ; for(i=l;i<largo;i++) putch(0xcd); putch(0xbb); pu tch ( O xba ;

for(i=2;i<alto;i++) { gotoxy(largo+l,iI;

1 gotoxy(largo+l,alto); putch(0xba); gotoxy(2,2);

putch(Oxba);putch(Oxba);

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 * /

/ * abre una ventana del tamaño de * / / * todo el monitor, y la enmarca * /

mensaje(cadena,largo) / * abro una ventana sobre el 'cadena' y asigna * / char *cadena; / * un carater del teclado a la vir. 'tocla' * / int largo;

char tecla; c

struct text-info a; struct text-info n; int x,y;

/ * l a ' datos de ventana'actual * / / * ' 0 ' datos de ventana nueva, por abrir * /

gettextinfo(&aI; x = ( í a . w i n r i g h t - a . w i n l e f t ) - o ) / 2 ; x=a.winleft+x; y=((a.winbottom-a.wintop)-3)/2; y=a.wintop+y;

n. winleft=x; n.wintop=y; n.winright=x+largo+3; n.wlnbottom=y+2;

textbackground( WHITE) ; clrscr( 1; margmn( 1 : got oxy ( 3,2 1 ; tecla=getch( 1 ; putch(toc1a);

toxteolor (BLACK) ;

cputs(cadena1;

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; int i, j, k:

archopen=FALSO ; ventana( 1 : gotoxy(23,31; cputs("GRAF1CADOR X vs Y --- Lectura de Archivo" 1 ; gotoxy(l6,6); cputs("Cua1 es el nombre del archivo de datos: "1;

strcpyi entrada, "

scanf i "96s" ,entrada) ;

" 1 ; s t rcpy ( t i po , " " I ;

gotoxy( 16,8); cputs("Tipo binario c 11 " 1 ; gotoxy( 16,91; cputs("Tipo hexadecimal C21" ) ; gotoxy(l6,lO); cputs("Tipo ascii C31 I' I ; do C gotoxy(l6,lS); cputs("Tec1ee su opción : " I ;

f while (memchr(conjunto,opcion,3I==NULL); opcion=getchO;

switch(opcion1 E case ' 1 ' : strcpy(tipo,"rb"I;

break; case '2' : strcpy(tipo,"rb"I:

break: case '3' : strcpy(tipo,"r");

break; 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 I J 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(l6,20); cputs("NP Muestras = '1; gotoxy(25,201; cputs(" I' 1 ;

scanf("Wd",Cnuadatos); if ((numdatos<lO) I :(numdatos>=rilllUW?ñW))

mensaje("10 <= N9 Muestras <= 300",241; 3 while ( (numdatos<lO 1 I : (numdator>=i%HüE3TRAS) 1 ;

do {

gotoxy( 16,211 ; cputs( "NP Canales = " 1 ; scanf ( "%d" .bnumcanales) ; if ( (numcanales<l) : : (nuawanales>=HNCANAL) 1

rnensaje("1 <= NQ Canalem <= 4*,241;

gotoxy(25,21); cputs(" "1;

3 while ((numcanales<li : :(numcanales>=MNCANAL));

do {

gotoxy( 16,221 ; cputs( "NP Tablas = " 1 ; gotoxy(25,221 ; cputs( " " 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 1 3 (numdatos 1 1

numdatos=xCOI C 11 t 11 ; / * asigna el numero de datos * / for(j=l;j<=numcanales;j++)

for ( k=l ; k<=numtablas; k++ 1 xE 01 t j 1 t kl =O ;

1 / * fin else * / 1 / * fin de leearchivo * /

pantalla0 c int graphdriver ; int graphmode ;

int error = -1; char path-driver11 = " ' I 1

/ * inicializa el modo gráfico * /

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 :

/* obtiene el atáximo de X * / / * obtiene o1 máximo do Y * /

x1=40; ~ 1 1 1 5 ; / * dmfino lo ooparado que estarán los ejes * / x2= 16 ; y2325 ; / * dol marco de la pantalla. * / rectangle(O,O,maxx,maxy) ; rectangle(2,2,maxx-2,iaaxy-S))

1 / * fin de pantalla * / 1 lena-tabla( 1 {

int i,negativo,offsetx;

off setx=numdatos+ 1 ; off set-O ; iniy-0; f i ny=O ; inix=O; f i nx=numdatos*2;

nega t i vo=- 1 ;

/ * marco del monitor * /

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.

-..* _I.. ~.- . I-

for (i=inix; i<=finx; i++i E / * obtiene los valores * / if (finy < datosCi3) finy=datosCil; / * mínimo y máximo para * /

* / if (iniy > datosCi1) iniy-datostil; / * nueva escala. > if (iniy<O) offset=iniy*negativo;

1 / * fin de llena tabla * / ejes( 1 c

1 i ne ( xl , y 1, xi maxy-y2 ) ; / * eje y * / i ine( xl-1, y1 , xl-1 ,maxy-yZ+l) ; 1 i ne ( xi, maxy-y2-of f set, maxx-x2, maxy-y2-of f set ; / * eje x * / 1 ine( xi-1 ,maxy-y2-offset+l ,maxx-xS+l ,maxy-y2-of fset+l) ;

set text sty 1 e ( DEFAULTFONT 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 de ejes * / escalaxy( / * obtine la escala en pixeles de io8 ejes X y Y * / c 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 n to r va 1 o< 1 unidadx=rangox/ xxx;

xi n te r va 1 o= 1 :

yyy=maxy-yl-y2 ; rangoy=finy-iniy; yintervalo=rangoy/NUWDIVY; unidadymrangoyíyyy;

/ * escala X * /

/ * oscala Y * /

/ * un pixel oquivale a 'unidady' * / offset=offset/unidady;

for ( i~xintorvalo: i<=rangox; ir i+xintorvalo) C xxxiliíunidadx; 1 in*( xxx+xl ,araxy-y2-offset, xxx+xl ,maxy-y2-offsot+b 1 ;

itoa( i+inix,numoro, 10) ; outtextxyi xxx+xl-8, maxy-y2-of f sett+lO, numero) ;

strcpy( nuamro, I' "1;

1

for ( i i=yintervalo; i i<=rangoy; i ic i i+yintervalo ) E yyy=(ii+iniy)/unidady; lino~xl-2,maxy-y2-yyy-off~~t,xl+4,maxy-y2-yyy-o~fset~;

if (yintervalo>=l) { / * oscala si Y son onteros * / strcpy(numer0," I' 1 ;

y=ii+iniy; re~iduo=(ii+iniy-y)*lO; if(ro8iduo>=6) y++; i toa ( y, numero, 10 1 ;

1 else gcvt(ii+iniy,2,numoro); / * escala si Y son decimales outtextxyí 4, maxy-y2-yyy-of f set-4, numero) ;

J 1 / * fin de escalaxy * / 230

dibuja( 1 € int i,primero,ultimo; i nt aax, aay , bbx, bby ; float auxx,auxy;

for(i=O;i<=finx;i++) / * obtiene el primer elemento dentro * / if (i==inix) { primero=i; / * del rango de x (finx-inix). * /

i=f i nx; ?

for(i=primero;i<=finx;i++) / * obtiene el ultimo elemento dentro * / if(i==finx) E ultimo=i; / * del rango de x. * /

i=finx; ?

/ * obtiene las coordenadas del punto A(aax,aay) , primero a graficar * /

auxx= ( pr 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 f set-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; / * obtiene las coordenadas * / auxy=datost i 3 /unidady; / * dol punto B(bbx,bby) * / bbx=au xx+xl ; / * obtiono las coordonadas respecto al monito: bby=maxy-y2-of f set-auxy ;

line(aax,aay,bbx,bby); / * t r a m una linoa ontrs los puntos A y B * / circle(bbx,bby,S); / * m r c a 01 punto B para que sea visible * / if !misma-escala) line(bbx,maxy-y2-off8ot,bbx,bby);

aax=bbx; / * el punto B 80th 01 punto A del siguiente trazo * / aay=bby ;

1 1 / * fin de dibuja * / 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) ;

cputs("¿ Desea graficar un intervalo de datos espoclfico (s/n1 7 "1; intervalorgetch0;

gotoxy ( 12,5 1 ;

231

if ( (intervalo=='s' I : ( intervalo=='Q' ) C clrscr( 1; strcpy(cadena,"Háximo el dato : * ) ; itoa(numdatos-3,numero,lO~; s t rca t ( cadena, numero 1 ;

puts( "intervalo en X que desea graficar. 'I 1 : gotoxy(l0,l); printf("De Xd datos, selecione el ",numdatos);

do C

gotoxy(l4,4); cputs("Apartir del dato X = ? ? ? "1; gotoxy(35,4) ; cputs( I' *I 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)));

strcpy(cadena,"Mínimo el dato : ' I ) ;

itoa(inicio+3,numero,lO); strcat(cadena,numero); strcpy(cadena2,"Máximo el dato : ' I ) ;

itoa(numdatos,numero, 1 0 ) ; strcat(cadena2,numero)i

cpu t s ( 'I

do E

gotoxy(l4,6); cputs("Hasta el dato X = 121 "1; got oxy ( 35,6 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

off Bet =O ; nega t i vo=- 1 ;

iniviniclo; finxsfin; iniy=O; f i ny=O ;

for (i=inix;i<=finx; i++) { / * obtiono lo8 valoros * I

i f (finy < datosCill finy=datosCil; / * mínimo y mdximo para $ 1

if (iniy > datoslil) iniy=datosíil; / * nueva oacala. * / 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

unicaescala( E int i,negativo,offsetx;

off set x=numda tos+ 1 : off set=O ; negat i vo=-1;

iniy=O; f iny=0 ; inix=O; f i nx=numdatos*2;

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 / * obtiene los valores * / if (finy < datosCill finy=datosCil; / * mfnimo y máximo para * / if (iniy > datosCi1) iniy=datosCil; / * la ESCALA UNICA. * /

1 if (iniy<Oi 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;

ventana0; 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: ' I ) :

scanf ( "Xd" ,&canal 1 t 1 lena-tabla( 1 ; pantalla(): escalaxy( ) ; dibuja( 1 : amplifica0;

? / * fin de si es s610 una gráfica * /

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;

1 e 1 se { mi smaesca la=C IERTO;

1 graf-todas( ;

? / * fin de else, grafica todos l o a canales * / 1 / * fin de grafica * / inicia( 1 C ventana( 1 gotoxy(32,S)i cputo("GRAF1CADOR X vs Y " ) : gotoxy(l7,lS); cputs("3i de6ea 0610 una parte de la gráfica, despus den); gotoxy(17,14); cputs("ob6ervar la gráfica completa, anote los intorva1os"ii gotoxy(l7,16); cputs("en X que desoo y proporci6nelos despus ... "1; espera( ;

1 / * fin de inicia * / main( 1 { lee-archivo( 1 ; if (archopen) C

inicia( ; grafica0;

1 clrscr( i

1 / * fin de main * / / * GRAFICA * /

234

/ * +-----------------------------'----'-"'----------------------------- i-

: Y1 . 4

I I GRAFICADOR2 X vs Y I

I : Este programa grafica puntos en XY,con la posibilidad I

I : de graficar únicamente una parte de la gráfica general, !

I : del monitor que es empleada como área de graficación es ! I : delimitada por los puntos siguientes, mismos que pueden ! I I ser ajustados deacuerdo a las nesesidades. Si se tienen 1

I : al mismo tiempo y a una misma escala, 6 c/u a su escala, : I I en cuyo caso podrá graficarse solo un grupo de datos. ,

I I I I

I I

I I I I

I

I

I

I

I

I

0 I

I

: obtiene automaticamente la escala nesesaria ; la parte !

I

I

I

: varios grupos de datos (canales) pueden graficarse todos !

I I

I I I I I I

I I

I I I I

y2 +------------------------------------------------------ I I

I Xi x2 I

+-------------------------------------------------------------------- + * / #include <stdlib.h> #include <stdio.h> #include <dos.h> #i nc 1 ude <coni o. h> +include <math.h> #include <string.h> #include <graphics.h>

9dof i ne +define +def i ne #dof ine +define +dof i ne +dof i ne +define

espera0 while(!(kbhitO)); getch0; NUHDIVX 10 / * nllrmero de division08 del eje X * / 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 arc h 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 ;

gotoxyi 16,6) ; cputs( "Cual es el nombre del archivo de datos: " ) ; strcpy(entrada, I' ");strcpy(tipo," " I ;

scanf ( "%si' ,entrada 1 ; gotoxy(l6,8); cputs("Tipo binario c 11 " 1 ; gotoxy(l6,9); cputs("Tipo hexadecimal C23"); gotoxy(l6,lO); cputs("Tipo ascii C 31 ' I ; 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; 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 j 1 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 33 C kl , oizoof ( 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 / * fin else * /

I

236 1 / * fin de leearchivo * / - .- I- "e-*.*

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 printf ( "¿ Desea graf icar los %d canales (s/n1 ? ' I , numcanales) ; opcion=getchO;

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();

1 / * fin de si es s610 una gr&fica * /

10 *

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 mi sma-escala=C IERTO ;

graf-todas( 1 ; 1

S / * fin do 0180, grafica todos los canalos * / 1 / * fin do grafica * / inicia( 1

main( i 4 loo-archivo( 1 ; if (archopen) {

inicia( 1 ; graficao;

1 clrscr( 1 ;

1 / * fin de main * / / * GRAFICA2 * /

NOTA: Las subrutinas de VENTANA,GRAFICA etc. son las mismas que Grafica.

C O N C L U S I O N E S

El procesamiento digital de señales , no debe verse exclusivamente como un 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 las condiciono8 del mismo , adom&. de poder estudiar las gráficas de los espmctros do la seAal , realizándose asi un 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 dtodo 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 Wtodoo más eficientos para obtener las cornponontes espoctralos, aplicando: Transforw- da 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 para *simular* condiciono8 y/o para *ostimar* rosultcdos confiablos , permito efectuar invo8tigacionos 8ads completas en menor tiompo.

238

A P E N D I C E

REFERENCIA BIBLIOGRAFICA

1:

2:

3:

4:

58

6:

7:

6:

9 :

HARRY F. DAVIS 'I Fourier Series & Orthogonal Function 'I

Dover Publications Inc. New York, U.S.A. 1980.

DOUGLAS F. ELLIOT & RAO K. RAMAHOAN 'I Fast Tranaform "

Academic Press Inc. U.S.A. 1989.

ENDERS A. ROBINSON " Multichanel Time Serios " Ho 1 den-Day I nc . San Franci8~0, U.S.A. 1967.

WILLIAM H.HAYT Jr. & JACK E. KEMERLY AnQlisis de Circuitos en Ingenieria "

Mc G r r w Hill de, i4c)xico S.A. Mxico D.F. 1975.

LEONARD S. BOBROW " Analisis de Circuitos El6ctricos Nueva Editorial Interawricana S .A . Nóxico D.F. 1983.

PETER BLOOMFIELD " Fourier Analysis of Tim Series: An Introduction . "

A. Wiley Now York U.S.A. 1976.

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 & NORBERT LERHER 'I A l g e b r a 'I

Prentice Hall Hispanoamericana S.A. México D.F. 1989.

239

QA40 1 D3.8

QA403.5 E4.4

TK454 H3.98

TK434 B3.818

QUSO B3.9

QC451.6 M.26 C.2

QA280 k6.4

QA154.2 S6.20

10 :

1 1 :

12:

13 :

14:

15 :

16 :

SOPHOCLES J. ORFANDIS .Optimun Signal Processisng I'

PETER LANCASTER I' Theory of Matrices "

KENDALL E . ATKINSON I' An itroduction to Analysis "

Jhon Wiley & Sons Inc. N e w York U .S .A . 1978.

RALPH DEUTSCH I' System Analysis Techniques ' Prentice Hall Co. N.J. U .S .A 1969.

GORDON S. KINO I' Acoustic Waves; devices, imaging and analog signal processing '

Prentice Hall Co. N.J. U.S.A. 1907.

SIMON HAYKIN " Adaptive Filter T.' Prentice Hall Co. N.J. U.S.A. 1986.

MARIO ROSSI 'I Acoustics and ~iwtroaooustics "

240

TK5 102.5 07.4

QA180 13.5

QA297 A8.4

QA402 D4

TK36 5 K5.3

TK7872 F5 WS.9

TK5981 R6.719

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:

Disco O Archivos Ejecutables *.EXE Disco 1 Archivos Ejecutables * .EXE Disco 2 Archivos Ejecutables *.EXE

El disco con todos los programas fuente, escritos en lenguaje C es:

Disco UN Archivos Fuente *.C

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:

Disco 3 P.W. Textos

m1 ranual corploto 08th distribuido on archivos de La manera siguiente, todos on 0 1 directorio PROYECTO.

I NTRODUC . TEOCAST. USJUACAST . TECCALTT.

TEOFOUR . USUAFOüR. TECFOUR.

sER1m.

copIcLus.

APBMDICE

MSR/ur. 17 de

Contenido 0 Introducción.

Referencia Te6ricia del programa CIWT. Manual Opmrativo del programa CIUT. Roferoncia T4cnica del programa CAST.

Roferencia Teórica del programa FOURIER. Manual Oporativo del programa FOURIER. Roforencia Tbcnica dol program ?OURIER.

Ihscripci6n Wneral y Campwwlio f&m Los programas para Analisis de Serios de Tiempo.

Conclusionos.

Rmforoncia Bibliogrifior y lbfrronoia de Archivos en Disoo.

ooptiembre de 1993.

24 1

.. Volume in d r i v e B is PHOYECTO_.-DO Directory uf B:\

JORMEM EXE NORM I EXE NORMAG E X E m Y D v EXE PSQRT E X E PaLR-r EXE CNVTOP EIXE TRIANG EXE SPUR EXE iINTfiE! EXE COSP EXE TRIG E X E

C I - LLU File(s) 62464 bytes free

Volume in drive E¡ is PROYECTO-,Di Directory of E:\

SHAPE E X E SP I KE EXE SPIKER E X E SMOOTH E X E SISMOGRA EXE BRAINY E X E WCROEJ EXE MACRO2 E X E UPI'T'OS E X E iEATEJ EXE MUESTRAS DAT CQEFICIE DAT CCORRELA DAT COHERE E X E COMPLEJO E X E

45056 bytes free

V01.ume in d r i v e E i s PHOYEXTO-DZ Directory of E:\

HERC EGI CGA BG I EGAVGA BGI GRAFIC2 E X E CAST EX€ FOURIER EX€ EJEMPLO1 SEN EJEMPLO1 COS EJEMPLO1 MAG EJEMPLO2 COE EJEMPLO2 SEN EJEMPLO2 COS EJEMPLO2 GRL EJEMPLOS COE EJEMPLOS SEN EJEMPLO3 FAS EJEMPLO3 ERL

27 File(s) 265216 bytes free

1:::. y 1 CROSS E X E FOLD .., . . . K" XF:' FADDEJ EXE MU I: NE ... .-

MATRGN EXE LOSTAB I?:XE DRUM EXE POLAR E!: X E:

SHAPER EXE COSTR C-XE QUADCO EXE MACHU k=xF- MACRQGRL. EXE HEAT EXE DATOS DRT MED I C I ON DA-I

GRAFICEJ EXE GRAFICA EXE MUESTRAS DAT EJEMPLO1 COE EJEMPLOl FAS EJEMPLOl GHL EJEMPLO2 MAG EJEMPLO2 FAS EJEMPLOS COS EJEMPLOS MAG

Volume in drive B is PROYECTOPW Directory of B:\PROYECTO

. .. I NTRODUC TEOCAST USUCSCAST TECCGST TEOFOUR USUCSFOUR TECFOUR SER XES APEND I CE

1 1 File(si) 236544 bytes free

Volume in drive B is PROYECTO-FW Directory of B:\

PW COM PW PRG PW HLP PW PRI PW SET PW MAC PROYECTO

-7- 7 Fil.e(s) ~ a 6 5 4 4 bytes free

Apéndice \.

243