Pergunta

É possível com FFT para encontrar uma ocorrência de uma pequena dentro da amostra wav de um wav mais, se é sabido que essa amostra exata existe em algum lugar do wav (mas pode ser misturado com outros sons)?

editar

(após ter recebido duas respostas): E se eu tiver uma biblioteca de todos os sons conhecidos que podem estar no WAV maior e desejam encontrar ocorrências de cada um deles dentro desse WAV? Em outras palavras, eu sei todas possível de som que pode ser misturado na grande wav, e desejo para encontrar ocorrências de los?

Foi útil?

Solução

Eu assumo pela exato que você não significam valor da amostra exata. Se fosse amostra valor exato, então seria uma simples questão de procurar os valores de amostra, que é rápido e eficiente.

Se você está procurando pedaços de som que contribuem, a melhor abordagem é a utilização de um processo matemático chamado "circunvolução". Basicamente, tomar o exemplo que você está tentando encontrar dentro da grande amostra, efetivamente colocá-lo ao lado do grande amostra e correlato. Faça isso para cada posição amostra. Você vai a partir desta obter uma curva que terá picos distintos na mesma, onde a amostra é. Sua bastante computacionalmente intensivas, mas os computadores ficaram muito rápido, por isso é viável.

Mas - isto é assumindo que a amostra veio da mesma gravação para ambos os casos. Microfonação um som de bateria, até o mesmo som de bateria, a partir de dois locais diferentes, não vai produzir muito boa correlação.

Espero que ajude.

Outras dicas

Depende exatamente o que você está tentando encontrar eo que você está tentando encontrá-lo na.

  • Se você está procurando uma amostra de que é exatamente o mesmo que um pedaço de um arquivo WAV maior, bit a bit, então você pode procurar os valores diretamente.
  • Se é exatamente o mesmo som, mas não amostra-exatas (combinando um clipe de um MP3 em um arquivo WAV da mesma música, por exemplo), você pode facilmente encontrá-lo usando correlação cruzada . A correlação cruzada pode ser acelerado de forma significativa, utilizando um método de FFT em vez de um método de "ingénuo" que explicitamente multiplica e quantias das amostras.
  • Se você está procurando uma pequena amostra que tem sido misturado com outros sons, pode ainda ser possível a utilização de correlação cruzada, mas isso depende se os outros sons afetar o jogo. Para piano digital com amostras simples e sem efeitos, direto para um gravador digital, este trabalho poder.
  • Se o som tem sido através de qualquer tipo de filtragem, inversão de polaridade, ou mudança de fase, no entanto, isso não vai funcionar muito bem, uma vez que as formas de onda serão alterados. Então, se o piano foi tocada pelos alto-falantes e em seguida gravados com microfones, esta não é uma solução viável.

O que pode funcionar melhor neste caso é criar uma espectrograma da gravação usando o curta duração transformada de Fourier (STFT), e um espectrograma da coisa que você está procurando, e depois fazer uma correlação cruzada time-wise das duas imagens. O espectrograma é uma imagem 2D da amplitude dos espectros dos sons ao longo do tempo, que você pode então corresponder. (Esta é provavelmente uma forma indireta de fazer algo existem algoritmos mais especializados para, mas eu não sei o que seria chamado.);)

Você pode fazer upload de alguns clipes de som em algum lugar?

Se você sabe a natureza exata da amostra (comprimento em bits etc), então é muito possível. Se ele altera de qualquer forma, então você vai ter um monte de trabalho a fazer em primeiro lugar.

Por causa dos arquivos de maneira WAV são codificados (sequencialmente pela pista - de modo a obter o primeiro lote de bits para a primeira faixa, em seguida, o primeiro lote de bits para a segunda faixa, em seguida, o segundo lote de bits a partir da primeira faixa )

Isso pode obviamente repetir para quantas faixas. Se você conhece o arquivo WAV que você está procurando é codificado especificamente em uma dessas faixas pode isolar cada faixa e executar operações sobre eles.

Obviamente, se seus difere amostra por velocidade, tempo, pitch, etc., então ele vai ter uma assinatura pouco diferente, assim você terá a normalizar as faixas.

Não exatamente como você definiu-lo, se ele é misturado com outros sons, e aqui está a razão; Considere o efeito de uma onda misturado precisamente com o seu inverso; o resultado é a resposta plana. A mistura de ondas pode ter uma função monotónica, isto é, para mascarar eficazmente uma onda com uma outra de uma forma que o primeiro é unretrievable.

Dito isto, é provável que exista uma maneira de caracterizar a "assinatura" de uma onda de tal forma que é provável de estar presente em um arquivo de onda compósito resultante, mas que a assinatura vai depender do comprimento do arquivo de onda e, até certo medida que tipo de combinações eram esperados para ser feito sobre ele.

A sua questão provavelmente tem algo a ver com a determinação se amostras de um exist trabalho dentro de outro, composto, trabalho. Em geral, sim, FFTs são úteis para determinar uma "assinatura" para uma determinada onda, e ser capaz de extrair que "assinatura" de uma outra onda; Eles são bons para algumas coisas (como a mudança de freqüência, ele só aparece como um deslocamento no FFT), mas não tão grande para outras coisas (variando de modulação de frequência, por exemplo, alto (ou irregular) de compressão de largura de banda do original sinal). Para colocar de outra forma: FFTs são uma boa maneira de detectar o uso de "ingênua" de amostras, mas um determinado resampler pode modificar a amostra original para torná-lo difícil de detectar via FFT se ele sabe que essa é a técnica de detecção usado

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