Sesi horlamadan nasıl ayırt edebilirim?


22

Arka plan: Ben (ima bir iPhone uygulaması üzerinde çalışıyorum içinde birkaç diğer mesajlar ) bu bir uykuda olup belirler iken nefes / horlama "dinler" "Uyku laboratuvarında" için bir ön ekran olarak (uyku apnesi belirtileri varsa test yapmak). Uygulama prensip olarak horlama / nefes tespit etmek için "spektral fark" kullanır ve uyku laboratuarı kayıtlarına (aslında oldukça gürültülü) karşı test edildiğinde oldukça iyi çalışır (ca 0.85--0.90 korelasyonu).

Sorun: Çoğu "yatak odası" gürültüsü (fanlar, vb.) Birkaç teknikle filtreleyebiliyorum ve insan kulağının algılayamadığı S / N seviyelerinde solunumu güvenilir bir şekilde tespit edebiliyorum. Sorun ses gürültüsüdür. Arka planda çalışan bir televizyonun veya radyonun olması olağandışı değildir (ya da sadece uzaktan konuşurken birisinin konuşması) ve sesin ritmi nefes alma / horlama ile yakından eşleşir. Aslında, uygulamadaki geç yazar / hikaye anlatıcısı Bill Holm'un bir kaydını yürüttüm ve ritimde, seviye değişkenliğinde ve diğer bazı önlemlerde horlamanın temelinden ayırt edilemezdi. (En azından uyanıkken göründüğü kadarıyla uyku apnesi olmadığını söyleyebilirim.)

Yani bu biraz uzun bir atış (ve muhtemelen forum kurallarının uzatılması), ancak sesi nasıl ayırt edebileceğimize dair bazı fikirler arıyorum. Horlama seslerini bir şekilde filtrelememiz gerekmiyor (bunun iyi olacağını düşündüm), ama sadece sesle aşırı kirlenmiş "çok gürültülü" bir ses olarak reddetmenin bir yoluna ihtiyacımız var.

Herhangi bir fikir?

Yayınlanan dosyalar: dropbox.com'a bazı dosyalar yerleştirdim:

Birincisi rastgele bir rock müzik parçası (sanırım), ikincisi ise Bill Holm'un son konuşmasının kaydı. Her ikisi de (benim "gürültü" numunelerim olarak kullandığım horlamadan farklılaşıyor) sinyalin sesini engellemek için gürültü ile karıştırıldı. (Bu onları önemli ölçüde daha zor tanımlama görevini yapar.) Üçüncü dosya, ilk üçüncünün en çok nefes aldığı, orta üçüncüsü karışık nefes alma / horlama ve son üçüncüsü oldukça sabit olan horlama kayıtlarının on dakikadır. (Bir bonus için öksürük edin.)

Her üç dosya da ".wav" dan "_wav.dat" a değiştirildi, çünkü birçok tarayıcı wav dosyalarını indirmeyi zorlaştırıyor. İndirdikten sonra onları tekrar ".wav" olarak yeniden adlandırın.

Güncelleme: Entropinin benim için "hile yaptığını" düşündüm, ama çoğunlukla kullandığım test vakalarının yanı sıra çok iyi tasarlanmamış bir algoritma da ortaya çıktı. Genel durumda entropi benim için çok az şey yapıyor.

Daha sonra, toplam sinyal büyüklüğünün FFT'yi (birkaç farklı pencere işlevini kullanarak) hesapladığım (güç, spektral akı ve diğer bazı ölçütleri denedim) saniyede 8 kez örneklenmiş (ana FFT döngüsünün istatistiklerini alarak) bir teknik denedim. her 1024/8000 saniyede bir). 1024 numuneyle bu, yaklaşık iki dakikalık bir zaman aralığını kapsar. Horlama / nefes almanın ses / müzik ritminden dolayı buradaki kalıpları görebileceğimi umuyordum (ve aynı zamanda " değişkenlik " konusunu ele almanın daha iyi bir yolu olabilirdi ), fakat ipuçları varken burada ve orada bir kalıp var, dayanabileceğim hiçbir şey yok.

( Daha fazla bilgi: Bazı durumlarda, sinyal büyüklüğünün FFT'si, yaklaşık 0,2Hz'de güçlü bir zirve ve merdiven boşluğu harmoniklerine sahip çok farklı bir model üretir. Fakat model çoğu zaman neredeyse o kadar belirgin değildir ve ses ve müzik daha az belirgin hale getirebilir. benzer bir modelin versiyonları, bir değer için bir korelasyon değeri hesaplamak için bir yol olabilir, ancak 4. dereceden bir polinom için yaklaşık bir eğri uydurma gerektirecek ve bunu bir telefonda bir saniyede yapmak pratik görünmeyecek gibi görünüyor.)

Ayrıca, spektrumu böldüğüm 5 bireysel "grup" için aynı genlik FFT'sini yapmaya çalıştım. Bantlar 4000-2000, 2000-1000, 1000-500 ve 500-0'dur. İlk 4 grubun modeli genel olarak genel desene benzerdi (gerçekte "öne çıkan" bant yoktu ve daha yüksek frekans bantlarında genellikle ufak sinyaller kayboldu), ancak 500-0 bandı genellikle rastgele idi.

Ödül: Nathan'a ödülü vereceğim, yeni bir şey teklif etmemiş olsa da, bugüne kadarki en üretken öneriydi. Yine de, bazı iyi fikirler ortaya çıkarsa başkasına vermeyi isteyeceğim birkaç nokta var.


2
Bazı temsili spektrogramları gönderebilir misiniz? (Verilerin konuşmasına izin verin.) "Spektral farkı" nasıl hesaplıyorsunuz?
Emre

"Spektral fark", bazen "spektral akı" ve birkaç diğer terim olarak adlandırılır. Temel olarak, sesin ardışık FFT'lerinde bireysel farklılıkların karelerinin toplamıdır.
Daniel R Hicks,

2
Bir düşününce, ses klipleri daha da iyi olurdu. Açıklama için teşekkürler.
Emre

En iyi sunumun ne olacağını anlamaya çalışıyorum. Kısa numuneler için spektrumları (gerçek FFT'lerim dışında) yapacak fantezi yazılımım yok - Audacity, bireysel bir sesin spektrumunu yakalamak için çok uzun bir numuneye ihtiyaç duyuyor. Ve gerçek hasta seslerini yayınlamanın bazı tıbbi mahremiyet sorunları var.
Daniel R Hicks

1
@DanielRHicks TV + horlama özellikli Spektrogramlar ve sadece horlama veya bunun gibi bir şey gerçekten çok uzun sürecektir.
Spacey

Yanıtlar:


10

Arka fon

Aşağıdaki kağıtlara göre, horlama yaklaşık 130Hz'de bir zirve ile karakterize edilir ve tamamen 12kHz'in altında konsantredir:

Bakalım bunu kaldırabilir miyiz?

MATLAB Örneği

Horlayan bir çocuğun kötü bir kaydı var ; 10 dakikalık, 8 bitlik bir mono WAV dosyası. Örnekleme hızı 8KHz'dir, yani ses sinyalinin bant genişliği 4KHz'dir. Ben bu yüzden seviyesi çok düşüktür compand önce onu.

[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));
surf(linspace(0,600,length(t)),f/pi,10*log10(p),'edgecolor','none'); 
axis tight; view(0,90);

Tam spektrogram

Y ekseni, 4KHz bant genişliğinde normalize edilmiştir, böylece 0.1'de gördüğünüz çentik, 400Hz frekansına karşılık gelir. ~ 186'larda öksürüğe karşılık gelen bir başak var; görmezden gel. Her horlama sırasındaki çentikleri belli belirsiz görebiliriz. Sadece bu değil, 0.2 x 4KHz = 800Hz'in altında konsantre görünüyorlar. Hadi daha yakından bakalım.

idx_max_freq=round(0.2*length(f));
surf(linspace(0,600,length(t)),fs*f(1:,idx_max_freq:)/(2*pi),10*log10(p(1:idx_max_freq,:)),'edgecolor','none');
axis tight; view(0,90);

Spektrogramın 0-800Hz'ye yakınlaştırılması.

Bu kez frekans ekseni Hertz'de etiketlendi. Şimdi çentikler oldukça açık. 60Hz'den (180Hz, 300Hz, 420Hz) başlayan elektrik hattı gürültüsünün tonlarını bile görebiliriz. Şimdi algoritmanın özü geliyor: haydi bu alt banttaki enerjiye dayalı sinyali, hat gürültüsünü ortadan kaldırarak sınıflandıralım.

freq_list=round([1:57 63:177 183:297 303:417 423:800]*idx_max_freq/800);
y=10*log10(sum(p(freq_list,:)));
plot(linspace(0,600,length(y)),y-median(y))
stem(linspace(0,600,length(y)),y-median(y)>.5*std(y))

Eğer süslü olmak istiyorsak, büyük boy sivri uçları atabiliriz:

stem(linspace(0,600,length(y)),(y-median(y)>.5*std(y)).*(y-median(y)<5*std(y)))

Çentikli alt banttaki enerjinin grafiği 0-800Hz

Son sonuç

İlk arsadaki sinyalin ayırt edilmesindeki zorlukta ortaya çıkan düşük SNR, standart yarıya sapma oranının yarısına sahip olduğumuz anlamına gelir (değeri 4.1 idi). Sapları horlamaları işaretler.


Evet, şu anki algoritmam hum ve diğer harmonik gürültüyü (ventilatör gürültüsü az ya da çok sabit bir seviyede olan FFT kovalarını sıfırlayarak iptal ediyor). "Bu alt banttaki enerjiye göre sinyali sınıflandıralım" derken ne demek istediğinizi anlayamadım - ne alt banttan bahsediyorsunuz?
Daniel R Hicks,

Anladığım kadarıyla 800 Hz'nin altında konuşuyorsun - O kısmını özledim.
Daniel R Hicks

Eğer üst tablonuza bakarsanız, üste yakın bir miktar bilgi ve ortanın hemen altında başka bir grup olduğunu göreceksiniz. Ve bu grupların rekabet gücü daha az. Şu anki programım spektrumu dilimliyor ve her dilimin SNR'sini değerlendirmeye çalışıyor, sonra bunları uygun şekilde tartıyor.
Daniel R Hicks

Seçmeli alt bantlardaki enerji, spektral düzlük vb. Gibi birkaç özelliği birleştirerek geçici bir özellik vektörü oluşturabilirsiniz. Ardından, son makalede açıklandığı gibi hangisinin en önemli olduğunu bulmak için PCA gerçekleştirin.
Emre,

Temelde yaptığım şey bu, PCA'nın titizliği yok.
Daniel R Hicks

9

Tüm olasılıkları kapsayacak şekilde bunu buraya attığınızda, entropi kullanabilirsiniz, konuşma ve horlamanın entropi seviyesinin ne olduğunu bilmiyorum ama işe yarayacak kadar farklıysa, bilmiyorum. http://www.ee.columbia.edu/~dpwe/papers/ShenHL98-endpoint.pdf


Onunla ne yaptığımı tam olarak anlamadım (bilgi teorisi kafamı patlatıyor), ama kaba bir entropi hesaplaması yaptım, biraz teorik olmayan normalleşmeye fırlattım ve çalışıyor gibi görünüyor. Müzik ve ses düşük (negatif) bir entropiye sahipken, horlama önemli ölçüde daha yüksektir. Ve genel olarak arkaplan gürültüsü (negatif) değerini düşürüyor gibi görünüyor, bu yüzden oldukça iyi bir değer sağlar. Yine de daha fazla deney yapılması gerekiyor.
Daniel R Hicks

Dikkat etmeniz gereken bir şey, aynı zamanda basit bir seviye kapısını da eklemeniz gerektiğidir, çünkü izin vermeye çalıştığınız şeylerle eşleşebilecek son derece düşük seviyeli bir arka gürültüye sahip olabilirsiniz. Aşırı düşük seviyeli gürültü sinyaldeki sıralamayı artırabilir, çünkü düşük seviyelerde düşük sayıda olası örnek değeri vardır ve tek başına entropi, genlikteki farklılıkları dikkate almaz.
Nathan Day,

Evet, düzenli olarak gürültü ile savaş yapıyorum ve bunu ayrı ayrı ölçmek için oldukça iyi bir yolum var. Gürültü belli bir seviyeyi aştığında, kumar oynarım. (Aslında, gürültüyü ölçmek inanılmaz derecede zor.)
Daniel R Hicks

Ne yazık ki, ham entropi hesaplama ile ölçtüğümün çoğunun hesaplamanın bir ürünü olduğunu keşfettim (test verilerindeki sıfırlar nedeniyle). Bu benim ihtiyacım için işe yarıyor, ama ilk düşündüğüm kadar iyi değil.
Daniel R Hicks

Takip: Kullandığım sabit / yüzer FFT'yi tam bir kayar nokta ile değiştirdim (seviye düşük olduğunda sıfır üretmez) ve entropinin faydası tüplerden daha da aşağıya gitti - özellikle yararlı bir şey sağladığı görülüyor.
Daniel R Hicks,

3

Belki zaman alanı istatistikleri? Horlama göreceli olarak uzun süren kalıcı hal gibi gözükse de, konuşma enerjisi kısa süreler boyunca biraz değişmektedir. Bu da spektral analiz ile birleştirilebilir. Ünlüler daha düşük frekans içeriğine ve ünsüzlerin daha yüksek frekanslara sahiptir. Konuşma sırasında, spektrum bu durumlar arasında hızlı bir şekilde ileri geri sıçrayabilir ve depolama uzun süre boyunca bir durumda kalabilir.


Temel zaman-etki alanı istatistikleri ayırt edilemez. Ancak, kısa vadeli değişkenliğe (normalde yumuşattığım) bakabildiğim için iyi bir nokta. Frekans bantları arasında "sıçramayı" aramak da iyi bir fikirdir ... Şu anda 5 gruba ayrıldım ve görünen düşük S / N bantlarını reddediyorum.
Daniel R Hicks

@DanielRHicks Cepstral zarfı başka bir yerde nasıl hesaplayabileceğimi gördüm , ama belki bunu daha 'gürültülü / pürüzlü' olacak saf spektrum yerine spektral değişkenliğinizin bir ölçüsü olarak kullanabilirsiniz. . Ayrıca Mel-Frequency cepstrumunun ses tanımada kullanıldığını duydum ve bu sizin için kullanabileceğim gibi geliyor.
Spacey

@DanielRHicks: Hangi yöntemle ayırt edilemez? Kesinlikle benim için ayırt edilebilirler.
endolith

@endolith - Mevcut ölçümlerime göre ayırt edilemez - "spektral fark" ve toplam enerji seviyesi. Ancak, bunlar yaklaşık 0.5 saniye zaman sabiti ile düşük geçişli filtrelendiler. Sanırım filtrelenmemiş verilere biraz bakmaya çalışacağım.
Daniel R Hicks

Kısa süreli zaman istatistiklerini yakalamaya başladım. Bazı "ipuçları", ancak kesin bir şey yok.
Daniel R Hicks

1

Zamanla spektral karmaşıklık. İnsan konuşmalarının muhtemelen sıralamada, horlamanın fonem sıralamalarından daha fazla fonem ve daha fazla istatistiksel karmaşıklık kullandığı varsayılır.

Herhangi bir fonem veya cümleyi doğru bir şekilde tanımanız gerekmeyeceğinden, sadece fonem seslendirme spektral segmentlerinin sayısını ve bunların dizilerinin bazı istatistiksel karmaşıklık ölçütlerini (entropi veya sıkıştırılabilirlik testi işe yarayabilir). O zaman bu önlemler için güvenilir bir eşik belirleyebiliyor musunuz bakalım.


Sorun şu ki, horlamanın şaşırtıcı derecede karmaşık / rastgele ve spektrumu incelendiğinde belirgin özelliklerden çok yoksun olması.
Daniel R Hicks

Uyuyan bir kişinin, çok sayıda farklı sesli forment filtreleri ve patlayıcı maddeler (ve zaman içindeki yoğunluğa göre digraphs ve trigraphs) oluşturması ve uyanıkken ve konuşurken uyurken zift çekimi (vb.) Olması ilginç bir bilgi olacaktır.
hotpaw2

Özelliklerin olmaması önemli bir özellik olabilir. Konuşma özelliklere sahiptir.
hotpaw2

Bir sorun, horlamanın bir nefesten diğerine çok farklı olabileceğidir. Basit ve ağır bir nefes çok "beyaz" dır, ancak bir horlamanın bazı çok sert iğneleri olabilir. Temelde kare bir dalga olsa da, aşırı basitleştirmedir. Ve bir akıllı telefonda gerçek zamanlı olarak analizi yapmamız gerekiyor, bu yüzden algoritmanın karmaşıklığı sınırlı.
Daniel R Hicks,
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.