Olá pessoal. Estou implementando um software que através do microfone, deve captar a frequencia da voz.
A implementação da parte de receber o input do microfone e gravar o intervalo de tempo em um array de bytes ta ok.
Portanto. preciso lançar esse array de bytes na FFT (fast fourier transform) e obter o valor da frequencia (mas, nenhuma api tem esse método explicitamente).
Já procurei infinitas bibliotecas open source de FFT, no entanto, a maioria pede em sua construação a parte real e a parte imaginária ou não mostram evidentemente o método que recebe um parâmetro X e retorna a frequencia.
Alguém aí já trabalhou com FFT e som? tem algo a indicar?
ps: - estou estudando a documentação da api JTransforms (api fft open source)
Olá pessoal. Estou implementando um software que através do microfone, deve captar a frequencia da voz.
A implementação da parte de receber o input do microfone e gravar o intervalo de tempo em um array de bytes ta ok.
Portanto. preciso lançar esse array de bytes na FFT (fast fourier transform) e obter o valor da frequencia (mas, nenhuma api tem esse método explicitamente).
Já procurei infinitas bibliotecas open source de FFT, no entanto, a maioria pede em sua construação a parte real e a parte imaginária ou não mostram evidentemente o método que recebe um parâmetro X e retorna a frequencia.
Alguém aí já trabalhou com FFT e som? tem algo a indicar?
ps: - estou estudando a documentação da api JTransforms (api fft open source)
Vlw.
Todas as FFT usam numeros complexo. Contudo, isso não significa que vc não pode usar no seu caso.
Vc tem que entender como a FFT funciona. A FFT funciona transformando informação de um espaço para o outro.No seu caso, do espaço de tempos, para o espaço de frequências. O Tempo é algo mensurável e portanto é “real”. Portanto o seu array de dados entra como a parte real do seu sinal de entrada. Quando vc executar a transformada vc terá partes reais e imaginárias.
Por causa das propriedades da TF para funções reais existem alguns truques que permitem acelerar o calculo, mas isso não é estritamente necessário.
Dê uma olha na wikipedia para mais detalhes
J
juliocbq
Olá,
Como o sergio falou, as transformadas servem para vc mudar de plano(enxergar um sinal de outra forma). No seu caso, decompor o sinal em frequência e amplitude.
Para computadores se usa a versão discreta da fourier.
Para usar a ferramenta, é interessante aprender como ela funciona.
os links abaixo contém informação sobre transformada de fourier, e exemplos em java, além de um applet para experiências(Detalhe, uso em imagens digitais, mas você poderá usar audio também, já que ambas são sinais(ondas)).