Otokorelasyonun “kalitesini” değerlendirmenin en iyi yolu?


9

Bu benim horlama uygulamamdan bir yan gezi .

Ses sinyalinin otokorelasyonunu üretmede bir çatlak yaşadım, bunun horlama / nefes alma ile çok iyi ilişkili olup olmadığını görmek için. Ben basit bir algoritma gidiyor (iyi bir işaret olan sıfırıncı eleman olarak 1.0 üretir), ama ben otokorelasyon güçlü olup olmadığını belirlemek için sonucu nasıl değerlendirileceğini merak ediyorum, ve belki de daha, nasıl ayırmak için kullanmak çeşitli olası ses kaynakları.

Soru # 1: Otokorelasyonun RMS'si (atlama elemanı sıfır) herhangi bir "kalite" ölçüsü mü yoksa daha iyi bir şey mi var?

Ayrıntılı olarak açıklamak gerekirse: Yüksek derecede otokorelasyonlu bir sinyali daha az otokorelasyonlu olandan ayırt etmek için sadece sayısal bir yol (bir tabloya "bakmak") istiyorum.

(Başka hangi soruların sorulacağını gerçekten bilmiyorum.)

Bazı erken sonuçlar: Bazı durumlarda otokorelasyon (RMS veya pik) bir horlamada dramatik bir sıçrama gösterir - tam olarak görmek istediğim yanıt. Diğer durumlarda, bu önlemlerde belirgin bir hareket yoktur (ve bu iki yanıta iki ardışık horlama olabilir) ve yüksek gürültülü durumlarda ölçümler bir horlama sırasında gerçekten (hafifçe) daldırılır.

Güncelleme - 22 Mayıs: Sonunda bunun üzerinde çalışmak için biraz daha zamanım var. ( Kelimenin tam anlamıyla bir acı olan başka bir uygulamadan çıkarıldım .) Otokorelasyonun çıktısını bir FFT'ye besledim ve çıktı biraz ilginç - bir horlama başladığında orijin yakınında oldukça dramatik bir zirve gösteriyor.

Şimdi bu zirveyi bir şekilde ölçmek sorunuyla karşı karşıyayım. Garip bir şekilde, mutlak büyüklük açısından en yüksek zirveler diğer zamanlarda ortaya çıkar, ancak zirvenin aritmetik ortalamaya oranını denedim ve bu oldukça iyi izler. Öyleyse FFT'nin "doruk noktası" nı ölçmenin iyi yolları nelerdir? (Ve lütfen bir FFT almam gerektiğini söyleme - bu şey zaten kendi kuyruğunu yutmaya yakın. :))

Ayrıca, ortada sıfır (tanım 1.0 büyüklüğündedir) ile beslenen otokorelasyon sonuçlarını aynaya yansıtırsam FFT'nin kalitesinin bir şekilde iyileştirilebileceği aklıma geldi. Bu "kuyrukları" her iki ucuna da koyacaktır. Bu (muhtemelen) iyi bir fikir mi? Ayna görüntüsü dik mi yoksa ters mi olmalı? (Tabii ki, söylediklerinden bağımsız olarak deneyeceğim, ama detaylar hakkında belki bazı ipuçları bulabileceğimi düşündüm.)

Denenmiş düzlük--

Test senaryolarım kabaca "iyi davranılmış" kategoriye ve "sorunlu çocuklar" kategorisine ayrılabilir.

"İyi kalpli" test vakaları için otokorelasyonun FFT'sinin düzlüğü çarpıcı biçimde düşer ve bir horlama sırasında pikin ortalama otokorelasyona oranı artar. Bu iki sayının oranı (pik oranın düzlüğe bölünmesi) özellikle hassastır, bir nefes / horlama sırasında 5-10x tırmanma gösterir.

Ancak "sorunlu çocuklar" için sayılar tam tersi yöndedir. Tepe / ortalama oran hafifçe düşerken, düzlük aslında% 50-100 oranında artar

Bu iki kategori arasındaki fark (çoğunlukla) üç yönlüdür:

  1. Gürültü seviyeleri "sorunlu çocuklarda" (genellikle) daha yüksektir
  2. "Sorunlu çocuklarda" ses seviyeleri (hemen hemen her zaman) daha düşüktür
  3. "Sorunlu çocuklar" daha fazla nefes alma ve daha az gerçek horlamadan oluşur (ve her ikisini de tespit etmem gerekir)

Herhangi bir fikir?

Güncelleme - 5/25/2012: Zafer dansı yapmak için biraz erken, ama bir noktaya ilişkin otokorelasyonu yansıttığımda, bunun FFT'sini aldım ve daha sonra spektral düzlük yaptım, kombine oran şemam iyi bir sıçrama gösterdi birkaç farklı ortam. Otokorelasyonun yansıtılması FFT'nin kalitesini artırıyor gibi görünüyor.

Bununla birlikte, küçük bir nokta, yansıtılan "sinyalin" "DC bileşeni" sıfır olduğu için, sıfırıncı FFT sonucunun her zaman sıfır olması ve bu da sıfır içeren geometrik bir ortalamanın kırılmasıdır. Ancak sıfırıncı öğeyi atlamak işe yarıyor gibi görünüyor.

Aldığım sonuç, horlamaları / nefesleri tek başına tanımlamaktan çok uzak, ancak oldukça hassas bir "onay" gibi görünüyor - "zıplamayı" almazsam, muhtemelen bir horlama / nefes değil.

Onu yakından analiz etmedim, ama olan şeyin nefes / horlama sırasında bir yerde ıslık sesi çıktığı ve tespit edilen şeydeki ıslık olduğunu sanıyorum.


Korelasyonun 'güç' ölçüsüne göre, bir korelasyon yapmadan önce iki sinyalin korelasyonlu olduğunu normalleştirmeniz gerekir. (Normalleştirmeden sonra, her sinyalin toplamı 1 olmalıdır). O zaman korelasyon zirvesi daima -1 ile 1 arasında olacaktır. Bu sizin gücünüzdür. Sorunuzun geri kalanından emin değilim, belki biraz düzenleyebilirsiniz.
Spacey

Ben otokorelasyon ile ilgileniyorum, bu yüzden iki sinyal bir ve aynı, ve birbirlerine göre tanım gereği "normalleştirilmiş". "Güç" derken, ne kadar otokorelasyon olduğunu kastediyorum.
Daniel R Hicks

Ne istediğinizi anlamıyorum, ancak her şeyin RMS değerini değil, otokorelasyon zirvesinin maksimum değerini ölçmek istediğinizi düşünürüm.
endolit

@endolith Sanırım otokorelasyon fonksiyonunuzun bir 'tepe noktası' sorusunu soruyor olabilir, bir sinyali bir delta ile (gürültünün otokorelasyonu) birçok pikin sinyalinden ayırt etmek mi? (sinyalin harmonikler ile otokorelasyonu). Belki de spektral düzlük ölçüsünü kullanmak burada da kullanılabilir ...
Spacey

Spektral düzlük istediği gibi görünüyor. Daniel: Sinyalin beyaz gürültüden ne kadar farklı olduğunu belirlemek ister misiniz?
Emre

Yanıtlar:


3

Hazırlıklar

MP3 dosyalarının okunmasını / yazılmasını sağlayan MATLAB paket audioread ile bu gösterim daha kolaydır . Alternatif olarak, örnekteki MP3 dosyasını manuel olarak WAV'a dönüştürebilirsiniz.

Kolay çanta

Sorunlu dosyanızı incelemeden önce, SoundCloud'a gidelim ve iyi bir horlama yakalayalım , böylece SNR yüksek olduğunda ne bekleyeceğimizi bilelim. Bu bir 52s stereo 44.1KHz MP3. MATLAB yolundaki bir klasöre indirin .

Şimdi spektrogramı (8192 örnek Hann penceresini seçtim) ve spektral düzlüğü hesaplayalım:

[snd1,fs1]=mp3read('snoring - brobar.mp3'); % use wavread if you converted manually
[s1,f,t,p1]=spectrogram(mean(snd1,2),hann(8192));
sf1=10*log10(geomean(p1)./mean(p1)); % spectral flatness
plot(linspace(0,length(snd1)/fs1,length(sf1)),sf1); axis tight

Brobar horlamasının spektral düzlüğü

Spektral düzlükteki büyük düşüşler (yani, beyaz gürültüden sapma) "Ben horluyorum" diye bağırıyor. Taban çizgisinden (medyan) sapmaya bakarak kolayca sınıflandırabiliriz:

stem(linspace(0,length(snd1)/fs1,length(sf1)),median(sf1)-sf1>2*std(sf1)); axis tight

Brobar horlamasının sınıflandırılmış spektral düzlüğü

İki tane standart tavan sapması vardı. Referans için standart varyasyonun kendisi 6.8487'dir .

Zor olay

Şimdi dosyanıza bir göz atalım . 10 dakikalık, 8KHz WAV dosyası. Seviye çok düşük olduğundan , sinyalin sıkıştırılmasına yardımcı olur .

[snd,fs]=wavread('recordedFile20120408010300_first_ten_minutes');
cmp=compand(snd,255,1);
wavwrite(cmp,'companded'); % used for listening purposes
[s,f,t,p]=spectrogram(snd,hann(8192));
sf=10*log10(geomean(p)./mean(p));
plot(linspace(0,600,length(sf)),sf);

Gürültülü dosyanın spektral düzlüğü

Her horlamaya eşlik eden güzel düşüşleri görüyor musun? Ne de. Güzel tepelere ne dersin? Horlama değil, öznenin sesi hareket ediyor. Standart sapma önemsizdir 0.9388

Sonuç

Spektral düzlüğe güvenmek istiyorsanız daha temiz bir sinyal almanız gerekir! Ben sadece bir şey duymak için bunu compand vardı. Düşük bir SNR algılanırsa, kullanıcının telefonu daha yakına yerleştirmesini isteyin veya kulaklıklı mikrofon setiyle birlikte verilen telefon gibi bir mikrofon kullanın.

İyi haber olmasıdır olduğunu bile sorunlu durumda horlama tespit etmek mümkün. Bu soru sadece horlama algılaması ilgili değildi Ancak, burada durduran, ve bunu nasıl açıklamak içinde diğer sorunuza .


Şimdi neyle karşı karşıya olduğum hakkında bir fikrin var. Bu örnek üzerinde çalışmak zorunda olduğum örnekler arasında "orta" kalitedeydi - çok daha kötüsü var. Ve bu örneği mevcut algoritmalarımla oldukça iyi okuyabiliyorum.
Daniel R Hicks

Bunlar hangi algoritmalar?
Emre

Kısaca: Ses saniyede 8 kez FFT'den geçirilir, spektrum 5 frekans bandına dilimlenir, her bant için güç ve spektral fark hesaplanır, daha sonra sonuçlar görünen bantlara daha fazla ağırlık verecek şekilde puanlanır. doğru oranda değişmek.
Daniel R Hicks

@Emre Bağlantılarınızı takip ediyorum, bir soundcloud hesabı oluşturdum, ancak bu horlamayı tam olarak nasıl indirdiğinizi göremiyorum. Yanında veya başka bir yerde indirme düğmesi yoktur.
Spacey

@Mohammad: Bir indirme bağlantısı sağladım.
Emre

1

Otokorelasyon doğrudan sinyalin güç spektral yoğunluğunun ters DFT'si ile ilgilidir. Bu anlamda, DFT'nizin büyüklüğünde yer alan bilgi ne olursa olsun otokorelasyon fonksiyonunda da bulunur.

Bununla birlikte, otokorelasyonun size söyleyebileceği tek şey harmoniklerin varlığıdır. (Merkez tepe ile bir sonraki en yüksek mesafe arasındaki mesafe). Belki de horlayan VS solunumu farklı temel harmoniklere sahiptir ve eğer öyleyse, 'otokorelasyon yöntemi' kesinlikle iyi bir başlangıç ​​noktası olacaktır, böylece özellikler (bu durumda harmonikler) çıkarılabilir.

Böylece, beyaz gürültünün otokorelasyonu bir delta fonksiyonu olacaktır ve merkez zirvesinden herhangi bir ikincil tepe noktasına (ya da bu konu için başka herhangi bir tepe noktasına) sahip olmayacaktır. Aksine, sinyalde harmonikler varsa, o zamanki otokorelasyon fonksiyonu temel harmonik ile orantılı ikincil ve üçüncül tepeler içerecektir. Ana (merkez) zirveden ikincil zirveye olan temel frekansınızın süresi.

DÜZENLE:

Sonra ne olduğunuzu bir ölçü olduğunu düşünüyorum - bir sayı - bir otokorelasyon fonksiyonunun bir delta ne kadar benzer olduğunu kodlayan, VS bir otokorelasyon fonksiyonu içinde birçok tepe var gibi görünüyor. Bu amaçla, spektral düzlüğün ölçüsü uygulanabilir veya daha genel bir durumda geometrik ortalamanızın aritmetik ortalamaya ölçümü olabilir.


Otokorelasyonun (ritmik) sinyali (rastgele) gürültüden daha iyi ayırt edeceği izlenimindeydim - gürültü sıfıra yakın otokorelasyon yapacaktı. Bir DFT, OTOH, gürültüyü gürültü - bir yayılı spektrum olarak temsil edecektir. En azından anladığım kadarıyla bu "teori".
Daniel R Hicks

Lütfen düzenlemelerime bakın.
Spacey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.