Pergunta

Como neste exemplo Como extrair informações de frequência de um fluxo de áudio de entrada (usando PortAudio)? Estou curioso sobre portaudio e numpy ...

Não tenho 100% de certeza sobre fft, como posso passar um pedaço numpy e recuperar três valores de -1,0 a 1,0 para graves, médios e agudos?

Não me importo se isso for apenas para um canal, pois posso entender a parte de áudio disso, é a matemática que nada na minha frente quando olho para eles :)

Foi útil?

Solução

Na verdade, você não usaria uma transformada de Fourier para fazer isso.

A divisão de qualquer sinal de áudio em graves, médios e agudos geralmente é feita por meio de filtros.A filtro é um dispositivo de processamento de sinal que atenua certas faixas de frequência.Os filtros podem ser construídos digitalmente ou eletricamente.Por exemplo, eles são usados ​​em sistemas de crossover de áudio em alto-falantes.

Para obter a parte dos graves de baixa frequência, você usaria um filtro passa-baixa.Os filtros passa-baixa filtram as altas frequências.Eles também são chamados de filtros de 'corte alto'.
Para obter a parte média da frequência média, você usaria um filtro passa-faixa.Os filtros passa-banda filtram as frequências baixas e altas.Eles também são chamados de 'filtros de sino'.
Para obter a parte aguda de alta frequência, você usaria um filtro passa-alta.Os filtros passa-alta filtram quaisquer frequências baixas.Eles também são chamados de filtros 'low-cut'.

Na verdade, você também poderia usar apenas o filtro passa-alta e passa-baixa.Se você subtrair ambos os sinais filtrados do sinal original, o resultado será um sinal filtrado passa-faixa.Isso economiza um filtro.

Cada filtro terá uma frequência limite.A frequência limite é uma frequência especial a partir da qual o filtro deve iniciar a filtragem.Dependendo da ordem do filtro, o sinal será atenuado em 6 dB/oitava (1ª ordem), 12 dB/oitava (2ª ordem), 18 dB/oitava (3ª ordem), etc.Para sua aplicação, um projeto de segunda ordem provavelmente é adequado.
Observe que os filtros em geral atrapalham o seu sinal de algumas maneiras e quanto maior a ordem, mais audível ele pode ficar.A propósito, isso é física pura e verdadeiro para todos os processamentos de sinais, incluindo as transformadas de Fourier.

Usar esses três filtros é (pode ser) equivalente a fazer uma transformada de Fourier com apenas três pontos espectrais.

Outras dicas

o Transformada de Fourier, mencionado na resposta selecionada para a pergunta que você aponta, fornece o "espectro" - uma grande coleção de valores que fornecem a intensidade sonora em cada uma das várias faixas/fatias de frequências (expressas, por exemplo, em Hertz).

Como traduzir (digamos) mil intensidades (uma por cada fatia de 10 hertz do espectro, digamos) em apenas três números, como você deseja, é, obviamente As frequências correspondem a "Bass" e "Treble", com tudo entre ser "Mid", e calcular as intensidades médias em cada um. Pelo que vale a pena, acredito que uma convenção comum para "baixo" é de até 250Hz, para "Treble" 6kHz e acima (entre o "intervalo médio"), CFR, por exemplo, esta página -mas é uma convenção arbitrária, então, "escolha seu veneno"!-)

Depois de ter o relativo Os níveis que você desejará normalizá-los em relação um ao outro e escalá-los adequadamente para ficar no alcance desejado (presumivelmente em uma escala logarítmica, porque é assim que a audição humana funciona ;-).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top