Pomoże w tym filtr pasmowy pasujący do przepustowości mowy.
Jeśli masz kilka mikrofonów (jak ma to miejsce obecnie w przypadku telefonów komórkowych), istnieje mnóstwo metod podobnych do ICA, które mogą z nich skorzystać - ale twoje pytanie podpowiada mi, że masz tylko jedno wejście.
To, co chcesz zrobić, to „separacja jednego mikrofonu od źródła” (nazwa zaczerpnięta z przełomowego papieru Roweisa), zwana również „pojedynczym czujnikiem”. Ostrzeżenie: jest to dalekie od rozwiązania problemu, a wszystkie badania w tej dziedzinie są bardzo niedawne, a żaden algorytm lub podejście nie jest „wyraźnym zwycięzcą” (w przeciwieństwie do modeli mieszania gaussowskiego + FST do rozpoznawania mowy).
Dobrym rozwiązaniem jest filtrowanie Wienera. Patrz Benaroya i in. „Separacja źródła pojedynczego czujnika na podstawie filtrowania Wienera i wielu okien STFT” (Przeczytaj sekcje 1 i 2, nie przejmuj się rozwiązaniem wielorozdzielczym, chyba że naprawdę go potrzebujesz). Krótko mówiąc, obliczasz STFT swojego sygnału i dla każdej ramki STFT próbujesz uzyskać oszacowania widma głosu i widma szumu, i używasz filtrowania Wienera, aby odzyskać najlepsze oszacowanie widma głosu z tego (to jest podobny do „miękkiego maskowania” widma).
Twój problem jest teraz następujący: biorąc pod uwagę ramkę STFT, oszacuj składową mowy i szumu z niej. Prostsze podejście opisane w artykule przez Benaroya polega na kwantyzacji wektorowej - poświęć kilka godzin na przemówienie wielu mówcom, oblicz STFT, uruchom na nim LBG, aby znaleźć słownik zawierający 512 lub 1024 typowych ramek mowy; zrób to samo dla hałasu. Teraz, biorąc pod uwagę ramkę sygnału wejściowego, rzutuj go nieujemnie (w artykule opisano procedurę multiplikatywnej aktualizacji gradientu) na podstawy mowy i szumu, a otrzymasz oszacowania mowy i szumu. Jeśli nie chcesz zajmować się projekcją nieujemną, po prostu użyj najbliższego sąsiada. To naprawdę najprostsza rzecz, która mogłaby ewentualnie działać w dziale „separacji źródła z jednym czujnikiem”.
Należy zauważyć, że system rozpoznawania mowy może rzeczywiście zapewnić pewne dane wejściowe dla systemu separacji. Wykonaj pierwsze przejście dekodowania za pomocą systemu rozpoznawania mowy. Dla każdej klatki pobierz średni wektor MFCC od gaussa, który uzyskał najlepszy wynik. Odwróć to z powrotem do widma. Bum, masz maskę podającą najbardziej prawdopodobną lokalizację spektralną bitów przypominających mowę i możesz jej użyć jako danych wejściowych do filtrowania Wienera. Brzmi to trochę jak machanie ręką, ale geistą jest to, że aby oddzielić źródło, potrzebujesz do tego dobrego modelu, a system rozpoznawania mowy cofnięty to piekielnie dobry model generatywny dla sygnałów mowy.