Na minha busca interminável de identificar roncos, descobri que a "planicidade espectral" parece ser uma medida justa da "qualidade" do sinal.
Estou calculando o nivelamento espectral como a média geométrica dos pontos de dados da potência FFT divididos pela média aritmética dos mesmos pontos.
Então, (uma pequena reviravolta aqui), estou computando a média aritmética em execução (mais de 50 quadros) e o desvio padrão da planicidade espectral e calculando um desvio padrão "normalizado" como o desvio padrão em execução dividido pela média em execução.
Para minhas amostras, acho que essa métrica é maior que (variando até 0,5 ou mais) quando o áudio é "bom" (ou seja, eu tenho um rastreamento confiável dos sons de respiração / ronco de um sujeito que dorme) e geralmente desliza abaixo de 0,2 quando o áudio está "na lama". (Eu posso melhorar essa discriminação usando um limiar que se move com outros fatores, mas presumivelmente esse é um tópico diferente.) Também observo que a medida ultrapassa 1,0 quando há um ruído de fundo substancial (por exemplo, alguém entra na sala e sussurra sobre )
Portanto, minha pergunta básica é: existe um nome (além de "desvio padrão normalizado do nivelamento espectral") para o que estou medindo e alguém pode oferecer uma explicação conceitual sobre o que a métrica "significa"?
(Tentei uma dúzia de outras métricas para a "qualidade" do sinal, e essa parece ser a melhor até o momento.)
Adicionado: eu provavelmente devo admitir que não tenho um controle conceitual particularmente bom sobre o que a planicidade espectral simples está medindo (apenas o artigo da Wikipedia ), para que qualquer explicação adicional seja apreciada.
fonte
Respostas:
Como você está interessado na "planicidade" do seu espectro, na verdade, está interessado em quão próximo o seu sinal está de um ruído branco (que, por definição, possui um espectro plano + fases aleatórias). Se você recuar, uma medida seria a "distância" da sua observação à referência de ruído branco .
A medida óbvia em termos da teoria da informação é a divergência de Kullback-Leibler . Você não precisa entender todas as partes, mas mede em bits (se você usar a base de log 2) a distância entre as duas distribuições.
A coisa boa no seu caso é que sua referência é plana, de modo que o que resta é a entropia do seu espectro . Existem muitas implementações existentes (por exemplo, no scipy ).
Observe que você ainda está do lado seguro: se sua distribuição for aproximadamente gaussiana, ambas as medidas (entropia e padrão) serão proporcionais. A entropia é contudo mais geral e mais baseada em princípios. Como uma extensão, você poderá generalizar para outros tipos de ruído (1 / f, por exemplo).
fonte
p log p
- não parece transmitir muita informação para o meu problema. (Embora eu suponho que eu não tente tomar é o desvio padrão.)Qualquer diferença consistente e confiável nas estatísticas do seu sinal (ou alguma função do seu sinal, como seu espectro) e o ruído no qual seu sinal está incorporado podem ser usados para estimar a probabilidade de um contra o outro.
Parece que você encontrou aleatoriamente uma das infinitas maneiras de caracterizar a forma do espectro do sinal que diferencia o sinal desejado de coisas mais como ruído branco ou picos de impulso. Tropeçar em uma solução possível aleatória não a invalida (essa é uma base da programação evolutiva / genética). Mas como uma medida robusta que você encontrou é deixada como um exercício experimental.
fonte