bộ lọc tiếng nói của con người


17

Có ai biết một bộ lọc để làm giảm sự không nói? Tôi đang viết phần mềm nhận dạng giọng nói và muốn lọc ra mọi thứ trừ lời nói của con người. Điều này sẽ bao gồm tiếng ồn nền, tiếng ồn được tạo ra bởi micrô nhảm nhí hoặc thậm chí là nhạc nền. Tôi đã triển khai bộ lọc thứ tự đầu tiên bù cho mức giảm 6 dB của phổ công suất, nhưng tôi vẫn nghe thấy tiếng ồn (mặc dù lời nói nghe rõ hơn rất nhiều). Tôi đã nghĩ sử dụng bộ lọc thông thấp, nhưng tôi iffy về việc đó vì hai lý do:

  1. Tôi không biết liệu bộ lọc trước thông thấp có can thiệp vào phần còn lại của quá trình xử lý lời nói hay không. Mặc dù tai người chỉ có thể phát hiện âm thanh thấp hơn 20 kHz, tôi không muốn mạo hiểm loại bỏ bất kỳ sóng hài bậc cao nào có thể cần thiết để xử lý lời nói (mặc dù tôi không biết liệu đây có phải là trường hợp hay không. Nhưng Tôi không muốn có bất kỳ cơ hội nào).

  2. Tôi hiểu rằng sự kích thích của một số phụ âm nhất định (như f, h và s) gần như hoàn toàn là tiếng ồn trắng. Tôi không muốn thực hiện một bộ lọc tiếng ồn sẽ loại bỏ tiếng ồn tốt .

Lý tưởng nhất, tôi muốn chỉ còn lại lời nói của người nói vào micro. Nếu bạn có bất kỳ ý tưởng nào, hoặc có điều gì đó mà tôi đang thiếu, xin vui lòng cho tôi biết. Nhiều đánh giá cao!


Tôi giả sử. Mặc dù vậy, tôi sẽ để nó mở, đơn giản vì tôi đã thấy các câu hỏi tương tự (bộ lọc và xử lý âm thanh) ở đây đã được trả lời tốt.
Zetta Suro

Chẳng hạn như cái này: stackoverflow.com/questions/6452926/
Ấn

Nguyên tắc chung: nếu bạn muốn biết cách triển khai một thuật toán DSP cụ thể, ví dụ như trong một ngôn ngữ cụ thể hoặc trên một nền tảng cụ thể, thì đó là chủ đề của SO. Nếu đó là một câu hỏi về thuật toán / kỹ thuật DSP không có góc độ lập trình cụ thể thì gần như chắc chắn nó thuộc về DSP.SE (nơi nó cũng sẽ có xu hướng nhận được câu trả lời chất lượng tốt hơn).
Paul R

Gotcha. Bạn đã di chuyển nó qua đây? Nếu vậy cảm ơn. Tôi không thể tìm ra cách di chuyển nó, vì vậy tôi đã kết thúc việc hỏi lại nó ở đây.
Zetta Suro

Không phải tôi - tôi đã gắn cờ nó và hỏi liệu người điều hành có thể di chuyển nó không, vì vậy tôi đoán một trong những TPTB đã làm điều đó (cảm ơn bất cứ ai!).
Paul R

Câu trả lời:


8

Một kênh giao tiếp giọng nói như được sử dụng trong điện thoại thường có đáp ứng tần số từ 300 Hz đến 3 kHz. Mặc dù điều này loại bỏ rất nhiều năng lượng trong lời nói bình thường, nhưng độ thông minh vẫn khá tốt - vấn đề chính dường như là các phụ âm số nhiều nhất định , ví dụ "p" và "t", có thể hơi khó phân biệt nếu không có các thành phần tần số cao hơn .

Vì vậy, có lẽ bạn đang tìm kiếm một "điểm ngọt" ở đâu đó giữa việc sử dụng băng thông 20 Hz - 20 kHz đầy đủ thường thấy trong âm thanh của người tiêu dùng và bộ lọc tích cực nhất được sử dụng cho comms bằng giọng nói (xem ở trên). Tôi sẽ đề nghị bắt đầu với bộ lọc thông dải từ 50 Hz đến 8 kHz. Nó có thể sẽ chỉ cải thiện SNR một vài dB tốt nhất, nhưng nó có thể giúp ích, đặc biệt nếu bạn có nhiều tiếng ồn nền tần số cao.


Cảm ơn! Một người bạn của tôi thực sự đề xuất kênh thoại, nhưng tôi nghi ngờ rằng nó sẽ làm giảm quá nhiều năng lượng trong một số phụ âm. Tôi sẽ thử 50 Hz đến 8 kHz và xem nó hoạt động như thế nào!
Zetta Suro

2
Chọn câu trả lời này đơn giản vì đó là giải pháp "nhanh chóng" mà tôi đang tìm kiếm. Phần còn lại của câu trả lời sẽ cần nhiều nghiên cứu hơn mà tôi chắc chắn sẽ xem xét, vì chúng sẽ hữu ích trong thời gian dài, nhưng đây là một giải pháp lọc đơn giản mà ban đầu tôi đang tìm kiếm.
Zetta Suro

5

Sử dụng bộ lọc băng thông phù hợp với băng thông của lời nói sẽ giúp ích.

Nếu bạn có một số micrô (như trường hợp trên điện thoại di động), có một phương pháp giống như ICA có thể tận dụng lợi thế đó - nhưng câu hỏi của bạn gợi ý cho tôi rằng bạn chỉ có một đầu vào.

Những gì bạn muốn làm là "tách nguồn một micrô" (tên được lấy từ bài viết đột phá của Roweis), còn được gọi là "cảm biến đơn". Cảnh báo: đây không phải là một vấn đề được giải quyết và tất cả các nghiên cứu trong lĩnh vực này là rất gần đây, không có thuật toán hay cách tiếp cận nào là "người chiến thắng rõ ràng" (không giống như các mô hình hỗn hợp gaussian + FST đã được nhận dạng giọng nói).

Một khung tốt để làm điều đó là thông qua bộ lọc Wiener. Xem Benaroya et al. "Tách nguồn cảm biến đơn dựa trên bộ lọc Wiener và nhiều cửa sổ STFT" (Đọc phần 1 & 2, đừng bận tâm đến điều đa biến trừ khi bạn thực sự cần nó). Nói tóm lại, bạn tính toán STFT của tín hiệu của bạn và đối với từng khung STFT, bạn cố gắng lấy ước tính của phổ giọng nói và phổ nhiễu và bạn sử dụng bộ lọc Wiener để khôi phục ước tính tốt nhất của phổ thoại từ đó (điều này giống như "mặt nạ mềm" phổ).

Vấn đề của bạn bây giờ là như sau: đưa ra một khung STFT, ước tính lời nói và thành phần nhiễu từ nó. Cách tiếp cận đơn giản hơn được mô tả trong bài báo của Benaroya là thông qua lượng tử hóa Vector - mất nhiều giờ phát biểu của nhiều diễn giả, tính toán STFT, chạy LBG trên đó để tìm một cuốn sách mã gồm 512 hoặc 1024 khung nói điển hình; làm điều tương tự cho tiếng ồn. Bây giờ, được đưa ra một khung tín hiệu đầu vào của bạn, chiếu nó không âm (một quy trình cập nhật độ dốc nhân được mô tả trong bài viết) lên các cơ sở tiếng nói và tiếng ồn, và bạn có được ước tính tiếng nói và tiếng ồn của mình. Nếu bạn không muốn đối phó với điều không chiếu, chỉ cần sử dụng người hàng xóm gần nhất. Đây thực sự là điều đơn giản nhất có thể hoạt động trong bộ phận "tách nguồn cảm biến đơn".

Lưu ý rằng một hệ thống nhận dạng giọng nói thực sự có thể cung cấp một số đầu vào cho một hệ thống phân tách. Thực hiện một bước giải mã đầu tiên bằng hệ thống nhận dạng giọng nói của bạn. Đối với mỗi khung, lấy vectơ MFCC trung bình từ gaussian có điểm cao nhất. Đảo ngược nó trở lại thành một quang phổ. Boom, bạn có một mặt nạ cung cấp cho bạn vị trí phổ có khả năng nhất của các bit giống như lời nói và bạn có thể sử dụng nó làm đầu vào cho bộ lọc Wiener. Điều này nghe có vẻ giống như vẫy tay, nhưng nhà địa chất học là để tách một nguồn bạn cần một mô hình tốt cho nó, và một hệ thống nhận dạng giọng nói được đưa về phía sau là một mô hình phát âm tốt cho tín hiệu giọng nói.


1

Có lẽ bạn nên xem xét phân tích thành phần độc lập (ICA) vì vấn đề của bạn rất giống với vấn đề "tiệc cocktail" thường được sử dụng để mô tả ICA. Tóm lại, ICA tìm thấy các thành phần tín hiệu của bạn độc lập với nhau. Điều này giả định rằng các tiếng ồn khác trong môi trường (máy rửa chén, tiếng ồn trắng, tiếng quạt) sẽ độc lập với nguồn tín hiệu của giọng nói và có thể tách rời.

ICA tương tự như PCA (phân tích thành phần nguyên tắc) nhưng thay vì tối đa hóa phương sai trên các trục nguyên tắc, nó tối đa hóa tính độc lập. Có nhiều triển khai ICA nên cắm vào bất kỳ môi trường mã hóa nào bạn đang sử dụng.


4
ICA yêu cầu nhiều tín hiệu đầu vào như có nguồn để tách. Trong việc từ chối lời nói, chúng tôi chỉ còn lại một tín hiệu và do đó ICA không có sự giúp đỡ.
pichenettes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.