iPhone: CPU Power para fazer domínio DSP/Fourier Transform/Frequency?
-
07-07-2019 - |
Pergunta
Quero analisar o áudio do MIC de forma contínua (não apenas uma amostra de snipper ou pré -gravação) e exibir gráfico de frequência e filtrar certos aspectos do áudio. O iPhone é poderoso o suficiente para isso? Suspeito que a resposta seja um sim, dado o reconhecimento de voz do Google e do iPhone, o Shazaam e outros aplicativos de reconhecimento de música e aplicativos de sintonizador de guitarra por aí. No entanto, não sei com que limitações terei que lidar.
Alguém brinca com esta área?
Solução
O código de amostra da Apple, AurioTouch, tem uma implementação da FFT.
Outras dicas
Os aplicativos que eu já vi fazem algum tipo de reconhecimento de música/voz precisam de uma conexão com a Internet, por isso é altamente provável que isso seja algum tipo de cálculo de recursos no áudio e envie esses recursos via HTTP para fazer o reconhecimento no servidor.
De qualquer forma, gráficos de frequência e filtragem foram feitos antes em CPUs menores há uma dúzia de anos atrás. O iPhone não deve ter problema.
"Rápido o suficiente" pode ser uma função das suas expectativas (ou do seu cliente) sobre a quantidade de resolução de frequência que você está procurando e sua taxa de amostragem básica.
Um FFT n-ponto está na ordem dos cálculos n*log2 (n); portanto, se você não tiver MIPs suficientes, reduzir n é uma área potencial de concessão para você.
Em muitas aplicações, a taxa de amostragem não é negociável, mas se fosse, isso seria outra possibilidade.
Eu fiz um aplicativo que calcula o FFT ao vivo
http://www.itunes.com/apps/oscope
Você pode encontrar meu código para o FFT no Github (embora seja um pouco difícil)
http://github.com/alexbw/iphonefft
O novo iPhone OS 4.0 SDK da Apple permite o cálculo interno da FFT com a biblioteca "acelerar", então eu definitivamente começaria a trabalhar com o novo sistema operacional se for uma parte central da funcionalidade do seu aplicativo.
Você não pode apenas portar o código FFT escrito em C para o seu aplicativo ... Existe a opção de compilador de polegar que complica a aritmética do ponto flutuante. Você precisa colocá -lo no modo de braço