Sei sulla pagina 1di 31

UNIVERSIDAD NACIONAL AUTNOMA DE MXICO

DPFI

ALUMNOS: HERNNDEZ ORTIZ LUIS JACOBO VAZQUEZ VILLANUEVA FERMI

MATERIA: APLICACIONES CON DSPS

PROFESOR: M.I. LARRY ESCOBAR SALGUERO

PRACTICA No. 2

NOVIEMBRE-05

INDICE

OBJETIVOS GENERALES:..................................................................................................3 DESARROLLO:.....................................................................................................................4 1. Acondicionamiento de la seal ECG..............................................................................4 1.2 Diseo del oscilador......................................................................................................7 RESULTADOS:..........................................................................................................9 DESEMPEO...........................................................................................................10 CONCLUSIONES: ..................................................................................................10 2. Diseo del filtro IIR......................................................................................................10 RESULTADOS:........................................................................................................14 DESEMPEO...........................................................................................................15 CONCLUSIONES:...................................................................................................16 3. Diseo del filtro FIR.....................................................................................................16 RESULTADOS:........................................................................................................19 DESEMPEO...........................................................................................................19 CONCLUSIONES:...................................................................................................20 BIBLIOGRAFIA...................................................................................................................21 ANEXO A. Cdigo fuente del oscilador...........................................................................22 ANEXO B. Cdigo fuente del filtro IIR...........................................................................23 ANEXO C. Cdigo fuente del filtro FIR..........................................................................25

OBJETIVOS GENERALES:

Comprobar de manera prctica el clculo, la implementacin y el funcionamiento, en el DSP TMS320C5402, de un oscilador tipo IIR de una determinada frecuencia; as como tambin de los filtros digitales tipo IIR y FIR. La seal de un oscilador diseado a 10 Hz, acta como una seal de ruido sobre una seal de electrocardiograma (ECG) previamente muestreada, el objetivo principal es disear dos diferentes filtros, IIR y FIR, para eliminar la seal de 10 Hz de la seal ECG. Observando ventajas y desventajas de cada uno de ellos.

DESARROLLO:
Dada una seal de electrocardiograma (ECG), suponer que cada ciclo de ECG corresponde a un segundo de tiempo. I.- Utilizando el DSP TMS320C5402 disear y realizar un oscilador del tipo IIR, a la seal senoidal con una SNR de 25 dB y 10 Hz.

1. Acondicionamiento de la seal ECG.


El acondicionamiento de la seal ECG consisti en: 1. Eliminar el offset presente en la seal ECG, que se obtuvo a partir del valor promedio de la misma, el cual se resto de cada valor de la seal original. 2. Normalizar la seal ECG en el intervalo de 0 a 1 y ajustarla al formato Q12. En la Figura 1.1 se muestran 1024 puntos de la seal ECG normalizada en el formato Q12.

Figura 1.1. Seal ECG en formato Q12.

La frecuencia de muestreo de la seal ECG se selecciono tomando en cuenta el nmero de ciclos en 5000 puntos, es decir:
fS = 5000 = 108.6956 , La cual se aproximo a f S = 110 Hz 46

3. Agregar la seal de salida del oscilador a la seal ECG. EL programa principal que ejecuto esto en el DSP es el siguiente.
DP= #sen SXM = #1 AR1 = #ecg AR2 = #sen BRC ; apunta a pagina de sen ; habilita extension de signo ; apuntador a la ECG ; apuntador a la salida del oscilador ; repite el ciclo para 1024 muestras

AR3 = #ecg_sen ; apuntador a la ECG mas la salida del oscilador = #(NP-1) A = *AR1+ A = A + *AR2+ ; suma seales *AR3+ = A FIN_SUM blockrepeat (FIN_SUM)

En la figura 1.2 es mostrada la salida producida por el programa anterior, en la cual se puede ver que por cada ciclo de la seal ECG hay aproximadamente 10 ciclos de la seal senoidal de ruido.

Figura 1.2. Seal ECG ms la salida del oscilador (ruido).

Los espectros de la seal ECG original y con ruido son mostradas en las Figura 1.3 y 1.4.

Figura 1.3. Espectro seal ECG sin Ruido.

Figura 1.4. Espectro seal ECG con ruido

En la figura 1.4 se ve claramente la espiga de 10 HZ que ha sido agregada al espectro de la seal ECG.

1.2 Diseo del oscilador.


El diseo del oscilador se baso en la siguiente ecuacin de un filtro IIR: y (n) = a1 y (n 1) a 2 y ( n 2) + b0 (n) Donde: ( n) es la entrada impulsiva.
a1 = 2 cos( w0 )

a2 = 1
b0 = Asen( w0 )

0 = 2

f0 fS

Siendo f 0 la frecuencia de oscilacin y f S la frecuencia de muestreo. Si f 0 =10 Hz y f S = 110 Hz (la cual se aproxim tomando en cuenta la seal ECG) entonces:
0 = 2
10 Hz = 0.5712 110 Hz

Con lo que:
a1 = 2 cos(0.5712) = 1.6825

De acuerdo a las especificaciones de diseo la amplitud de la senoidal generada por el oscilador debe ser tal que:
PS SNR = 10 log P r = 25dB ,

Pr =

PS 10 2.5
1 N

Donde: PS =

x
i =0

N 1

La cual resulto para la seal ECG, PS =196.2364W , por lo que:


Pr = 196.2364W = 0.62055W 10 2.5
A2 T

Con lo que la amplitud de la senoidal se calcula a partir:


Pr =

( sen 2 w0 )tdt

De la que resulta, A = 2 Pr = 2(0.62055W ) = 1.1140V la cual se normaliza respecto al mximo valor de la ECG, es decir:
AN = A 1.1140 = = 0.010928 max( ECG ) 101.9434

Valor de amplitud que resulto muy pequeo respecto a la seal ECG, sobre todo para motivos de visualizacin, por lo que se opto a utilizar una amplitud de 7 la cual fue claramente visible y por la tanto la SNR = 10 log Con lo que finalmente:
AN = A 7 = = 0.068665 max( ECG ) 101.9434

196.2364 = 9.0361dB 24.5

y
b0 = Asen( w0 ) = (0.068665) sen(0.5712) = 0.037123

Estos valores de los coeficientes se ajustaron al formato Q12, es decir.


a1 = 1.6825 (212 ) = 6890

a 2 =1 (212 ) = 4096
b0 = 0.037123 ( 212 ) = 152

De acuerdo a lo anterior, el programa principal que implementa el oscilador es el siguiente:


A = #(152) @(yn+1) = A *AR3+ = A BRC = #(NP-1) blockrepeat(FIN_OSC) AR2 = #ye ; carga apuntador a las muestras de salida repeat (#1), A = #0 macd(*AR2-, ai, A) @(yn+1) = A>>12 *AR3+ = A>>12

FIN_OSC Donde se observa que la salida del filtro para n = 0 es simplemente el valor del coeficiente b0 , ya que en este instante de tiempo la entrada impulsiva vale 1. Despus de calcular la primera salida del filtro, se realiza un bloque de repeticin de ciclo para NP igual a 1024 muestras y en donde se realizan las siguientes acciones: 1. Cargar AR2 con la direccin que apunta a la salida del filtro mas retardada, en esta caso para un retardo de 2.

2. Inicializar el acumulador A con cero, y ejecutar la instruccin macd(*AR2-, ai, A) para cada coeficiente ai 3. Actualiza el valor del la salida del filtro retardada en 1, la cual es el valor actual del filtro. 4. Almacena en memoria la salida actual del filtro.

RESULTADOS:

Figura 1.2.1. Salida del oscilador

En la figura 1.2.1. Se muestran 110 puntos de la seal senoidal generada por el oscilador implementado en el DSP. En la cual se puede ver claramente una frecuencia de 10 ciclos en 110 puntos o 93 ciclos en 1024 puntos, la cual equivale efectivamente a una senoidal de 10 Hz si la frecuencia de muestreo es 110Hz.

DESEMPEO. EL consumo de memoria de la implementacin del oscilador en el DSP se resume en la Tabla 1.1.
Tabla 1.1. Consumo de memoria.

Memoria de Programa 15 Memoria de datos Memoria de Total 7 20

Cabe mencionar que se reservaron 1024 localidades de memoria de programa adicionales para almacenar la salida del oscilador. El ciclo principal del filtro se ejecuta en 110ns donde 60ns corresponden a la operacin de multiplicacin acumulacin que se ejecuta en 3 ciclos de instruccin, ya que solo se repite dos veces, y no da tiempo que comience el pipeline para que se ejecute en un solo ciclo de instruccin.

CONCLUSIONES: Una vez diseado el oscilador, implementarlo en el DSP result sencillo gracias a las instrucciones de repeticin de instruccin y la de multiplicacin acumulacin macd, las cuales permitieron la implementacin con tan solo 4 instrucciones, con un mnimo de memoria, y un tiempo de ejecucin pequeo que permite su implementacin para una gran variedad de aplicaciones en tiempo real, adems de que debido a la estructura del mismo basta con recalcular los coeficientes para poder generar una gran variedad de frecuencias dentro de los limites del DSP.

2. Diseo del filtro IIR.


II.- Disear y realizar un filtro digital de alto desempeo que cancele la seal senoidal agregada en la primera parte de la prctica. El filtro se debe realizar de las siguientes formas: a) Un filtro FIR con longitud N seleccionando una ventana diferente a la cuadrada b) Un filtro IIR seleccionando cualquier tipo de aproximacin. El diseo e implementacin, se auxili en obtuvieron los coeficientes del filtro. el uso de matlab, donde se simul y se

La funcin utilizada en matlab para el diseo del filtro es: [NUM,DEN] = IIRNOTCH(Wo,BW, Ab) la cual disea un filtro digital notch de segundo orden con la frecuencia de notch en Wo y un ancho de banda BW en el nivel Ab. Wo debe satisfacer 0.0 < Wo < 1.0, con 1 correspondiendo a pi radianes por muestra. 10

Para nuestro caso:


Wo = f0 fS 2
Wo Q

BW =

Donde f 0 es la frecuencia de notch, calidad del filtro. wo = 10/(110/2); bw = wo/25; [b,a] = iirnotch(wo,bw,3);

f S la frecuencia de muestreo y Q el factor de

El segmento de programa matlab que disea el filtro es:

Cuya respuesta en frecuencia es mostrada en la figura 2.1, donde se puede ver que la frecuencia de notch esta en la frecuencia normalizada de de la espiga de 10 Hz es decir Wo = 0.1818 .

Figura 2.1. Respuesta en frecuencia del filtro IIR.

El espectro en frecuencia de la seal de salida del filtro es mostrada en la figura 2.2. Donde se aprecia claramente que la espiga de 10Hz ha sido casi completamente eliminada.

11

Figura 2.2. Espectro en frecuencia de la salida del filtro IIR (ECG filtrada).

En la figura 2.3 se muestra la seal de salida del filtro digital, donde se puede ver que la componente de ruido de 10 Hz ha sido prcticamente eliminada, con un mnimo de distorsin de la seal ECG original, por lo que se decidi utilizar los coeficientes b y a retornados.

Figura 2.3. Salida del filtro IIR (ECG filtrada).

Una vez obtenidos los coeficientes del filtro en matlab se normalizaron al formato Q12 para ser cargados en el DSP, los cuales son mostrados en la tabla 2.1.

12

Tabla 2.1. Coeficientes del filtro IIR.

b 0 4050 1 6814 2 4050

a 4096 -6814 4003

El programa en el DSP que implementa el filtro anterior es el siguiente:


DP = #xn SXM = #1 AR1 = #buf_in AR2 = #buf_out BRC = #(NP-1) blockrepeat(FIN_IIR) A = *AR1+ @xn = A AR3 = #xe ; carga apuntador a las muestras de entrada actual y retardadas repeat(#ORB), A = #0 macd(*AR3-, bi, A) AR4 = #ye ; carga apuntador a las muestras de salida retardadas repeat (#ORA), B = #0 macd(*AR4-, ai, B) A=A-B @(yn+1) = A>>12 *AR2+ = A>>12 FIN_IIR ; apunta a pagina de xn ; habilita extension de signo

En la cabecera del programa se inicializa el DSP y se inicializan los apuntadores a las seales de entrada y salida del filtro (almacenadas y para almacenar en el DSP). Dentro del bloque de repeticin de ciclo que se repite 1024 veces se lee la muestra actual de entrada, despus se calcula es la parte no recursiva del filtro, la cual simplemente consiste de:

13

1. Cargar AR3 con la direccin que apunta a la entrada del filtro mas retardada, en esta caso para un retardo de 2. 2. Inicializar el acumulador A con cero, y ejecutar la instruccin macd(*AR2-, bi, A) para cada coeficiente bi Enseguida se calcula la parte recursiva del filtro la cual es exactamente a la del filtro IIR que se utiliz como oscilador. Finalmente se almacena el resultado en memoria y se hace el ajuste final al formato Q12.

RESULTADOS: En la Figura 2.4 se ilustra la salida del filtro IIR implementado en el DSP la cual es bastante similar a la obtenida en la simulacin de matlab.

Figura 2.4 Salida del filtro IIR implementado en el DSP.

En la figura 2.5 se ilustra la salida del filtro IIR en el DSP sobrepuesta con la obtenida de la simulacin. En ella se puede apreciar que las diferencias son mnimas.

14

Figura 2.5 Seales de salida del filtro, una entregada por matlab y otra por el DSP.

DESEMPEO. EL consumo de memoria de la implementacin del filtro IIR en el DSP se resume en la Tabla 2.2
Tabla 2.2. Consumo de memoria.

Memoria de Programa 22 Memoria de datos Memoria de Total 14 36

Cabe mencionar que se reservaron 2048 localidades de memoria de programa adicionales para almacenar la entrada y salida del filtro IIR. El ciclo principal del filtro se ejecuta en 250ns donde 150ns corresponden a la operacin de multiplicacin acumulacin que se ejecuta en 3 ciclos de instruccin, que solo se repite dos veces para el calculo de la parte recursiva del filtro y tres para la no recursiva, por lo que no da tiempo que comience el pipeline en ningn caso, para que se ejecute en un solo ciclo de instruccin.

15

CONCLUSIONES: La implementacin del filtro IIR en el DSP fue relativamente sencilla al igual que oscilador, la nica diferencia fue que se agrego un segmento de programa para calcular la parte no recursiva del filtro, la cual requiri solo 4 instrucciones ms. Debido a que el orden del filtro fue de dos se consumi muy poca memoria de datos. El tiempo de ejecucin resultante fue muy pequeo, por lo que puede aplicarse sin ninguna dificultad al procesamiento de una seal ECG en tiempo real, y otras seales ms rpidas como audio, etc. El mayor inconveniente que se encontr en la implementacin de un filtro IIR sobre un DSP fue que para filtro de mayor orden, se presentan problemas de estabilidad, sobre todo, debido a la perdida de precisin al usar los formatos Q. Al comparar las respuestas obtenidas con el DSP y matlab, se observa que son muy pequeas, por lo que se puede considerar que la realizacin de filtros en DSP resulta de muy buen calidad cuando se utiliza como fija. Tambin cabe mencionar que gracias a que se utilizo un filtro notch para eliminar la espiga de 10 Hz, la cual se encuentra dentro de una zona del espectro de la seal ECG donde sus componentes contribuyen considerablemente, esta ltima se distorsion minimamente.

3. Diseo del filtro FIR.


Para el diseo e implementacin de este filtro, al igual que el filtro IIR, se auxilio en el uso de matlab, donde se simulo y se obtuvieron los coeficientes del filtro. La funcin utilizada en matlab para el diseo del filtro es: [NUM, DEN] = FIR2(N,F,M), la cual disea un filtro digital tipo FIR de N orden con la respuesta de frecuencia especificada por el vector F y M, y devuelve los coeficientes del filtro en los vectores A y B. Los vectores F y M especifican la frecuencia y magnitud para el filtro, La frecuencia en F debe estar entre 0.0 < F < 1.0, con 1.0 correspondiendo a la mitad de la frecuencia de muestreo. La parte de programa en matlab que realiza el filtro FIR es: [b a] = fir2(200,[0 0.165 0.182 0.182 0.195 1], [1 1 0 0 1 1]) La respuesta en frecuencia de este filtro es mostrada en la figura 3.1, la cual es de menor calidad que la obtenida para el filtro de notch IIR.

16

Figura 3.1. Respuesta en frecuencia del filtro FIR diseado en matlab.

El espectro en frecuencia de la seal de salida del filtro es mostrado en la figura 3.2. Donde se aprecia claramente que la espiga de 10Hz ha sido casi completamente eliminada, pero en el proceso tambin se han atenuado componentes de la seal original

Figura 3.2. Espectro en frecuencia de la salida del filtro FIR.

17

En la figura 3.3 se muestra la seal de salida del filtro digital, donde se puede ver que la componente de ruido de 10 Hz ha sido bastante atenuada, sin embargo se observa una pequea distorsin de la seal, adems del retardo caracterstico de aproximadamente 100 muestras. Una vez obtenidos los coeficientes del filtro en matlab se normalizaron al formato Q15 para ser cargados en el DSP, los cuales son mostrados en la tabla 3.1.

Figura 3.3. Salida del filtro FIR en matlab. Tabla 3.1. Coeficientes del filtro FIR.

11 5 -4 -12 -17 -17 -12 -2 10 19 24 21 11 -3 -18 -29 -32

29 39 36 23 1 -21 -37 -42 -33 -15 7 26 34 32 20 4 -8

1 0 -10 -25 -37 -37 -18 18 62 98 108 80 14 -73 -157 -203 -188

292 326 256 91 -128 -333 -454 -442 -284 -16 284 523 616 520 249 -123 -486

-141 319 704 888 804 464 -35 -543 -901 -992 -777 -317 253 758 103 9 100 5 662

3168 0 -922 -476 113 662 1005 1039 758 253 -317 -777 -992 -901 -543 -35 464 804

-141 -533 -743 -720 -486 -123 249 520 616 523 284 -16 -284 -442 -454 -333 -128

292 178 29 -106 -188 -203 -157 -73 14 80 108 98 62 18 -18 -37 -37

1 -5 -12 -14 -8 4 20 32 34 26 7 -15 -33 -42 -37 -21 1

29 12 -8 -24 -32 -29 -18 -3 11 21 24 19 10 -2 -12 -17 -17

11

18

-24 -8 12

-14 -12 -5

-106 29 178

-720 -743 -533

113 -476 -922

888 704 319

91 256 326

-25 -10 0

23 36 39

-12 -4 5

El ajuste a Q15 se realiz tomando en cuenta que la magnitud de los coeficientes que el programa en matlab entreg son mucho menores de uno, as como, la misma seal ECG, lo que asegur que no se desbordara el formato. El programa en el DSP que implementa el filtro anterior es el siguiente:
DP = #xn SXM = #1 AR1 = #buf_in AR2 = #buf_out BRC = #(NP-1) blockrepeat(FIN_IIR) A = *AR1+ @xn = A AR3 = #xe ; carga apuntador a las muetras de entrada repeat(#ORB), A = #0 macd(*AR3-, bi, A) *AR2+ = A>>15 FIN_IIR ; apunta a pagina de xn ; habilita extension de signo

En la cabecera del programa se inicializa el DSP y se inicializan los apuntadores a las seales de entrada y salida del filtro (almacenadas y para almacenar en el DSP). La parte restante del programa donde se implementa el filtro es similar a la parte no recursiva del filtro IIR. RESULTADOS: La salida de la ejecucin del programa anterior es mostrado en la figura 3.4, la cual como se observa es bastante similar a la obtenida en matlab. DESEMPEO. EL consumo de memoria de la implementacin del filtro FIR en el DSP se resume en la Tabla 3.2
Tabla 3.2. Consumo de memoria.

Memoria de Programa 15

19

Memoria de datos Memoria de Total

401 416

Adicionalmente se reservaron 2048 localidades de memoria de programa para almacenar la entrada y salida del filtro FIR. El ciclo principal del filtro se ejecuta en 2070ns, donde 2010ns corresponden a la operacin de multiplicacin acumulacin que se ejecuta en un ciclo de instruccin, ya que el pipeline comienza despus de la sexta repeticin y la macd llega a ejecutarse en solo ciclo de instruccin.

Figura 3.4 Salida en el DSP del Filtro FIR.

CONCLUSIONES: La implementacin del filtro FIR fue sencilla, por las mismas razones que las de oscilador y filtro IIR. Pero el consumo de memoria de datos y tiempo de ejecucin no resultaron tan eficientes, debido al gran nmero de coeficientes para obtener una respuesta aceptable, la cual es de menor calidad que la respuesta del filtro IIR de solo segundo orden. La respuesta del filtro FIR aunque elimina casi por completo la espiga de 10 HZ introduce distorsiona la seal ECG ya que tambin atena los componentes en la vecindad de la espiga, adems del retardo caracterstico de los filtros FIR. Aun as el tiempo de ejecucin resultante, todava permite aplicar al filtro FIR, sin ninguna dificultad, al procesamiento de una seal ECG en tiempo real, y otras seales ms rpidas como el audio, etc.

20

BIBLIOGRAFIA.
[1] SPRA819 - Generation of a Sine Wave Using a TMS320C54x Digital Signal Processor (July 2004). [2] SPRA669 - TMS320C54x Digital Filters ( July 2000). [3] SPRA079-IIR Filter Design on the TMS320C54x DSP [4] Pgina de MATLAB. www.mathworks.com (May 1996)

21

ANEXO A. Cdigo fuente del oscilador.


** programa que implementa un oscilador por medio ** de un filtro iir inestable .mmregs .global _c_int00 ; referencia al reset ;definicion de registros mapeados

NP

.set 1024 ; numero de puntos

** seccion de datos .sect ".buff"

buf_out

.space 16*NP ; buffer de salida

.sect ".data"

; seccion en memoria de datos

xn

.word 2048*2 .word 0

; apuntador a las muestras de entrada

xe xb yn

.word 0 .word 0 .word 0 .word 0 ;apuntador a las muestras de salida

ye yb

.word 0 .word 0

.sect ".coef"

; seccion en memoria de programa

ai

.word -2048*2 ; apuntador a los coeficientes de entrada .word 3445*2 .word 2048*2

bi

.word 76*2 .word 0

;untador a los coeficientes recursivos

** seccion de codigo .sect ".text" _c_int00

22

DP = #yn SXM = #1 AR3 = #buf_out

; apunta a pagina de sen_in ; habilita extension de signo ; carga apuntador a buffer de salida

A = #(76*2) @(yn+1) = A *AR3+ = A

BRC = #(NP-1) blockrepeat(FIN_OSC) AR2 = #ye ; carga apuntador a las muestras de salida repeat (#1), A = #0 macd(*AR2-, ai, A) @(yn+1) = A>>12 *AR3+ = A>>12 FIN_OSC

FIN nop goto FIN .end

ANEXO B. Cdigo fuente del filtro IIR


** programa que implementa un filtro iir .mmregs .global _c_int00 ** seccion de datos .sect ".data" NP ORA ORB xn .set 2 .word 0 ;apuntador a las muestras de entrada .word 0 xe xb .word 0 .word 0 ; basura de entrada .set .set 1024 1 ; seccion en memoria de datos ; referencia al reset ;definicion de registros mapeados

yn

.word 0 ;apuntador a las muestras de salida .word 0

ye yb

.word 0 .word 0 ; basura de salida

23

.sect ".buff" buf_in buf_out .space 16*NP ; buffer de entrada

.space 16*NP ; buffer de salida

.sect ".coef"

; seccion de coeficientes

ai

.word 4003 .word -6814 .word 4096

; coeficientes no recursivos

bi

.word 4050 .word -6814 .word 4050

; coeficientes recursivos

** seccion de codigo .sect ".text" _c_int00 DP = #xn SXM = #1 ; apunta a pagina de xn ; habilita extension de signo

AR1 = #buf_in ; apunta a buffer de entrada AR2 = #buf_out ; apunta a buffer de salida

BRC = #(NP-1) ; repite el bloque para las 1024 muestras blockrepeat(FIN_IIR)

A = *AR1+ @xn = A

; carga entrada actual

AR3 = #xe ; carga apuntador a las muestras de entrada actual y retardadas repeat(#ORB), A = #0 ; calcula parte no recursiva del filtro macd(*AR3-, bi, A)

AR4 = #ye ; carga apuntador a las muestras de salida retardadas repeat (#ORA), B = #0; calcula parte recursiva del filtro macd(*AR4-, ai, B)

A = A - B ; calcula salida actual del filtro @(yn+1) = A>>12 ; almancena y(n-1) *AR2+ = A>>12 FIN_IIR FIN nop goto FIN .end ; almacena resultado en memoria (formato Q12)

24

ANEXO C. Cdigo fuente del filtro FIR


** programa que implementa un filtro FIR

.mmregs .global _c_int00 ; referencia al reset

;definicion de registros mapeados

** seccion de datos

.sect ".data" NP ORB xn .set 200 .set 1024

; seccion en memoria de datos ; numero de puntos

; orden filtro .word 0 .word 0 .word 0 .word 0 .word 0 (deben ser 200 localidades de memoria reservadas) ; apuntador a las muestras de entrada

xe xb

.word 0 .word 0 ; basura

.sect ".buff" buf_in buf_out .space 16*NP ; buffer de entrada

.space 16*NP ; buffer de salida

.sect ".coef"

; seccion de para coeficientes

bi .word 11 .word 5 .word -4 .word -12 .word -17 .word -17 .word -12 .word -2 .word 10 .word 19 .word 24 .word 21

; coeficente mayor b200

25

.word 11 .word -3 .word -18 .word -29 .word -32 .word -24 .word -8 .word 12 .word 29 .word 39 .word 36 .word 23 .word 1 .word -21 .word -37 .word -42 .word -33 .word -15 .word 7 .word 26 .word 34 .word 32 .word 20 .word 4 .word -8 .word -14 .word -12 .word -5 .word 1 .word 0 .word -10 .word -25 .word -37 .word -37 .word -18 .word 18 .word 62 .word 98 .word 108 .word 80 .word 14 .word -73 .word -157

26

.word -203 .word -188 .word -106 .word 29 .word 178 .word 292 .word 326 .word 256 .word 91 .word -128 .word -333 .word -454 .word -442 .word -284 .word -16 .word 284 .word 523 .word 616 .word 520 .word 249 .word -123 .word -486 .word -720 .word -743 .word -533 .word -141 .word 319 .word 704 .word 888 .word 804 .word 464 .word -35 .word -543 .word -901 .word -992 .word -777 .word -317 .word 253 .word 758 .word 1039 .word 1005 .word 662 .word 113

27

.word -476 .word -922 .word 31680 .word -922 .word -476 .word 113 .word 662 .word 1005 .word 1039 .word 758 .word 253 .word -317 .word -777 .word -992 .word -901 .word -543 .word -35 .word 464 .word 804 .word 888 .word 704 .word 319 .word -141 .word -533 .word -743 .word -720 .word -486 .word -123 .word 249 .word 520 .word 616 .word 523 .word 284 .word -16 .word -284 .word -442 .word -454 .word -333 .word -128 .word 91 .word 256 .word 326 .word 292

28

.word 178 .word 29 .word -106 .word -188 .word -203 .word -157 .word -73 .word 14 .word 80 .word 108 .word 98 .word 62 .word 18 .word -18 .word -37 .word -37 .word -25 .word -10 .word 0 .word 1 .word -5 .word -12 .word -14 .word -8 .word 4 .word 20 .word 32 .word 34 .word 26 .word 7 .word -15 .word -33 .word -42 .word -37 .word -21 .word 1 .word 23 .word 36 .word 39 .word 29 .word 12 .word -8 .word -24

29

.word -32 .word -29 .word -18 .word -3 .word 11 .word 21 .word 24 .word 19 .word 10 .word -2 .word -12 .word -17 .word -17 .word -12 .word -4 .word 5 .word 11

** seccion de codigo .sect ".text" _c_int00

DP = #xn SXM = #1

; apunta a pagina de xn ; habilita extension de signo

AR1 = #buf_in ; carga apuntador a buffer de entrada AR2 = #buf_out ; carga apuntador a buffer de salida

BRC = #(NP-1) ; ejecuta el filtro para las 1024 muestras blockrepeat(FIN_FIR)

A = *AR1+ @xn = A

; trae entrada actual al filtro

AR3 = #xe ; carga apuntador a las muetras de entrada repeat(#ORB), A = #0 macd(*AR3-, bi, A) ; calcula el filtro

*AR2+ = A>>15 ; almacena resultado en memoria(formato Q15) FIN_FIR FIN nop goto FIN .end

30

31

Potrebbero piacerti anche