Frequencia Fundamental
Bom Vamos lá, o tópico de hoje é relacionado a processamento de sinais, um complexo emaranhado de técnicas matemáticas, o peso da bagagem teórica sobre o assunto se torna extremamente massante, vamos simplificar tudo isso passando sobre o caminho das pedras.
Existem vários métodos para descobrir a Frequencia Fundamental (F0) http://en.wikipedia.org/wiki/Fundamental_frequency
Os Mais comuns são:
*Achar a Estimativa da Frequencia com o uso da autocorrelação
*Achar a estimativa da Frequencia com o uso da Transformada de Fourrier e Interpolação Quadrática
*Achar a Estimativa da Frequencia com o uso de zero crossings
Mas se você quer construir algo rápido, apenas injetar um sinal de audio via Microfone ou ler um Arquivo .Wav para conseguir a Frequencia do sinal injetado simplefique tudo utilizando o http://pypi.python.org/pypi/SoundAnalyse, SoundAnalyse é o modulo em python para conseguir isso e muito mais.
Testei o SoundAnalyse em solo Windows para tal instalar os seguintes componentes
Instalar o Python
Download em http://www.python.org/download/
Instalar o MinGW
Download em http://ufpr.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe
Instalar o numpy e o pyaudio
Download em http://www.lfd.uci.edu/~gohlke/pythonlibs/
Instalar o SoundAnalyse
Download em http://pypi.python.org/packages/source/S/SoundAnalyse/SoundAnalyse-0.1.1.tar.gz
colocar o compilador MinGW ao Path do Windows
C:\>set PATH=C:\MinGW\bin;%PATH%
Para Instalar o SoundAnalyse de execute
C:\Python26\SoundAnalyse-0.1.1>C:\Python26\python.exe setup.py install
Pronto todos os módulos dependentes instalados Agora vamos ao Source
import sys
import os
import time
import numpy
import pyaudio
import analyse
#Eng Eder de Souza – Frequencia Fundamental
pyaud = pyaudio.PyAudio()
Microfone=sys.argv[1]
try:
stream = pyaud.open(
format = pyaudio.paInt16,
channels = 1,
rate = 44100,
input_device_index = int(Microfone),
input = True)
except:
print “Falha ao Encontrar Dispositivo”
sys.exit()
Frequencia = “”
while True:
try:
pegaentrada = stream.read(1024)
except:
print “%.0f Hz” %Frequencia
os.system(“cls”)
dados = numpy.fromstring(pegaentrada, dtype=numpy.int16)
if analyse.detect_pitch(dados):
print “%.0f Hz” %analyse.detect_pitch(dados)
os.system(“cls”)
Frequencia = analyse.detect_pitch(dados)
else:
print “%.0f Hz” %Frequencia
os.system(“cls”)
Para rodar Execute
python.exe mic.py 1
Altere o Valor do Device até encontrar sua entrada de Microfone no meu caso é “1″ !!
Tela de teste para Identificação de Audio em 100 Hertz
-
junho 15, 2011 às 4:57 pm | #1Fundamental Frequency Estimation Methods « Eng Eder Souza
