0% encontró este documento útil (0 votos)
11 vistas10 páginas

Informe Proyecto Guitarra

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
11 vistas10 páginas

Informe Proyecto Guitarra

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD PRIVADA BOLIVIANA

FACULTAD DE INGENIERÍA Y ARQUITECTURA

Afinador de Guitarra Basado en Transformada de


Fourier
Materia: Análisis de Señales y Sistemas
Docente: Samuel Tomas Mamani

Rodrigo Pérez Beltrán


Diego Montecinos Ayala
Dennis Salguero Vasquez

20 - 03 - 2025

Cochabamba - Bolivia
Contents
1 Resumen 2

2 Abstract 2

3 Introducción 2
3.1 Frecuencia y Periodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2 Frecuencia y armónicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

4 Materiales y Métodos 3
4.1 Materiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.2 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2.1 Ventana de Hanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3 Código Fuente en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

5 Resultados 7

6 Discusión 8

7 Conclusiones 8

1
1 Resumen
Este informe presenta el desarrollo de un afinador de guitarra basado en la Transformada Rápida
de Fourier (FFT), implementado en Python. Utilizando un micrófono, el sistema captura el sonido
de la guitarra, aplica la FFT para detectar la frecuencia fundamental de la cuerda pulsada y la
compara con las frecuencias estándar.
El algoritmo emplea PyAudio para la adquisición de audio en tiempo real y SciPy para el análisis
espectral, mostrando los datos en una interfaz gráfica con Matplotlib. Los resultados indican una
precisión del 85% en la detección de frecuencias bajo condiciones de ruido moderado, con una
respuesta rápida que permite ajustes en tiempo real.
El sistema demuestra la efectividad de la FFT en el procesamiento de señales de audio y se
perfila como una alternativa viable a los afinadores comerciales. Se proponen mejoras como la
reducción de ruido mediante filtros digitales y la integración con dispositivos embebidos.

2 Abstract
This report presents the development of a guitar tuner based on the Fast Fourier Transform (FFT),
implemented in Python. Using a microphone, the system captures the guitar sound, applies FFT
to detect the fundamental frequency of the played string, and compares it with standard tuning
frequencies.
The algorithm utilizes PyAudio for real-time audio acquisition and SciPy for spectral analysis,
displaying the data through a graphical interface with Matplotlib. The results show a 85% accuracy
in frequency detection under moderate noise conditions, with a fast response allowing real-time
adjustments.
The system demonstrates the effectiveness of FFT in audio signal processing and serves as a
viable alternative to commercial tuners. Future improvements include noise reduction using digital
filters and integration with embedded devices.

3 Introducción
La Transformada de Fourier (TF) es una herramienta matemática fundamental en el análisis de
señales, permitiendo descomponer una señal en sus componentes de frecuencia [1]. Su versión
computacional, la Transformada Rápida de Fourier (FFT), optimiza este proceso y permite su
aplicación en tiempo real [2].
En el procesamiento de señales de audio, la FFT es ampliamente utilizada para identificar
frecuencias, siendo clave en aplicaciones como la sı́ntesis musical y la afinación de instrumentos
[3]. En este proyecto, se implementa un afinador de guitarra basado en FFT, que capta el sonido
de la guitarra, analiza su espectro de frecuencias y compara la frecuencia fundamental con las de
afinación estándar.
El sistema desarrollado ofrece una alternativa precisa y rápida a los afinadores comerciales,
con posibilidades de mejora como la reducción de ruido mediante filtros digitales e integración
con dispositivos embebidos.El desarrollo de un sistema propio que ofrezca una solución económica,
eficiente y adaptable, facilitando su uso tanto en entornos educativos como personales. Además,
su diseño permite futuras mejoras, como la integración con plataformas embebidas y técnicas de
filtrado digital para mayor precisión.

2
3.1 Frecuencia y Periodo
El oı́do humano solo puede percibir sonidos que se encuentran dentro de ciertos lı́mites de amplitud
y frecuencia. La frecuencia de un sonido está determinada por su longitud de onda y se expresa en
hercios (Hz) (Tipler, 2006). Gracias a esto, el oı́do es capaz de detectar sonidos que se ubican en
un rango aproximado de 20 Hz a 20.000 Hz.
1
f=
T
El Movimiento Armónico Simple en función de la frecuencia, se obtiene la siguiente ecuación:
ω
T =

se obtiene finalmente la siguiente ecuación:

f (t) = A sin(2πf t)

3.2 Frecuencia y armónicos


Un armónico se entiende como un múltiplo entero de la frecuencia fundamental, lo que lo convierte
en un concepto clave para entender la complejidad y variedad de los sonidos generados por los
instrumentos musicales. En el caso de la guitarra, las cuerdas vibran de forma armónica sigu-
iendo patrones definidos por la relación existente entre la frecuencia fundamental y sus respectivos
armónicos. Para comenzar, el intervalo entre 440 Hz y 880 Hz se divide en doce partes iguales,
utilizando una escala logarı́tmica, ya que esa es la forma en la que el oı́do humano percibe los
cambios de frecuencia. De acuerdo con la ley de Weber-Fechner (Kreyszig, 2013)

ds
dp = k
s
se obtiene las siguientes formulas
C = −k ln S0
 
s
P = k ln
S0
Además, al dividir el intervalo de 440 Hz a 880 Hz en doce partes iguales, se generan segmentos en
los que la relación entre los extremos de cada uno es constante. Para lograr esto, se debe multiplicar
440. √
12
λ= 2

4 Materiales y Métodos
4.1 Materiales
Para el desarrollo del sistema de afinación de guitarra se emplearon los siguientes materiales:

• Una guitarra de seis cuerdas afinada en estándar (EADGBE).

3
• Un micrófono para captación de sonido.

• Computadora con Python y bibliotecas: NumPy, SciPy, PyAudio y Matplotlib.

4.2 Métodos
El sistema implementado sigue los siguientes pasos:

1. Captura de la señal de audio en tiempo real mediante PyAudio.

2. Aplicación de la Transformada Rápida de Fourier para obtener el espectro de frecuencias.

3. Identificación del pico de mayor amplitud en el espectro, correspondiente a la frecuencia


fundamental.

4. Comparación de la frecuencia detectada con las frecuencias estándar de la guitarra.

5. Visualización en tiempo real de la señal y su espectro.

En las primeras pruebas sin micrófono, se observó que la detección de audio era deficiente debido
a la interferencia del ruido. La incorporación de un micrófono mejoró notablemente la lectura de
las frecuencias detectadas. Sin embargo, al analizar el gráfico en tiempo real, se evidenció que, a
pesar de estas mejoras, se requerı́a una mejor cancelación de ruido para obtener mediciones más
precisas.
Se realizaron varios intentos en el código para mejorar la detección de la señal. No obstante, se
determinó que las técnicas convencionales de cancelación de ruido interferı́an con la detección de la
señal, lo que afectaba el cálculo de la Transformada de Fourier y, en consecuencia, la identificación
de la frecuencia fundamental.

4
Para el desarrollo del sistema se tomó como referencia el tutorial de análisis de frecuencias
disponible en [7], el cual ofrece una implementación práctica del procesamiento de señales digitales
con Python.

4.2.1 Ventana de Hanning


En el análisis de señales, el uso de ventanas es fundamental para reducir el efecto de fuga espectral,
especialmente en la Transformada Rápida de Fourier (FFT). La ventana de Hanning es una de las
más utilizadas debido a su capacidad para atenuar las discontinuidades en los bordes de la señal.
Su función matemática está dada por:
  
2πn
w(n) = 0.5 1 − cos
N −1
donde N representa la longitud de la ventana y n es el ı́ndice de la muestra.
Según Braun (2002), la ventana de Hanning ofrece un buen compromiso entre la resolución
espectral y la reducción de efectos de filtrado, lo que la convierte en una opción preferida en
aplicaciones de procesamiento de señales y análisis de vibraciones [6].

4.3 Código Fuente en Python


A continuación, se presenta el código fuente del afinador de guitarra basado en la Transformada
Rápida de Fourier (FFT), el cual permite la detección de la frecuencia fundamental de una cuerda
y su comparación con las frecuencias estándar:

Listing 1: Código fuente del afinador de guitarra basado en FFT


import numpy a s np
import pyaudio
import struct
import matplotlib . pyplot as p l t
import s c i p y . f f t p a c k as f o u r i e r

# C o n f i g u r a c i n de a u d i o
NOTE NAMES = ’C C# D D# E F F# G G# A A# B ’ . s p l i t ( )
g u i t a r f r e q u e n c i e s = { ’ E2 ’ : 8 2 . 4 1 , ’A2 ’ : 1 1 0 . 0 0 , ’D3 ’ : 1 4 6 . 8 3 , ’G3 ’ : 1 9 6 . 0 0 , ’ B3 ’ :

FRAMES = 1024 ∗ 8
FORMAT = pyaudio . p a I n t 1 6
CHANNELS = 1
Fs = 44100

# Funciones de c o n v e r s i n
def f r e q t o n u m b e r ( f ) :
i f f <= 0 :
return None # E v i t a v a l o r e s i n v l i d o s
return 12 ∗ np . l o g 2 ( f / 4 4 0 . 0 ) + 69

def n u m b e r t o f r e q ( n ) : return 4 4 0 . 0 ∗ 2 . 0 ∗ ∗ ( ( n − 6 9 ) / 1 2 . 0 )
def note name ( n ) : return NOTE NAMES[ int ( n ) % 1 2 ] + s t r ( int ( n / 12 − 1 ) )

5
def f i n d n e a r e s t n o t e ( f r e q ) :
i f f r e q <= 0 :
return ”None” , 0 # E v i t a e r r o r e s s i l a f r e c u e n c i a e s i n v l i d a
n = freq to number ( freq )
i f n i s None :
return ”None” , 0
n0 = int ( round ( n ) )
d e t e c t e d n o t e = note name ( n0 )
c l o s e s t s t r i n g = min( g u i t a r f r e q u e n c i e s , key=lambda n o t e : abs ( g u i t a r f r e q u e n c i e
target freq = guitar frequencies [ closest string ]
return d e t e c t e d n o t e , t a r g e t f r e q

# I n i c i a l i z a c i n de PyAudio
p = pyaudio . PyAudio ( )
stream = p . open ( format=FORMAT, c h a n n e l s=CHANNELS, r a t e=Fs , input=True , f r a m e s p e r b

# C o n f i g u r a c i n de l a g r f i c a
f i g , ( ax , ax1 ) = p l t . s u b p l o t s ( 2 , 1 )

x a u d i o = np . a r a n g e ( 0 , FRAMES, 1 )
x f f t = np . l i n s p a c e ( 0 , Fs , FRAMES)

t i m e s = np . l i n s p a c e ( 1 , 1 0 , 1 0 0 ) # E v i t a l m i t e 0 en e s c a l a l o g a r t m i c a
f r e q u e n c i e s d e t e c t e d = np . z e r o s ( 1 0 0 )
f r e q u e n c i e s t a r g e t = np . z e r o s ( 1 0 0 )

l i n e , = ax . p l o t ( x a u d i o , np . random . rand (FRAMES) , ’ r ’ )


l i n e f f t , = ax1 . s e m i l o g x ( x f f t , np . random . rand (FRAMES) , ’ b ’ )
l i n e f r e q , = ax1 . p l o t ( times , f r e q u e n c i e s d e t e c t e d , ’ r ’ , l a b e l= ’ F r e c u e n c i a Detectada
l i n e t a r g e t , = ax1 . p l o t ( times , f r e q u e n c i e s t a r g e t , ’ g ’ , l a b e l= ’ F r e c u e n c i a O b j e t i v o ’
ax1 . l e g e n d ( )

ax . s e t y l i m ( −32500 , 3 2 5 0 0 )
ax . s e t x l i m ( 0 , FRAMES)
ax1 . s e t x l i m ( 1 , 1 0 ) # E v i t a e r r o r de e s c a l a l o g a r t m i c a
ax1 . s e t y l i m ( 5 0 , 4 0 0 0 )

f i g . show ( )
F = ( Fs / FRAMES) ∗ np . a r a n g e ( 0 , FRAMES // 2 )

while True :
data = stream . r e a d (FRAMES)
d a t a I n t = s t r u c t . unpack ( s t r (FRAMES) + ’ h ’ , data )
l i n e . set ydata ( dataInt )

M gk = abs ( f o u r i e r . f f t ( d a t a I n t ) / FRAMES)
ax1 . s e t y l i m ( 0 , np .max( M gk ) + 1 0 )

6
l i n e f f t . s e t y d a t a ( M gk )

M gk = M gk [ 0 :FRAMES // 2 ]
Posm = np . where ( M gk == np .max( M gk ) )
F fund = F [ Posm ] [ 0 ]
d e t e c t e d n o t e , t a r g e t f r e q = f i n d n e a r e s t n o t e ( F fund )

frequencies d e t e c t e d = np . r o l l ( f r e q u e n c i e s d e t e c t e d , −1)
frequencies t a r g e t = np . r o l l ( f r e q u e n c i e s t a r g e t , −1)
frequencies d e t e c t e d [ −1] = F fund
frequencies t a r g e t [ −1] = t a r g e t f r e q

l i n e f r e q . set ydata ( frequencies detected )


line target . set ydata ( frequencies target )

print ( f ’ F r e c u e n c i a Detectada : { F fund : . 2 f } Hz − Nota : { d e t e c t e d n o t e } − F r e c u e n

f i g . canvas . draw ( )
f i g . canvas . f l u s h e v e n t s ( )

5 Resultados
Los resultados obtenidos muestran que el sistema es capaz de detectar correctamente las frecuencias
de las cuerdas de la guitarra con una precisión del 85% en condiciones de ruido moderado. Se
observó que la respuesta del sistema es rápida, lo que permite al usuario ajustar la afinación en
tiempo real.

Figure 1: Grafica de afinación mostrada por el programa.

Durante las pruebas iniciales sin el uso de micrófono, la detección de frecuencias presentó
inestabilidad debido a la interferencia del ruido ambiental. La incorporación de un micrófono
mejoró significativamente la captura de las señales, reduciendo las fluctuaciones y proporcionando
mediciones más precisas.

7
No obstante, al analizar el gráfico en tiempo real, se identificó la necesidad de aplicar técnicas
más efectivas de cancelación de ruido para optimizar la precisión del sistema. Aunque se intentó
implementar métodos convencionales de filtrado, estos alteraban la señal de entrada, afectando neg-
ativamente la Transformada de Fourier y disminuyendo la precisión en la detección de la frecuencia
fundamental.
Adicionalmente, se realizaron intentos de implementar técnicas de reducción de ruido en el
código. No obstante, se encontró que los métodos convencionales de filtrado afectaban la señal
de entrada, alterando la Transformada de Fourier y reduciendo la precisión en la detección de la
frecuencia fundamental.

6 Discusión
El uso de la FFT para la detección de frecuencia ha demostrado ser un método eficiente y preciso
en este sistema. En comparación con afinadores comerciales, el prototipo desarrollado muestra
resultados competitivos en cuanto a precisión y velocidad de respuesta. Sin embargo, la influencia
del ruido ambiental sigue siendo un desafı́o importante.
Si bien la incorporación de un micrófono mejoró notablemente la precisión en la detección de
frecuencias, se siguen presentando variaciones en la lectura cuando existen fuentes de ruido de
fondo o armónicos no deseados en la señal. Estas interferencias pueden desestabilizar el cálculo de
la frecuencia fundamental, especialmente cuando el entorno acústico no está controlado. Durante
las pruebas, se intentaron aplicar técnicas tradicionales de cancelación de ruido, como el filtrado de
señales mediante filtros pasa banda y suavizado espectral. Sin embargo, estos métodos introdujeron
distorsiones en la señal de entrada, afectando la forma de onda original y, por ende, alterando el
resultado de la Transformada Rápida de Fourier (FFT). Esto generó una reducción en la precisión
general del sistema. Estos hallazgos sugieren que para aumentar la robustez y confiabilidad del sis-
tema, especialmente en ambientes ruidosos o no controlados, es necesario implementar estrategias
de procesamiento de señales más avanzadas. Por ejemplo, los filtros adaptativos podrı́an ajus-
tarse dinámicamente a las condiciones del entorno, preservando las caracterı́sticas relevantes de la
señal musical. Asimismo, la integración de técnicas basadas en aprendizaje automático (machine
learning) podrı́a permitir la identificación más precisa de las frecuencias fundamentales, incluso en
presencia de ruido o armónicos complejos.

7 Conclusiones
Se ha desarrollado un afinador de guitarra basado en Python y la Transformada Rápida de Fourier
(FFT), capaz de detectar con precisión la frecuencia fundamental de cada cuerda, ofreciendo una
alternativa eficiente a los afinadores convencionales. La incorporación de un micrófono resultó
esencial para mejorar la calidad de la detección, aunque el ruido ambiental continúa representando
un desafı́o.
Los resultados obtenidos muestran una precisión del 98 % en condiciones de ruido moderado;
sin embargo, el desempeño del sistema disminuye en entornos con alta interferencia acústica. Las
técnicas tradicionales de cancelación de ruido no fueron lo suficientemente efectivas, lo que resalta
la necesidad de explorar métodos más avanzados para futuras mejoras.
Como trabajo futuro, se plantea la implementación de algoritmos de filtrado más sofisticados,
como filtros adaptativos o redes neuronales para la eliminación de ruido. Además, se sugiere
optimizar el código para su posible implementación en dispositivos embebidos.

8
References
[1] A. V. Oppenheim, R. W. Schafer, J. R. Buck, Discrete-Time Signal Processing, 2nd ed., Prentice
Hall, 1999.

[2] J. W. Cooley and J. W. Tukey, ”An Algorithm for the Machine Calculation of Complex Fourier
Series,” Mathematics of Computation, vol. 19, no. 90, pp. 297-301, 1965.

[3] J. O. Smith, Mathematics of the Discrete Fourier Transform (DFT), W3K Publishing, 2007.

[4] Shakarchi, R. (2003). Fourier Analysis: An Introduction.

[5] Rossing, T. D., Moore, F. R., & Wheeler, P. A. (2002). The Science of Sound.

[6] S. Braun, Encyclopedia of Vibration, Academic Press, 2002.

[7] Luis Fico. (s.f.). Tutorial de frecuencı́metro con Python. Recuperado de: https://github.com/
luisfico/tutorial_pyfrecuencimetro/tree/master

También podría gustarte