Dada uma gravação, preciso detectar se ocorreu algum recorte.
Posso concluir com segurança que houve um recorte se alguma (uma) amostra atingir o valor máximo da amostra ou devo procurar uma série de amostras subsequentes no nível máximo?
A gravação pode ser obtida em conversores A / D de 16 ou 24 bits e é convertida em valores de ponto flutuante que variam de . Se essa conversão assume a forma de uma divisão por ou , presumivelmente os picos negativos podem ser um pouco menores que -1, e as amostras com o valor -1 não são cortadas?2 15 - 1 2 23 - 1
Obviamente, sempre é possível criar um sinal especificamente para derrotar o algoritmo de detecção de recorte, mas estou vendo gravações de fala, música, ondas senoidais ou ruído rosa / branco.
audio
algorithms
Han
fonte
fonte
Respostas:
Eu estava no meio da digitação de uma resposta exatamente igual à de Yoda . Ele é provavelmente o mais confiável, mas propus uma solução diferente para que você tenha algumas opções.
Se você usar um histograma do seu sinal, provavelmente terá uma forma de sino ou triângulo, dependendo do tipo de sinal. Sinais limpos tendem a seguir esse padrão. Muitos estúdios de gravação adicionam um efeito de "volume" que causa um pequeno impacto perto do topo, mas ainda é um pouco suave. Aqui está um exemplo de uma música real de um grande músico:
Aqui está o histograma de sinal que Yoda dá em sua resposta:
E agora o caso deles estarem cortando:
Às vezes, esse método pode ser enganado, mas é pelo menos algo a ser jogado em sua bolsa de ferramentas para situações em que o método FFT não parece estar funcionando para você ou há muitos cálculos para o seu ambiente.
fonte
A resposta mais simples se você estiver lidando com gravações curtas é ouvi-la e detectar "pops" (som com ponta curta) na reprodução. No entanto, uma solução mais robusta é analisar o espectro de frequência da gravação.
Lembre-se de que quando um sinal é cortado em algum limite, localmente se assemelha a uma onda quadrada nas regiões cortadas. Isso introduz harmônicos mais altos no espectro de frequências que não estariam lá originalmente. Se o seu sinal é ilimitado por banda (a maioria dos sinais do mundo real) e você está amostrando bem acima da taxa de Nyquist, isso fica bem claro como o dia.
Aqui está um pequeno exemplo no MATLAB demonstrando isso. Aqui, eu crio um sinal ilimitado de banda com duração de 1s, amostrado em 1000Hz e, em seguida, prendo-o no meio
±0.8
(veja o gráfico superior na figura abaixo)Você pode ver claramente que o espectro de frequência da forma de onda original não cortada é limpo e chega a zero fora da largura de banda (canto inferior esquerdo), enquanto no sinal cortado, há uma distorção geral menor do espectro (esperado se cortada) e a maioria importante, maiores harmônicos / picos / contribuições diferentes de zero no espectro fora da largura de banda do sinal (canto inferior direito).
Geralmente, essa pode ser uma abordagem melhor, porque detectar o recorte observando os valores geralmente não é preciso, a menos que você tenha projetado o equipamento e saiba exatamente o valor do limite.
fonte
Um pouco disso depende do método de registro. Parece que você está usando apenas um conversor, o que simplifica um pouco as coisas.
Você deve procurar algo acima de algum limite e, especificamente, mais de um ponto ao lado do outro. Normalmente, os conversores A / D na verdade não leem seu valor máximo, a menos que você o teste com muita precisão, portanto, perceba que o valor máximo pode ser menor do que parece possível.
Dado seus parâmetros, eu procuraria sinais consecutivos acima de 0,98 ou abaixo de -98, com alguns ajustes para determinar qual deveria ser o limite ideal (eu não o traria abaixo de 0,9). Pode ser sensato detectar um no máximo, e outro próximo sobre algo como 0,8.
O motivo para ignorar uma medição específica é que é comum ocorrer picos que nada têm a ver com o sinal. Isso será reduzido no caso de você estar usando um bom conversor A / D. É provável que, se você estiver usando uma variedade de detectores ou uma imagem, alguns dos detectores estejam com defeito, potencialmente aparando frequentemente.
fonte
MLS (sequências de tamanho máximo) são particularmente difíceis de analisar para recorte. Seu fator de crista (= pico / rms) é muito próximo a 1, que é até três dB menor que o de uma onda senoidal. Muitos conversores D / A são projetados para receber uma onda senoidal como o pior caso e um MLS reproduzido em amplitude total pode facilmente cortar o circuito de interpolação de saída de um D / A.
O próximo problema é que um MLS recortado parece quase idêntico a um não recortado, uma vez que as amplitudes são quase todas de + pico em primeiro lugar. Além disso, a análise do PDF não funciona, pois o PDF de um MLS é simplesmente dois grandes picos nas bordas.
Em uma medição típica da resposta ao impulso da sala, o ponto de recorte mais provável é realmente o D / A, o amplificador ou o alto-falante. Depois de atravessar a sala, parece muito menos um MLS e, portanto, é mais fácil avaliar o recorte com os métodos descritos acima.
Em quase todas as medições acústicas, o nível de ruído é determinado pelo ruído próprio do microfone ou pelo ruído de fundo e não pelo A / D. Portanto, não é muito importante otimizar o ganho de entrada no A / D e deixar amplo espaço para o cabeçote antes que o recorte (10dB ou mais) seja perfeitamente adequado.
Normalmente, é uma boa ideia medir com vários níveis diferentes de excitação e observar o SNR da medição. Em níveis baixos, o ruído acústico de fundo domina e em níveis altos, algo limita, comprime ou corta. O truque para fazer uma boa medição é encontrar um bom local no meio.
fonte