insan konuşma gürültü filtresi


17

Konuşmayı zayıflatan bir filtre bilen var mı? Konuşma tanıma yazılımı yazıyorum ve insan konuşması dışında her şeyi filtrelemek istiyorum. Bu, arka plan gürültüsünü, berbat bir mikrofon tarafından üretilen gürültüyü ve hatta arka plan müziğini içerir. Güç spektrumunun 6 dB'lik düşüşünü telafi eden bir birinci dereceden filtre uyguladım, ancak yine de gürültü duyuyorum (konuşma çok daha net görünse de). Düşük geçişli bir filtre kullanmayı düşündüm, ancak bunu iki nedenden ötürü yapıyorum:

  1. Düşük geçişli bir ön filtrenin konuşma işleminin geri kalanına müdahale edip etmeyeceğini bilmiyorum. İnsan kulağı sadece 20 kHz'den daha düşük sesleri tespit edebilse de, konuşmayı işlemek için gerekli olabilecek daha yüksek dereceli harmonikleri ortadan kaldırmak istemiyorum (ancak durumun bu olup olmadığını bilmiyorum.) Şansını denemek istemiyorum).

  2. Bazı ünsüzlerin (f, h ve s gibi) uyarılmasının neredeyse tamamen beyaz gürültü olduğunu anlıyorum. Tabii, iyi gürültüyü ortadan kaldıracak bir gürültü filtresi uygulamak istemiyorum .

İdeal olarak, sadece mikrofona konuşan kişinin konuşması ile kalmak istiyorum. Herhangi bir fikriniz varsa veya eksik olduğum bir şey varsa, lütfen bana bildirin. Çok takdir!


Sanırım. Yine de açık bırakacağım, çünkü burada iyi cevaplanmış benzer sorular (filtreler ve akustik işleme) gördüm.
Zetta Suro


Temel kural: Belirli bir dilde veya belirli bir platformda belirli bir DSP algoritmasının nasıl uygulanacağını bilmek istiyorsanız, SO için konudur. Belirli bir programlama açısı olmayan DSP algoritmaları / teknikleri hakkında bir soru varsa, neredeyse kesinlikle DSP.SE'ye aittir (burada daha kaliteli cevaplar alma eğilimi vardır).
Paul R

Anladım. Buraya göç ettin mi? Eğer öyleyse teşekkürler. Nasıl göç edeceğimi bulamadım, bu yüzden burada tekrar sordum.
Zetta Suro

Ben değilim - işaretledim ve bir moderatörün hareket edip edemeyeceğini sordum, bu yüzden TPTB'den biri yaptı (kim olursa olsun!).
Paul R

Yanıtlar:


8

Telefonda kullanılan bir konuşma iletişim kanalı tipik olarak 300 Hz ila 3 kHz frekans tepkisine sahiptir. Her ne kadar bu normal konuşmada çok fazla enerjiyi reddetse de, anlaşılabilirlik hala oldukça iyidir - asıl sorun , "p" ve "t" gibi bazı patlayıcı ünsüzlerin daha yüksek frekans bileşenleri olmadan ayrım yapmak için biraz zor olabileceği gibi görünüyor. .

Yani muhtemelen tüketici sesinde bulunan tam 20 Hz - 20 kHz bant genişliği ile sesli iletişim için kullanılan en agresif filtreleme arasında bir yerde "tatlı nokta" arıyorsunuz (yukarıya bakın). 50 Hz'den 8 kHz'e kadar bir bant geçiren filtre ile başlamanızı öneririm. Muhtemelen SNR'yi en iyi ihtimalle sadece birkaç dB iyileştirecektir, ancak özellikle çok yüksek frekanslı arka plan gürültünüz varsa yardımcı olabilir.


Teşekkürler! Bir arkadaşım aslında ses kanalını önerdi, ancak bazı ünsüzlerin enerjisinin çok fazla azaltacağından şüphelendim. 50 Hz - 8 kHz'yi deneyeceğim ve bunun nasıl çalıştığını göreceğim!
Zetta Suro

2
Bu cevabı seçmek, aradığım "hızlı" çözüm olduğu için. Cevapların geri kalanı, uzun vadede yardımcı olacakları için kesinlikle içine bakacağım çok daha fazla araştırma gerektirecek, ancak bu aslında aradığım basit bir filtre çözümüdür.
Zetta Suro

5

Konuşmanın bant genişliğine uyan bir geçiş bandı filtresi kullanmak yardımcı olacaktır.

Birden fazla mikrofonunuz varsa (cep telefonlarında olduğu gibi), bundan yararlanabilecek ICA benzeri yöntemler var - ancak sorunuz bana sadece bir girişiniz olduğunu ima ediyor.

Yapmak istediğiniz şey, "tek sensör" olarak da adlandırılan "tek mikrofonlu kaynak ayırma" (adı Roweis'in çığır açan kağıdından alınmıştır). Uyarı: Bu, çözülmüş bir sorun olmaktan çok uzaktır ve bu alandaki tüm araştırmalar çok yakındır, hiçbir algoritma veya yaklaşım "açık kazanan" değildir (gauss karışım modellerinin aksine + FST konuşma tanıma için olmuştur).

Bunu yapmak için iyi bir çerçeve Wiener filtrelemedir. Bkz. Benaroya ve ark. "Wiener filtrelemesine ve çoklu pencere STFT'sine dayalı Tek Sensör Kaynak ayırma" (Bölüm 1 ve 2'yi okuyun, gerçekten ihtiyaç duymadıkça çoklu çözümle uğraşmayın). Kısacası, sinyallerinizin STFT'sini hesaplarsınız ve her STFT çerçevesi için ses spektrumu ve gürültü spektrumu hakkında tahminler almaya çalışırsınız ve ses spektrumunun en iyi tahminini kurtarmak için Wiener filtrelemesini kullanırsınız (bu "yumuşak maskelemeye" benzerdir).

Sorununuz şu şekildedir: STFT çerçevesi verildiğinde, konuşmayı ve gürültü bileşenini tahmin edin. Benaroya'nın makalesinde açıklanan daha basit yaklaşım Vektör nicemleme yoluyladır - birçok konuşmacı tarafından birkaç saat konuşma yapın, STFT'yi hesaplayın, 512 veya 1024 tipik konuşma çerçevelerinin bir kod kitabını bulmak için LBG'yi çalıştırın; gürültü için de aynı şeyi yapın. Şimdi, giriş sinyalinizin bir çerçevesi verildiğinde, bunu negatif olmayan şekilde (kağıtta çarpımsal bir gradyan güncelleme prosedürü açıklanmaktadır) konuşma ve gürültü tabanlarına yansıtın ve konuşma ve gürültü tahminlerinizi alın. Negatif olmayan projeksiyonla uğraşmak istemiyorsanız, sadece en yakın komşuyu kullanın. Bu gerçekten de "tek sensörlü kaynak ayırma" bölümünde çalışabilecek en basit şey.

Bir konuşma tanıma sisteminin gerçekten de bir ayırma sistemi için bir miktar girdi sağlayabileceğini unutmayın. Konuşma tanıma sisteminizi kullanarak kod çözmenin ilk geçişini yapın. Her kare için, en iyi puanı alan gaussiandan ortalama MFCC vektörünü alın. Bunu tekrar bir spektrum haline getirin. Boom, size konuşma benzeri bitlerin en muhtemel spektral konumunu veren bir masken var ve onu Wiener filtrelemesi için bir girdi olarak kullanabilirsiniz. Bu biraz el sallama gibi geliyor, ancak geist, bir kaynağı ayırmak için bunun için iyi bir modele ihtiyacınız olduğu ve geri alınan bir konuşma tanıma sisteminin konuşma sinyalleri için iyi bir üretken modelin cehennemidir.


1

Muhtemelen Bağımsız Bileşen Analizi (ICA) yapmayı düşünmelisiniz, çünkü probleminiz ICA'yı tanımlamak için sıklıkla kullanılan "kokteyl partisi" problemine çok benzemektedir. Kısacası ICA sinyalinizin birbirinden bağımsız bileşenlerini bulur. Bu, ortamdaki diğer gürültünün (bulaşık makinesi, beyaz gürültü, fan sesi) sesin sinyal kaynağından bağımsız olacağını ve ayrılabileceğini varsayar.

ICA, PCA'ya (prensip bileşen analizi) benzer, ancak prensip eksenlerindeki varyansı maksimuma çıkarmak yerine, bağımsızlığı maksimuma çıkarır. Kullandığınız kodlama ortamına takılması gereken birçok ICA uygulaması vardır.


4
ICA, ayrılacak kaynaklar olduğu kadar çok giriş sinyali gerektirir. Konuşma kınama, biz sadece bir sinyal ile kalır ve böylece ICA hiçbir yardımcı olur.
pichenettes
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.