Implementaci
´
on de un Control Activo de Ruido
en Configuraci
´
on Feedback basado en un
Microcontrolador
Microcontroller-based Feedback Active Noise Control
Pablo Bernad
´
ı
1
, Pablo Gomez
2
Facultad de Ingenier
´
ıa, Universidad de Buenos Aires
Paseo Col
´
on 850, Buenos Aires, Argentina
1
pbernadi@fi.uba.ar
2
pgomez@fi.uba.ar
Abstract—This work describes an active noise control
system implementation with reduced, low cost hardware using
the EDU-CIAA-NXP board. The filtered-X LMS algorithm
is described in its feedforward and feedback configurations,
and design details for anti-alias and reconstruction filters
are given. The software driving the system is described and
test results in feedforward configuration are shown. Using
a pure tone as the perturbing signal, a 30dB attenuation
was achieved, which is adequate according to performance
requirements in active noise control applications.
Keywords: acoustics; audio; control; filtered-X LMS;
EDU-CIAA-NXP.
Resumen— Este trabajo describe la implementaci
´
on de
un sistema de control activo de ruido sobre la plataforma
EDU-CIAA-NXP con hardware reducido y de bajo costo.
Se hace una revisi
´
on del algoritmo filtered-X LMS en
configuraciones feedforward y feedback, y se detalla el dise
˜
no
de filtros anti-alias y de reconstrucci
´
on. Se describe el software
que corre sobre la plataforma, y se muestran resultados de
ensayos con la configuraci
´
on feedback. Usando un tono puro
como se
˜
nal perturbadora se logr
´
o una atenuaci
´
on de 30dB,
que es adecuada seg
´
un requerimientos de performance en
aplicaciones de control activo de ruido.
Palabras clave: ac
´
ustica; audio; control; filtered-X LMS;
EDU-CIAA-NXP.
I. INTRODUCCI
´
ON
Los problemas relacionados con el ruido ac
´
ustico se
hacen cada vez m
´
as frecuentes y evidentes a medida que
aumenta el uso de equipos industriales tales como motores,
ventiladores, compresores o transformadores. A su vez, el
ruido urbano debido a veh
´
ıculos, alarmas y maquinaria uti-
lizada en mantenimiento residencial tiene efectos negativos
sobre la calidad de sue
˜
no, concentraci
´
on e incluso desarrollo
en adolescentes, con impactos medibles en productividad,
turismo y salud [1]. Tradicionalmente se ha encarado el
problema usando m
´
etodos pasivos tales como cerramientos
o paredes para atenuar el ruido, lo que da buenos resultados
sobre un amplio espectro de frecuencias. Sin embargo, para
el rango de frecuencias bajas, resultan menos efectivos y
m
´
as costosos.
El control activo de ruido (o ANC - Active Noise Control)
se basa en dispositivos electroac
´
usticos o electromec
´
anicos
que cancelan una se
˜
nal no deseada bas
´
andose en el principio
de superposici
´
on, generando una se
˜
nal de igual amplitud
pero de fase opuesta que resulta en la cancelaci
´
on de
ambas se
˜
nales en el punto de inter
´
es [2]. Aparecen como
complemento de los m
´
etodos pasivos para bajas frecuencias
[3], estando la mayor
´
ıa de las aplicaciones por debajo de
1kHz. Un requerimiento de performance habitual para un
sistema ANC es una atenuaci
´
on de la se
˜
nal perturbadora de
por lo menos 10dB [4].
El dise
˜
no de sistemas ANC consiste en el uso de al menos
un micr
´
ofono y un parlante alimentado con la se
˜
nal de
control (antiruido). Como las caracter
´
ısticas de la fuente de
ruido y del ambiente son no estacionarias, la implementaci
´
on
requiere de un sistema ANC adaptativo, lo que se traduce
en un sistema digital implementado mediante filtros FIR o
IIR. Los filtros adaptativos ajustan sus coeficientes en el
tiempo, de modo de minimizar una se
˜
nal de error, siendo el
algoritmo LMS y sus variantes uno de los predilectos para
esta tarea por su simpleza y bajo costo computacional [5].
En la bibliograf
´
ıa es m
´
as frecuente encontrar an
´
alisis de
los algoritmos a nivel num
´
erico o matem
´
atico y menos ha-
bitual la implementaci
´
on de los mismos. A modo de ejemplo
se analiz
´
o el trabajo de Boucher et al. [6] que mplementa
un sistema ANC feedback sobre el DSP TMS320C50 de TI.
Utilizando un microfono y un parlante de buena calidad,
y muestreando con 14 bits a 600Hz, se sugiere que es
posible una atenuacion de un tono puro de 40dB. Tambi
´
en
est
´
a el caso de Kuo et al. [7], donde se implementa un
sistema similar sobre el TMS320C32 promediando la salida
de 3 micr
´
ofonos de alta calidad dispuestos triangularmente
y muestreando con 16 bits a 1kHz, con lo que se obtuvo
una reducci
´
on de hasta 60dB. Sistemas de mayor comple-
jidad, como los que buscan atenuar ruidos de banda ancha,
requieren implementaciones en PC [8] [9].
En el presente trabajo se busca alcanzar una performance
aceptable utilizando elementos de bajo costo: micr
´
ofono y
parlante de bajo costo y conversores A/D y D/A integrados
en el microcontrolador. Usando un tono puro como se
˜
nal
perturbadora, se alcanz
´
o una atenuaci
´
on de 30dB. El trabajo
se estructura de la siguiente manera. En la secci
´
on II se pre-
sentan los algoritmos utilizados para problemas de control
activo de ruido. En las secciones III y IV se detalla el dise
˜
no
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
53
Recibido: 03/09/18; Aceptado: 09/11/18
del hardware y el software involucrados, en la secci
´
on V se
describen los ensayos realizados y los resultados obtenidos,
y finalmente en la secci
´
on VI se presentan las conclusiones.
A. Configuraciones para ANC
Existen dos m
´
etodos cl
´
asicos para efectuar el control de
ruido. El primero de ellos, llamado feedforward, m
´
as com
´
un
en la mayor
´
ıa de las aplicaciones, consiste en el uso de dos
micr
´
ofonos y un parlante. El segundo, llamado feedback,
depende de un
´
unico micr
´
ofono para identificar y cancelar
el ruido.
1) Configuraci
´
on Feedforward: La figura 1 muestra el
diagrama en bloques para la configuraci
´
on feedforward, en
la cual se utiliza un micr
´
ofono para medir el ruido r(n)
cerca de su fuente, y un segundo micr
´
ofono que mide el
error e(n) en el punto donde se desea lograr la atenuaci
´
on.
El ruido es transformado por la respuesta impulsiva del
recinto dando origen a ˜r(n), que interfiere con la se
˜
nal
deseada x(n). El filtro adaptativo w(n) busca caracterizar
la respuesta impulsiva del recinto para generar una se
˜
nal de
control y(n) = ˜r(n) que permita cancelar el ruido.
Fig. 1. Esquem
´
atico del sistema en configuraci
´
on feedforward.
2) Configuraci
´
on Feedback: Hay ocasiones en que no
es posible medir una referencia independiente del ruido,
por lo que el algoritmo adaptativo debe estimarla a partir
del micr
´
ofono de error. La complejidad en el software
se ve incrementada por esta raz
´
on, como se ver
´
a en la
secci
´
on siguiente. En la figura 2 se muestra un esquema
para configuraci
´
on feedback.
II. ALGORITMOS LMS Y FILTERED-X LMS
Como se mostr
´
o en la secci
´
on I-A, en ambas config-
uraciones para ANC se depende generalmente del algo-
ritmo LMS (Least Mean Square), desarrollado en 1960 por
Widrow y Hoff [10], que busca minimizar iterativamente el
error cuadr
´
atico medio entre la se
˜
nal deseada y la medida.
Esto se logra convolucionando el ruido r(n) = [r(n) r(n
1) · · · r(n M + 1)]
T
(o una estimaci
´
on del mismo) con
el filtro w(n) = [w(0) w(1) · · · w(M 1)]
T
, y usando el
m
´
etodo de Steepest Descent para optimizar sus coeficientes
[11] con dicho criterio. En el problema considerado, s
´
olo es
posible medir el error e(n), ya que la superposici
´
on entre la
se
˜
nal de inter
´
es x(n), el ruido ˜r(n) y la se
˜
nal de control y(n)
Fig. 2. Esquem
´
atico del sistema en configuraci
´
on feedback.
sucede en el campo ac
´
ustico. En principio, esto simplifica la
implementaci
´
on al no existir necesidad de realizar el c
´
alculo
del error dentro del microcontrolador.
El algoritmo se maneja sobre dos supuestos importantes
procesos de media nula
correlaci
´
on nula entre el ruido y la se
˜
nal de inter
´
es
El algoritmo LMS consiste en los siguientes pasos iterados
en el tiempo:
1) Determinar el error e(n) = x(n) + ˜r(n) + y(n) =
x(n) + ˜r(n) + w
T
(n)r(n)
2) Actualizar los coeficientes del filtro w(n + 1) =
w(n) + µe(n)r(n)
donde µ es el paso del algoritmo. Idealmente, se desea que
w
T
(n)r(n) = ˜r(n), aunque en realidad se obtendr
´
a su
estimaci
´
on. Para asegurar la convergencia del algoritmo, se
establece la condici
´
on
0 < µ <
2
tr(E[rr
T
])
(1)
que depende fuertemente de la se
˜
nal de entrada, por lo que
existe una limitaci
´
on cuando su magnitud no es conocida.
Para salvar esta dificultad, se realiza una modificaci
´
on en
la actualizaci
´
on del filtro w, dividi
´
endola por la norma
al cuadrado de la se
˜
nal de referencia. Esto resulta en el
algoritmo NLMS (Normalized Least Mean Square), que
consiste en los siguientes pasos:
1) Determinar el error e(n) = x(n) +r(n)+ w
T
(n)r(n)
2) w(n + 1) = w(n) +
µe(n)
a+||r(n)||
2
r(n)
donde a es una constante de regularizaci
´
on. La condici
´
on
sobre µ en este caso resulta
0 < µ < 2 (2)
y la convergencia mejora gracias a la independencia del nivel
de se
˜
nal [5].
Existe una consideraci
´
on principal que impide implemen-
tar este esquema exitosamente en un contexto de cancelaci
´
on
de ruido. La se
˜
nal de control generada digitalmente es
convertida a una se
˜
nal anal
´
ogica, y actuada por medio de un
circuito amplificador y un parlante. M
´
as a
´
un, la medici
´
on
del error recorre un camino similar aunque inverso, siendo
tomada por un micr
´
ofono, acondicionada por un circuito
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
54
http://elektron.fi.uba.ar
amplificador y luego convertida a una se
˜
nal digital. Esta
cadena que comienza con una se
˜
nal digital, atraviesa un
sistema el
´
ectrico/ac
´
ustico/el
´
ectrico y termina nuevamente
con una se
˜
nal digital es llamada camino secundario e
introduce un retardo. Si no se compensa el efecto del camino
secundario sobre las se
˜
nales, no ser
´
a posible obtener una
se
˜
nal de control adecuada [3].
El algoritmo FXLMS modifica lo visto hasta ahora, identi-
ficando el camino secundario e incorpor
´
andolo al esquema.
Esto se hace previo a la fase de control, en ausencia de
otras se
˜
nales (es decir x(n) = r(n) = 0), generando una
secuencia de ruido blanco y
0
(n) que excita al parlante, y es
medido por el micr
´
ofono de error. En este caso es posible
usar los algoritmos LMS o NLMS tal como se describieron
para estimar la respuesta del camino secundario, ya que se
conoce exactamente el vector de referencia y
0
(n), como se
ver
´
a en la secci
´
on IV-C. Una vez identificada esta respuesta
impulsiva, comienza la fase de control, durante la cual es
posible realizar la adaptaci
´
on de los coeficientes del filtro
mediante los algoritmos LMS o NLMS. Por simplicidad
y unicidad en la presentaci
´
on, de aqu
´
ı en adelante se
describir
´
an configuraciones basadas en el algoritmo LMS.
A. FXLMS en configuraci
´
on feedforward
La figura 3 muestra el diagrama en bloques para el
algoritmo FXLMS en configuracion feedforward. S(z) es
la respuesta del camino secundario, mientras que
ˆ
S(z) es
su estimaci
´
on (identificada previamente de forma offline).
P (z) es la respuesta del recinto y
ˆ
P (z) su estimaci
´
on
online, contenida en el filtro adaptado w(n). La presencia
del bloque
ˆ
S(z) se justifica por la introducci
´
on del retardo
asociado al camino secundario [12], y frente a la alternativa
de anteponer a la salida del sistema un bloque
ˆ
S
1
(z) que
compense este efecto, inversa que no necesariamente existe.
dominio ac
´
ustico
LMS
ˆ
P (z)
ˆ
S(z)
S(z)
Σ
+
+
P (z)
Σ
+
+
r(n)
y(n) ˜y(n)
e(n)
˜r(n)
x(n)
r(n)
Fig. 3. Diagrama en bloques feedforward.
La referencia de ruido r(n) por lo tanto, es convolu-
cionada con
ˆ
s antes de ser utilizada para la actualizaci
´
on de
los coeficientes de w(n). La medici
´
on de la superposici
´
on
de todas las se
˜
nales en juego es e(n). El algoritmo FXLMS
feedforward consiste entonces en:
1) Calcular la se
˜
nal de control y(n) = w
T
(n)r(n)
2) Calcular r(n) =
ˆ
s
T
r(n)
3) Actualizar los coeficientes del filtro w(n + 1) =
w(n) + µe(n)r(n)
TABLA I
N
´
UMERO DE OPERACIONES DE PUNTO FLOTANTE PARA FXLMS
FEEDFORWARD
Ecuaci
´
on × + Operaciones
w
T
(n)r(n) M M 1 2M 1
ˆ
s
T
r(n) L L 1 2L 1
w(n) + µe(n)r(n) M M 1 2M 1
Total 2M + L 2M + L 3 4M + 2L 3
Este algoritmo requiere entonces actualizar con cada
nueva muestra los vectores r(n), w(n) de longitud M ,
y mantener una copia constante de
ˆ
s, de longitud L. La
cantidad de operaciones de punto flotante necesarias en esta
configuraci
´
on se detalla en la tabla I. Si se muestrea con una
frecuencia f
s
= 2f
max
, entonces la cantidad de operaciones
de punto flotante por segundo necesarias es
N
flops
= 2f
max
(4M + 2L 3) (3)
B. FXLMS en configuraci
´
on feedback
Si no se dispone de la referencia de ruido r(n), debe
ser estimada. La adaptaci
´
on de w (n) buscar
´
a minimizar
e(n), lo que se logra cuando ˜y(n) ' ˜r(n), por lo que
la misma se
˜
nal de control contendr
´
a una referencia del
ruido. Podemos obtener una estimaci
´
on de ˜y(n) mediante
y(n) = ˆs y(n), por lo que la estimaci
´
on de la referencia
de error es simplemente ˆr(n) = e(n) y(n). La figura 4
muestra el diagrama en bloques para esta configuraci
´
on.
dominio ac
´
ustico
LMS
ˆ
P (z)
ˆ
S(z)
S(z)
Σ
+
+
ˆ
S(z)
Σ
+
P (z)
Σ
+
+
r(n)
y(n)
˜y(n)
e(n)
ˆr(n)
y(n)
x(n)
r(n)
˜r(n)
Fig. 4. Diagrama en bloques feedback.
El algoritmo FXLMS en configuraci
´
on feedback resulta
en los siguientes pasos:
1) Calcular la se
˜
nal de control y(n) = w
T
(n)
ˆ
r(n)
2) Estimar ˆr(n) = e(n)
ˆ
s
T
y(n)
3) Calcular r(n) =
ˆ
s
T
ˆ
r(n)
4) Actualizar los coeficientes del filtro w(n + 1) =
w(n) + µe(n)r(n)
En este caso, adem
´
as de guardar
ˆ
s, w(n) y
ˆ
r(n), debe
guardarse y(n), tambi
´
en de longitud L. La cantidad de
operaciones de punto flotante por segundo para esta con-
figuraci
´
on es
N
flops
= 8(M + L 1)f
max
(4)
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
55
http://elektron.fi.uba.ar
TABLA II
N
´
UMERO DE OPERACIONES DE PUNTO FLOTANTE PARA FXLMS
FEEDBACK
Ecuaci
´
on × + Operaciones
w
T
(n)r(n) M M 1 2M 1
e(n)
ˆ
s
T
y(n) L L 1 2L 1
ˆ
s
T
r(n) L L 1 2L 1
w(n) + µe(n)r(n) M M 1 2M 1
Total 2M + 2L 2M + 2L 4 4(M + L 1)
III. HARDWARE
Para realizar el procesamiento de las se
˜
nales y el al-
gor
´
ıtmo se utilizar
´
a como plataforma la EDU-CIAA-NXP.
El proyecto CIAA [13] surgi
´
o de la necesidad de mejorar
la competitividad de PyMEs e industrias gracias a la incor-
poraci
´
on de electr
´
onica en sus procesos, lo que llev
´
o al de-
sarrollo de la Computadora Industrial Abierta Argentina. La
placa EDU-CIAA-NXP fue concebida para ser utilizada en
educaci
´
on, y cuenta con un procesador Cortex M4F/M0 con
FPU con una potencia de hasta 204 Mflops y una multitud
de GPIO, entre los que encontramos 3 coversores A/D y uno
D/A de 10 bits con frecuencias m
´
aximas de funcionamiento
de 400 kHz, lo que cubre todas las necesidades de nuestro
sistema.
Asumiendo una frecuencia de actuaci
´
on m
´
axima de
f
max
= 500Hz, seg
´
un las ecuaciones 3 y 4, es posible
obtener filtros de orden M = L = 34000 para el caso
de la configuraci
´
on feedforward, y de M = L = 25500
para la configuraci
´
on feedback. Esto representa retardos de
hasta 34s y 25s respectivamente, mientras que los ejemplos
en la literatura lidian con retardos menores a los 500ms.
Por ejemplo, en [6] se utilizan filtros de tama
˜
nos M = 16
Y L = 256 muestreando a 600Hz; en [7] se usan filtros
de M = 256 y L = 128 muestreando a 1kHz. Para esta
aplicaci
´
on se ha considerado adecuada una frecuencia de
muestreo de 1kHz, lo que permite actuar hasta 500Hz.
La performance de un sistema ANC depende fuertemente
de la identificaci
´
on del camino secundario [3], por lo que
el tama
˜
no del filtro
ˆ
s se fij
´
o en L = 256 coeficientes,
lo que permite caracterizar un retardo del recinto de hasta
256/1000Hz=256ms. Por otro lado, se asumi
´
o una longitud
para el camino principal mucho m
´
as corta, y el tama
˜
no
del filtro w se fij
´
o en M = 64 coeficientes, lo que
permite caracterizar el retardo entre la fuente de ruido y el
micr
´
ofono. Seg
´
un la ecuaci
´
on 4 se requerir
´
an 1,276 Mflops,
lo que representa aproximadamente el 0,6% de la capacidad
de c
´
alculo disponible.
La interacci
´
on del algoritmo FXLMS sobre la EDU-
CIAA-NXP y el plano ac
´
ustico se realiza mediante los puer-
tos ADC, tomando mediciones de uno o dos micr
´
ofonos,
dependiendo de la implementaci
´
on elegida. Por otro lado,
la se
˜
nal de control es alimentada a un parlante por medio
del puerto DAC. Ambas interfaces requieren de acondi-
cionamiento de se
˜
nal y frecuencias de corte para evitar
aliasing en la conversi
´
on A/D o im
´
agenes en la conversi
´
on
D/A. Para ambos casos, se us
´
o un circuito basado en la nota
de aplicaci
´
on [14]. La figura 5 da el diagrama en bloques
del sistema propuesto.
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
37
39
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
Ti ra de 40 pi nes hembr a de
0. 1"( 2, 54 mm) de espaci ado
1
108
36
73
37
72
109
144
LPC4337 JBD144
P0MN99.00 06
ESD14330-
BOTÓN DE RESET
J UMPER DE MODO I SP
USB PARA DEBUG
y UART2
ver 4 r ev 2
J UMPERS RS485
RS485_A
RS485_B
RS485_GND
Filtro
anti-alias
Preamplicador
Micrófono
de referencia
ADC1/CH3
Filtro
anti-alias
Preamplicador
Micrófono
de error
ADC0/CH2
Filtro de
reconstrucción
Buer
Altavoz
potenciado
DAC
Monitoreo en PC
Fig. 5. Esquem
´
atico del sistema propuesto.
A. Preamplificador de micr
´
ofono para ADC
La figura 6 muestra el circuito utilizado como preampli-
ficador de micr
´
ofono y filtro anti-alias para la entrada del
ADC.
Fig. 6. Circuito preamplificador/filtro anti-alias.
Los puertos anal
´
ogicos usan como referencia una tensi
´
on
de 3,3V, por lo que se decidi
´
o usar esa tensi
´
on para alimentar
los circuitos. Esto requiere que la se
˜
nal de entrada tenga un
rango de 0V a 3,3V, lo que implica usar un bias de 1,65V
para el amplificador. Esto se logra si, en el circuito de la
figura 6, R3=R5. Por otro lado, para que la sensibilidad del
micr
´
ofono sea buena, es necesario que R1 sea grande frente
a C3 en el rango de frecuencias de inter
´
es, para que la se
˜
nal
generada por el micr
´
ofono tenga buen nivel en la entrada
del amplificador operacional.
Para evitar aliasing en el muestreo, se requiere que el
polo formado por R2 y C2 tenga un valor tal que aten
´
ue las
frecuencias fuera del rango de inter
´
es hasta niveles despre-
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
56
http://elektron.fi.uba.ar
ciables. Con todas estas restricciones, los valores elegidos
para los componentes resultaron los que se muestran en la
tabla III.
TABLA III
COMPONENTES PARA EL PREAMPLIFICADOR DEL ADC
Componente Valor Comentarios
R1 10k Da buena sensibilidad al micr
´
ofono
electret
R3, R5 330k Tolerancia de 1% para minimizar bias
y evitar saturaci
´
on
C3 10µF El polo generado con R1 queda en
f = 1, 6Hz (pasa-altos)
R2 330k Ganancia del amplificador = 33
C2 100nF El polo generado con R2 queda en
f = 4, 8Hz (pasa-bajos)
C6 100µF El polo generado con R3 y R5 queda
en f = 0, 1Hz (pasa-altos)
El polo formado por R2 y C2 se ubica en 4,8Hz, una
frecuencia muy baja, pero debe tenerse en cuenta que se
trata de un filtro de primer orden, por lo que su atenuaci
´
on
es de 20dB por d
´
ecada. Esto da una atenuaci
´
on de 40dB, o
100 veces a una frecuencia de 480Hz, lo que se considerar
´
a
la frecuencia de corte.
B. Buffer para DAC
El dise
˜
no de la interfaz DAC/parlante (figura 7) sigue
criterios similares a los utilizados en la secci
´
on anterior. En
este caso, la entrada al circuito est
´
a montada sobre 1,65V, y
la salida est
´
a centrada en 0V. La ganancia es unitaria para
ser compatible con niveles de audio, y se implementa nueva-
mente un filtro pasa bajos, llamado filtro de reconstrucci
´
on,
para evitar frecuencias esp
´
ureas generadas por el proceso de
conversi
´
on D/A.
Fig. 7. Circuito preamplificador/filtro anti-alias.
Algunos componentes mantienen sus valores, como la red
de bias. Se agrega un capacitor de desacople C5 a la salida,
junto con una resistencia de carga R6. Los valores para los
componentes se dan en la tabla IV.
Nuevamente, el polo generado por R2 y C2 queda en
una frecuencia baja, pero se busca evitar problemas con
frecuencias esp
´
ureas.
El amplificador operacional elegido fue el MCP6002, que
es rail to rail y funciona con tensiones bajas compatibles con
los 3,3V provistos por la EDU-CIAA-NXP.
TABLA IV
COMPONENTES PARA EL BUFFER DEL DAC
Componente Valor Comentarios
R1, R2 10k Ganancia unitaria
C2 1µF El polo generado con R2 queda en
f = 15, 9Hz (pasa-bajos)
R3, R5 330k Tolerancia de 1% para minimizar bias
y evitar saturaci
´
on
C3 10µF El polo generado con R1 queda en
f = 1, 6Hz (pasa-altos)
R4 47Ω
R6 100K Resistencia de carga, grande frente
a impedancia de entrada de eventual
etapa de potencia
C5 10µF El polo generado con R6 queda en
f = 0, 16Hz (pasa-altos)
El actuador es un parlante potenciado Microlab B-77, con
altavoces de 4” y 0,75”, con una potencia de 24W RMS y
55Hz < Bw < 20kHz.
IV. SOFTWARE
El funcionamiento del sistema ANC desde el punto de
vista del software depende de dos factores principales:
interfaces A/D y D/A
algoritmo FXLMS
A. Conversi
´
on A/D y D/A
Se busca que el algoritmo FXLMS trabaje con n
´
umeros
de punto flotante que mantengan relaci
´
on con las tensiones
de las se
˜
nales, entre -1,65V y 1,65V, mientras que las
muestras de los conversores A/D son n
´
umeros entre 0 (0V)
y 1023 (3,3V). Para obtener valores en el rango deseado
a la medici
´
on se le resta un bias de 511 y se la escala. Lo
mismo se hace con la conversi
´
on D/A: los valores calculados
internamente se encuentran entre -1,65 y 1,65, a los que se
les suma un bias y se los escala para obtener n
´
umeros en el
rango 0 a 1023.
Para tomar muestras de dos pines ADC distintos sin in-
terrumpir constantemente el programa principal, se opt
´
o por
usar dos buffers DMA, cada uno asignado a un pin diferente.
Cuando estos buffers se llenan, generan interrupciones que
activan flags independientes. Si ambos flags est
´
an activos,
se promedian todos los datos en cada buffer para obtener
dos mediciones: e(n) (en mabas configuraciones) y r(n)
(en configuraci
´
on feedforward). Una vez que se completa
esta fase, se puede alimentar el algoritmo FXLMS con los
nuevos datos.
La EDU-CIAA-NXP permite muestrear a frecuencias
mucho m
´
as altas que las necessarias para esta aplicaci
´
on,
lo que se aprovech
´
o para reducir el ruido de cuantizaci
´
on
en los datos del ADC, de resoluci
´
on muy limitada. El
efecto te
´
orico de sobremuestrear por un factor de 100
100kHz/(2 × 480Hz) ' 104 permite obtener una res-
oluci
´
on de 10 + log
2
(2× 104) = 13, 35 bits, lo que equivale
a una relaci
´
on se
˜
nal a ruido te
´
orica [15] de
SNR = 6, 02N + 1, 76dB + 10 log
10
104 = 82, 13dB (5)
Esto agrega 100000 sumas (y 1000 multiplicaciones) por
segundo por cada se
˜
nal, lo que no impacta significativamente
en la cantidad de operaciones realizadas.
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
57
http://elektron.fi.uba.ar
El DAC, por otro lado, se opera en modo Polling,
pas
´
andole resultados de la funci
´
on generadora de ruido o
la se
˜
nal de control calculada por el algoritmo FXLMS.
La capacidad de c
´
omputo de la unidad de punto flotante
disponible en la EDU-CIAA-NXP permite operar el DAC
de esta forma, sin necesidad de generar interrupciones.
B. Algoritmo FXLMS
El algoritmo FXLMS es esencialmente un conjunto de op-
eraciones vectoriales, por lo que se desarroll
´
o una peque
˜
na
biblioteca para operar con arrays de variables float. Las
operaciones incluidas en la biblioteca son:
vector_initialize(): inicializa todos los ele-
mentos de un array en un mismo valor, ambos pasados
como argumento.
vector_copy(): copia los elementos de un vector
a otro.
vector_shift(): desplaza los elementos de un
vector una posici
´
on, para liberar la posici
´
on 0, que se
usa para cargar un nuevo dato.
vector_scale(): multiplica todos los elementos
de un array por un escalar, ambos pasados como
argumento.
vector_add(): suma dos vectores.
vector_dot(): calcula el producto escalar entre dos
vectores (al pasar dos veces el mismo vector como
argumento, se obtiene su norma al cuadrado).
vector_add_scaled(): escala un vector y lo
suma con otro.
En todos los casos, la dimensi
´
on del vector es pasada
como argumento tambi
´
en. Esto resulta
´
util cuando se debe
calcular el producto vectorial de vectores con longitudes
diferentes (por ejemplo w
T
(n)
ˆ
r(n)), ya que evita tener que
realizar copias de igual longitud, pudiendo operar sobre los
primeros elementos del de mayor longitud.
El conjunto de operaciones vectoriales desarrollado per-
mite implementar f
´
acilmente todos los algoritmos menciona-
dos (LMS, NLMS, FXLMS, y FXNLMS)
C. Programa Principal
El diagrama de flujo del programa principal (figura 8)
consiste en tres fases. La primera de ellas consiste en la
identificaci
´
on del nivel de bias de los conversores ADC en
reposo, esencial para asegurar que las se
˜
nales de entrada
tengan media nula. Una vez completada, se procede a
identificar el camino secundario
ˆ
s, y finalmente se pasa a la
fase de control, que consiste en un loop infinito.
La fase de medici
´
on de bias en el ADC es necesaria
porque el algoritmo FXLMS asume media nula en todas
sus se
˜
nales. Se pudo observar que, de no compensarse, el
sesgo en la se
˜
nal de control crece sin control. Esta fase
consiste simplemente en el promedio de un n
´
umero grande
( 10000) de muestras de los pines ADC de la EDU-CIAA-
NXP.
1) Identificaci
´
on del camino secundario: La fase de
identificaci
´
on del camino secundario consiste en la gen-
eraci
´
on de un ruido blanco y
0
(n), medici
´
on del micr
´
ofono
m(n) y posterior aplicaci
´
on del algoritmo LMS para la
actualizaci
´
on de los coeficientes del filtro
ˆ
s. Una vez que
termina este proceso de identificaci
´
on, el filtro hallado no
Inicio
Identificaci´on del nivel
en reposo de los ADC
Identificaci´on del
camino secundario
ˆ
s.
Algoritmo LMS
Fase de control,
identificaci´on de w(n)
y alculo de y(n).
Algoritmo FXLMS
Fig. 8. Diagrama de flujo del programa principal.
se modifica nuevamente, por lo que no es conveniente mover
el micr
´
ofono de error o el parlante de lugar. En la figura 9
se muestra el diagrama de flujo para esta etapa.
Inicio
Inicializar:
ˆ
s = y
0
= 0
Generar muestra de ruido blanco
uniforme y
0
(n) y enviarla al DAC
Leer muestra del ADC
z(n) y calcular el error
e(n) = z(n)
ˆ
s(n)
T
y
0
(n)
Actualizar los coeficientes del filtro
ˆ
s(n + 1) =
ˆ
s(n) + µe(n)y
0
(n)
Convergencia?
Fin
NO
SI
Fig. 9. Diagrama de flujo para la identificaci
´
on del camino secundario.
Debe mencionarse que al generar la secuencia de ruido
blanco con la funcion rand(), com
´
unmente utilizada para
obtener muestras aleatorias, se encontr
´
o que la se
˜
nal de
salida era altamente arm
´
onica, es decir, la secuencia se
repet
´
ıa peri
´
odicamente, lo que se evidenciaba en tonos
constantes en el parlante. Tambi
´
en se pudo verificar esto
realizando la FFT sobre la secuencia, observando picos en
frecuencias muy definidas.
Se encontr
´
o en foros de este tema una funci
´
on en C
que genera ruido blanco uniforme [16], lo que se verific
´
o
analizando la FFT sobre la nueva secuencia, confirmando
que la potencia era plana para todas las frecuencias. La
diferencia al o
´
ıdo tambi
´
en fue muy marcada, ya que no se
identificaron tonos dominantes.
2) Fase de control: Durante la fase de control, se corre
un loop infinito que toma mediciones de los pines ADC,
genera la se
˜
nal de control y(n) que es pasada al DAC, y
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
58
http://elektron.fi.uba.ar
actualiza los coeficientes del filtro w(n) usando el algoritmo
FXLMS. En la figura 10 se muestra el diagrama de flujo de
este proceso usando la configuraci
´
on feedback.
Inicio
Inicializar
ˆ
r = r = y = 0 y w = 0
Leer muestra del ADC, cal-
cular la muestra de control
y(n) = w(n)
T
ˆ
r(n)
y enviarla al DAC
Estimar la referencia del ruido
ˆr(n) = e(n)
ˆ
s
T
y(n)
Calcular
r(n) =
ˆ
s
T
ˆ
r(n)
Actualizar los coeficientes del filtro
w(n + 1) = w(n) + µe(n)r(n)
Fig. 10. Diagrama de flujo para la fase de control.
V. ENSAYOS Y RESULTADOS
En esta secci
´
on se describen los ensayos realizados para
validar el hardware y el software, detallando los resultados
logrados y algunos problemas resueltos.
A. Pruebas funcionales del software
En una primera instancia se realiz
´
o una validaci
´
on de
la librer
´
ıa de
´
algebra y de los algoritmos LMS y NLMS
sobre la EDU-CIAA-NXP simulando una se
˜
nal por el puerto
de debug. Mediante un script de Python sobre una PC se
gener
´
o una se
˜
nal senoidal x(n) de amplitud 1 contaminada
por ruido gaussiano g(n) N (0, 1) transformado por una
respuesta impulsiva aleatoria h de 4 coeficientes (figura 11).
Los
´
unicos datos transmitidos a la EDU-CIAA-NXP fueron
la se
˜
nal ruidosa, y la referencia del ruido. Transmitiendo
datos de la EDU-CIAA-NXP a la PC y utilizando un
software de visualizaci
´
on en tiempo real (en ventanas de
10000 muestras) tambi
´
en escrito en Python se verific
´
o que
los algoritmos LMS y NLMS funcionaron correctamente,
identificando la respuesta impulsiva
ˆ
h que afectaba al ruido
y filtr
´
andolo, como se muestra en la figura 12.
Las funciones para manejo de ADC se validaron fijando
en un principio tensiones constantes y conocidas en los
canales de inter
´
es, y modificando los ejemplos provistos en
[17] para leer esos datos. En el caso del DAC, se comenz
´
o
utilizando el ejemplo, que genera un diente de sierra, que
pudo medirse con un osciloscopio. Luego se lo modific
´
o
para generar ruido blanco y otras se
˜
nales.
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0
0.5
0.4
0.3
0.2
0.1
0.0
0.1
0.2
0.3
0 20 40 60 80 100
3
2
1
0
1
2
3
Fig. 11. Respuesta impulsiva aleatoria h y se
˜
nales x(n) (rojo) y x(n) +
g(n) h(n) (azul).
Fig. 12. Respuesta impulsiva estimada w ' h y se
˜
nal filtrada ˆx(n) por
el algoritmo LMS.
B. Pruebas funcionales del hardware
Para probar el hardware, se cont
´
o con las funciones
de lectura de canales ADC y generaci
´
on de datos por
DAC, lo que simplific
´
o las pruebas en forma considerable.
Inicialmente, con los micr
´
ofonos conectados a ADC0/CH2
y ADC1/CH3 y usando el visualizador en la PC, se verific
´
o
que los micr
´
ofonos respond
´
ıan a est
´
ımulos.
El paso siguiente fue intentar reproducir las mediciones
de los micr
´
ofonos en el parlante, lo que utiliza el DAC y el
buffer de salida. En este caso, la EDU-CIAA-NXP funciona
s
´
olo como una repetidora. Al realizar esta prueba se encontr
´
o
que los valores elegidos en un primer momento para las
frecuencias de corte en los operacionales no eran adecuados,
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
59
http://elektron.fi.uba.ar
ya que el efecto del aliasing era muy importante. Se decidi
´
o
reducir considerablemente el ancho de banda del sistema, lo
que llev
´
o a los valores calculados en la secci
´
on III-A. Esto
dio buenos resultados, pudiendo verificar con tonos variables
en frecuencia que la entrada al micr
´
ofono era reproducida
en el parlante.
En la figura 13 se muestra la conexi
´
on de la EDU-
CIAA-NXP con el preamplificador de micr
´
ofono y el buffer
del DAC, ambos en la misma placa. Esta configuraci
´
on
corresponde a un sistema ANC de tipo feedback.
Fig. 13. EDU-CIAA e interfaces micr
´
ofono/ADC y DAC/parlante.
C. Ensayos y ajuste de par
´
ametros
Durante la fase de identificaci
´
on del camino secundario,
se coloc
´
o el micr
´
ofono frente al parlante de control a
distancias de entre 20 y 30 cm. Se utiliz
´
o el algoritmo
NLMS con buenos resultados fijando el paso para esta etapa
en µ = 0, 05 dado el buen compromiso de este factor
entre velocidad de convergencia y error estacionario. La
identificaci
´
on de la respuesta impulsiva del camino secun-
dario result
´
o ser repetible, lo que confirmaba la robustez
del m
´
etodo utilizado. En la figura 14 se puede ver la se
˜
nal
de error cayendo en amplitud a medida que se identifica
el camino secundario, y en la figura 15 la respuesta en
frecuencia estimada. Las escalas en dB est
´
an referidas al
nivel de cont
´
ınua de la se
˜
nal de error en reposo.
Luego de la identificaci
´
on comienza la fase de control,
en que la se
˜
nal de prueba o ruido a cancelar fue un tono
de 75Hz, que daba buen nivel de se
˜
nal (aproximadamente
0,4V pico) en el micr
´
ofono a
´
un a distancias de varios metros.
Se encontraron diversos problemas para ajustar el paso en
el algoritmo FXNLMS en la configuraci
´
on feedforward,
mientras que el FXLMS en configuraci
´
on feedback funcion
´
o
sin mayores complicaciones. Se observ
´
o que una cantidad de
coeficientes menor a 64 para w imped
´
ıa la convergencia de
la se
˜
nal de control. El algoritmo converg
´
ıa para µ < 0, 0005,
efectivamente logrando una atenuaci
´
on del tono de prueba
casi hasta valores de reposo.
Con µ = 5 × 10
6
el nivel de la se
˜
nal de control se
estabiliz
´
o en torno a 0,65V pico. Esto es el 40% de la
amplitud disponible, por lo que el sistema tiene en principio
la capacidad de controlar ruidos con mayor potencia. El filtro
0 2 4 6 8 10 12
t [s]
1.0
0.5
0.0
0.5
1.0
1.5
e
h
[V ]
Error durante la identificaci´on de
ˆ
s
Fig. 14. Se
˜
nal de error e(n) durante la identificaci
´
on del camino
secundario
0 50 100 150 200 250 300 350 400
f [Hz]
40
30
20
10
0
10
20
30
ˆ
S [dB]
Respuesta en frecuencia de
ˆ
s
Fig. 15. Respuesta en frecuencia
ˆ
S estimada para el camino secundario.
w(n) estimado muestra un pico en torno a 69Hz (figura 16),
identificando aproximadamente la frecuencia a cancelar. La
discrepancia en la frecuencia estimada puede explicarse por
la baja cantidad de coeficientes usados. En la figura 17 se
muestra la respuesta en frecuencia de la se
˜
nal de control,
generada correctamente como una senoidal en torno a 75Hz.
La figura 18 muestra la respuesta en frecuencia de la se
˜
nal
de error en tres instancias. E
r
es el nivel de se
˜
nal en reposo,
en ausencia del tono de prueba y de la se
˜
nal de control; E
n
es el nivel de se
˜
nal cuando se enciende la fuente de ruido, y
E
c
es el nivel de se
˜
nal durante la fase de control, luego de
la convergencia del algoritmo. Se logr
´
o una atenuaci
´
on del
tono de prueba de 30dB, a la vez que baja el nivel de ruido a
trav
´
es del espectro. No se logra atenuar el arm
´
onico presente
en 150Hz y se amplifica levemente el arm
´
onico presente en
225Hz, lo que puede adjudicarse a la poca sensibilidad del
filtro anti-alias en altas frecuencias. El resultado satisface
los requerimientos para sistemas ANC pr
´
acticos, a
´
un con un
conversor A/D de baja resoluci
´
on integrado al controlador
y con un micr
´
ofono electret.
Se destacan las siguientes observaciones luego de diversas
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
60
http://elektron.fi.uba.ar
0 50 100 150 200 250 300 350 400
f [Hz]
20
10
0
10
20
30
W [dB]
Respuesta en frecuencia de w(n)
Fig. 16. Respuesta en frecuencia del filtro w luego de la convergencia.
0 50 100 150 200 250 300 350 400
f [Hz]
20
10
0
10
20
30
40
50
60
Y
c
[dB]
Respuesta en frecuencia del control y(n)
Fig. 17. Respuesta en frecuencia de la se
˜
nal de control y(n) luego de
la convergencia. La se
˜
nal de control coincide en frecuencia con la se
˜
nal
perturbadora.
pruebas:
Aumentar el tama
˜
no del filtro w(n) acelera la conver-
gencia pero no la asegura.
El valor del paso µ es cr
´
ıtico para el algoritmo, ya que
peque
˜
nos cambios en
´
el pueden producir divergencia u
oscilaciones.
El algoritmo NLMS produce mejores (mayores) valores
iniciales para la se
˜
nal de control y(n), pero no siempre
mayor velocidad de convergencia.
La convergencia depende fuertemente de las condi-
ciones del recinto; se han realizado pruebas id
´
enticas
con resultados muy dispares en cuanto a la convergen-
cia. Un momento particularmente cr
´
ıtico es cuando el
nivel de se
˜
nal del parlante comienza a ser comparable
al de la perturbaci
´
on. A veces el nivel de la se
˜
nal de
control y(n) no se estabiliza y contin
´
ua creciendo hasta
que el algoritmo diverge, lo que posiblemente tenga que
ver con la longitud del vector w y con la respuesta del
parlante utilizado en bajas frecuencias
0 50 100 150 200 250 300 350 400
f [Hz]
60
40
20
0
20
40
60
E
n
, E
c
, E
r
[dB]
Respuesta en frecuencia del error
E
n
E
c
E
r
Fig. 18. Respuesta en frecuencia de la se
˜
nal de error en reposo (E
r
), en
presencia de ruido (E
n
) y con el control encendido luego de la convergencia
(E
c
). Se obtuvo una atenuaci
´
on de 30dB a 75Hz.
VI. CONCLUSIONES
Se logr
´
o una versi
´
on funcional del sistema de control
de ruido activo en configuraci
´
on feedback, aprovechando
puertos anal
´
ogicos de baja resoluci
´
on integrados a la EDU-
CIAA-NXP y utilizando un micr
´
ofono y un parlante de
bajo costo. La configuraci
´
on testeada permite reducir a
´
un
m
´
as el hardware, al requerir un
´
unico micr
´
ofono para su
funcionamiento. En los ensayos se obtuvo una atenuaci
´
on de
30dB que, aunque menor a la de otros sistemas que utilizan
conversores A/D, micr
´
ofonos y parlantes de mayor calidad,
es superior a la requerida en aplicaciones de este tipo. Esto
sugiere que, dado el requisito de atenuaci
´
on de por lo menos
10dB [4], es posible alcanzarlo con hardware de mucho
menor costo que el utilizado en la bibliograf
´
ıa consultada.
An
´
alogamente, mejorando la calidad del hardware, deber
´
ıa
ser posible lograr atenuaciones mayores sin modificaciones
adicionales en el software.
El prototipo desarrollado servir
´
a como plataforma para
continuar experimentando con par
´
ametros y algoritmos, ha-
biendo resuelto cuestiones importantes como la lectura de
canales ADC minimizando el uso del procesador, la escritura
en DAC y las operaciones vectoriales.
A. Pr
´
oximos pasos
Entre las mejoras que pueden hacerse al sistema se
destacan:
Mejorar el filtro anti-alias, buscando una respuesta en
frecuencia plana hasta la frecuencia de corte. Opciones
para lograr esto son configuraciones Sallen-Key en
cascada para construir filtros de segundo orden. Esto
aplica tambi
´
en al filtro de reconstrucci
´
on.
La librer
´
ıa CMSIS-DSP [18] cuenta con todas las
funciones para procesamiento de se
˜
nales utilizadas en
este trabajo, incluyendo filtros LMS y NLMS. Estas
funciones se encuentran optimizadas para trabajar sobre
Cortex-M con posibilidad de utilizar la unidad de punto
flotante, por lo que un paso natural es comenzar a
utilizarlas.
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
61
http://elektron.fi.uba.ar
Entender las variables que influyen sobre la convergen-
cia del algoritmo, modificando el c
´
odigo para robuste-
cer el sistema.
Experimentar con el algoritmo FXNLMS, ya que posee
mejores caracter
´
ısticas que su versi
´
on no normalizada,
y tiene potencial para reemplazarlo.
Realizar pruebas con ruidos no senoidales, como por
ejemplo motores, para conocer los alcances del sistema
corriendo sobre EDU-CIAA-NXP.
Considerar el uso de FreeRTOS para garantizar la
regularidad de la se
˜
nal de control.
Agilizar la modificaci
´
on de par
´
ametros, permitir ajus-
tarlos en tiempo real desde una PC.
REFERENCIAS
[1] R. P. King and J. R. Davis, “Community noise: Health effects and
management, International Journal of Hygiene and Environmental
Health, vol. 206, no. 2, pp. 123 131, 2003. [Online]. Available:
http://www.sciencedirect.com/science/article/pii/S1438463904702023
[2] P. Lueg, “Process of silencing sound oscillations, U.S. Patent
2 043 416, June 9, 1936.
[3] S. M. Kuo and D. R. Morgan, “Active Noise Control: A Tutorial
Review, in Proceedings of the IEEE, vol. 87, no. 6, Jun. 1999, pp.
943–973.
[4] L. Wu, X. Qiu, and Y. Guo, A simplified adaptive feedback active
noise control system, vol. 81, pp. 40–46, 07 2014.
[5] S. O. Haykin, Adaptive Filter Theory. Prentice Hall, 1995.
[6] St
´
ephane Boucher, Mart
´
ın Bouchard, Andr
´
e L’esperance and Bruno
Paillard, “Implementing a Single Channel Active Adaptive Noise
Canceller with the TMS320C50 DSP Starter Kit, Department of
Electrical and Computer Engineering, Faculty of Applied Sciences,
University of Sherbrooke, Sherbrooke, Quebec, Application Report,
Nov. 1997.
[7] S. M. Kuo, X. Kong, and W. S. Gan, Applications of adaptive
feedback active noise control system, IEEE Transactions on Control
Systems Technology, vol. 112, no. 2, pp. 216–2202, March 2003.
[8] P. Peretti, S. Cecchi, L. Romoli, and F. Piazza, Adaptive feedback
active noise control for yacht enviuronments, IEEE Transactions on
Control Systems Technology, vol. 22, no. 2, pp. 737–744, 2014.
[9] C. K. Chen, T.-D. Chiueh, and J.-H. Chen, Active cancellation
system of acoustic noise in mr imaging, IEEE Transactions on
Biomedical Engineering, vol. 46, no. 2, pp. 186–191, Feb 1999.
[10] B. Widrow and M. E. Hoff, “Neurocomputing: Foundations of
Research, J. A. Anderson and E. Rosenfeld, Eds. Cambridge, MA,
USA: MIT Press, 1988, ch. Adaptive Switching Circuits, pp. 123–134.
[Online]. Available: http://dl.acm.org/citation.cfm?id=65669.104390
[11] A. Goldstein, “Ons Steepest Descent, Journal of the Society for
Industrial and Applied Mathematics Series A Control, vol. 3, no. 1,
pp. 147–151, 1965.
[12] J. C. Burgess, Active adaptive sound control in a duct: A computer
simulation, vol. 70, 09 1981.
[13] Proyecto CIAA. [Online]. Available: http://www.proyecto-
ciaa.com.ar/
[14] J. Caldwell, “Single Supply, Electret Microphone Pre-Amplifier Ref-
erence Design, Texas Instruments, Sherbrooke, Quebec, Application
Report, Jan. 2015.
[15] “Improving ADC Resolution by Oversampling and Averaging -
AN118, Silicon Labs, Application Report, 2013.
[16] Why is the rand() function not the least bit
random in the LPC11u24 MBED? [Online]. Avail-
able: http://os.mbed.com/questions/2886/Why-is-the-rand-function-
not-the-least-b/
[17] LPCOpen Libraries and Examples. [Online]. Available:
http://www.nxp.com/support/developer-resources/software-
development-tools/lpc-developer-resources-/lpcopen-libraries-and-
examples:LPC-OPEN-LIBRARIES
[18] CMSIS DSP Software Library. [Online]. Available: http://arm-
software.github.io/CMSIS 5/DSP/html/index.html
Revista elektron, Vol. 2, No. 2, pp. 53-62 (2018)
ISSN 2525-0159
62
http://elektron.fi.uba.ar

Enlaces de Referencia

  • Por el momento, no existen enlaces de referencia


Copyright (c) 2018 Pablo Gomez

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.


Revista elektron,  ISSN-L 2525-0159
Facultad de Ingeniería. Universidad de Buenos Aires 
Paseo Colón 850, 3er piso
C1063ACV - Buenos Aires - Argentina
revista.elektron@fi.uba.ar
+54 (11) 528-50889