Những phương pháp nào có thể được sử dụng để xác định và loại bỏ tiếng vang từ hệ thống âm thanh?


14

Lý lịch

Tôi đang thiết kế một hệ thống sẽ có một micrô nhỏ và loa để sử dụng trong cài đặt loại điện thoại. Ví dụ dễ nhất tôi có thể đưa ra là một cuộc trò chuyện Skype nơi bạn đang sử dụng loa máy tính và micrô để bàn.

Tôi lo lắng về âm thanh từ loa được micro thu lại và gửi lại cho người ban đầu. Tôi đã từng nghe điều này xảy ra mọi lúc trong những ngày đầu của các cuộc hội thoại VoIP, nhưng hầu như không nghe thấy gì nữa.

Giả định của tôi là các nhóm đã tìm ra cách để loại bỏ tiếng vang, nhưng làm thế nào để họ làm điều đó?

Phương pháp tiếp cận

Suy nghĩ đầu tiên của tôi là chỉ đơn giản là trừ tín hiệu được gửi đến loa khỏi tín hiệu micrô, ngoại trừ với phương pháp này, bạn phải quan tâm đến độ trễ. Tôi không chắc chắn làm thế nào để xác định độ trễ là gì với một số loại hiệu chuẩn trước, mà tôi muốn tránh. Ngoài ra còn có vấn đề bao nhiêu để thu nhỏ tín hiệu bằng cách trừ đi trước.

Tiếp theo tôi nghĩ về việc thực hiện một số loại tương quan giữa tín hiệu loa và tín hiệu mic để xác định khả năng tín hiệu mic là tiếng vang cũng như có thể xác định độ trễ thực tế. Phương pháp này có thể hoạt động ổn định khi tôi chơi với một số tín hiệu được ghi lại, nhưng dường như có độ trễ rất lớn trong việc tính toán mối tương quan có ích trong hệ thống thời gian thực. Ngoài ra, âm lượng có thể điều chỉnh trên loa khiến việc xác định xem có thứ gì đó thực sự tương quan hay không.

Tiếp theo tôi nghĩ rằng phải có ai đó trên internet đã làm điều này trước đây với thành công, nhưng không tìm thấy bất kỳ ví dụ tuyệt vời nào. Vì vậy, tôi đến đây để xem những phương pháp nào có thể được sử dụng để giải quyết loại vấn đề này.


1
Acoustic Echo Cancelling là một lĩnh vực chủ đề lớn với nhiều sách và nhiều thập kỷ nghiên cứu về chủ đề này. Đây là một câu hỏi và trả lời về chủ đề này: stackoverflow.com/questions/3403152/acophone-echo-cancname-in-java
hotpaw2

1
@ hotpaw2 Không chắc chắn tại sao loại bỏ tiếng vang Acoustic trong liên kết Java của bạn không thể nhấp được.
Đánh dấu gian hàng

vui lòng gợi ý cho tôi, tôi đang cố gắng hủy tiếng vang có trong bài phát biểu, nhập vào một micrô trong khán phòng. Tôi đang thử nó như bạn đã đề cập đến bộ lọc thích ứng, vì bạn đang đưa ra tín hiệu tham chiếu khi nói chuyện xa. nhưng tôi không có tín hiệu tham khảo ở đây. tín hiệu của tôi là tiếng vang của tín hiệu gốc đang nhận tín hiệu 500ms với tín hiệu loa tới micrô.

Câu trả lời:


15

Bạn nói đúng. Nhiều phương pháp loại bỏ tiếng vang tồn tại, nhưng không có phương pháp nào là chính xác. Phương pháp phổ biến và phổ biến nhất là loại bỏ tiếng vang thông qua bộ lọc thích ứng. Trong một câu, công việc của bộ lọc thích ứng là thay đổi tín hiệu phát lại bằng cách giảm thiểu lượng thông tin đến từ đầu vào.

Bộ lọc thích ứng

Bộ lọc thích ứng (kỹ thuật số) là bộ lọc thay đổi hệ số của nó và cuối cùng hội tụ thành một số cấu hình tối ưu. Cơ chế thích ứng này hoạt động bằng cách so sánh đầu ra của bộ lọc với một số đầu ra mong muốn. Dưới đây là sơ đồ của bộ lọc thích ứng chung:

nhập mô tả hình ảnh ở đây

Như bạn có thể nhìn thấy từ biểu đồ, các tín hiệu được lọc bởi (convolved với) w n để sản tín hiệu đầu ra d [ n ] . Chúng tôi sau đó trừ d [ n ] từ mong muốn tín hiệu d [ n ] để tạo ra các lỗi tín hiệu e [ n ] . Lưu ý rằng w n là một vectơ của các hệ số, không phải là một số (do đó chúng ta không viết w [ n ]x[n]wnd^[n]d^[n]d[n]e[n]wnw[n]). Bởi vì nó thay đổi mỗi lần lặp (mỗi mẫu), chúng tôi đăng ký bộ sưu tập hiện tại của các hệ số này với . Sau khi thu được e [ n ], chúng tôi sử dụng nó để cập nhật w n bằng thuật toán cập nhật lựa chọn (nhiều hơn về sau). Nếu đầu vào và đầu ra đáp ứng một mối quan hệ tuyến tính mà không thay đổi theo thời gian và đưa ra một thuật toán cập nhật được thiết kế tốt, w n cuối cùng sẽ hội tụ về bộ lọc tối ưu và d [ n ] sẽ chặt chẽ sau d [ n ] .ne[n]wnwnd^[n]d[n]

Echo hủy

Vấn đề khử tiếng vang có thể được trình bày dưới dạng vấn đề của bộ lọc thích ứng trong đó chúng tôi đang cố gắng tạo ra một số đầu ra lý tưởng đã biết với một đầu vào bằng cách tìm bộ lọc tối ưu thỏa mãn mối quan hệ đầu vào-đầu ra. Cụ thể, khi bạn lấy tai nghe và nói "xin chào", nó đã nhận được ở đầu bên kia của mạng, được thay đổi bởi phản hồi âm thanh của một căn phòng (nếu nó được phát lại thành tiếng) và đưa trở lại mạng để quay lại với bạn như một tiếng vang. Tuy nhiên, vì hệ thống biết tiếng "xin chào" ban đầu nghe như thế nào và bây giờ nó biết tiếng "xin chào" vang vọng và bị trì hoãn như thế nào, chúng tôi có thể thử và đoán xem phản ứng của phòng đó đang sử dụng bộ lọc thích ứng. Sau đó, chúng ta có thể sử dụng ước tính đó, kết hợp tất cả các tín hiệu đến với đáp ứng xung đó (sẽ cho chúng ta ước tính tín hiệu dội lại) và trừ nó khỏi tín hiệu đi vào micrô của người bạn gọi. Biểu đồ dưới đây cho thấy một bộ khử tiếng vang thích ứng.

nhập mô tả hình ảnh ở đây

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

wn

xn=(x[n],x[n1],,x[nN+1])T

Nwnx

wn=(w[0],w[1],,x[N1])T

y[n]=xn=wn :

y[n]=xnTwn=xnwn

w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwnd[n]xnTxn

μ0μ2

Ứng dụng và thách thức trong cuộc sống thực

Một số điều có thể gặp khó khăn với phương pháp khử tiếng vang này. Trước hết, như đã đề cập trước đây, không phải lúc nào người kia cũng im lặng trong khi họ nhận được tín hiệu hello hello của bạn. Nó có thể được hiển thị (nhưng nằm ngoài phạm vi của câu trả lời này) rằng trong một số trường hợp, vẫn có thể hữu ích để ước tính đáp ứng xung trong khi có một lượng đáng kể đầu vào ở đầu dây bên kia vì tín hiệu đầu vào và tiếng vang là được giả định là độc lập thống kê; do đó, giảm thiểu lỗi vẫn sẽ là một thủ tục hợp lệ. Nói chung, cần có một hệ thống tinh vi hơn để phát hiện các khoảng thời gian tốt để ước tính tiếng vang.

Mặt khác, hãy nghĩ về những gì xảy ra khi bạn đang cố ước tính tiếng vang khi tín hiệu nhận được gần như im lặng (thực tế là nhiễu). Khi không có tín hiệu đầu vào có ý nghĩa, thuật toán thích ứng sẽ phân kỳ và nhanh chóng bắt đầu tạo ra kết quả vô nghĩa, cuối cùng đạt đến đỉnh điểm trong một tiếng vang ngẫu nhiên. Điều này có nghĩa là chúng ta cũng cần xem xét phát hiện lời nói . Bộ khử tiếng vang hiện đại trông giống như hình dưới đây, nhưng mô tả ở trên là ý chính của nó.

nhập mô tả hình ảnh ở đây

Có rất nhiều tài liệu về cả bộ lọc thích ứng và loại bỏ tiếng vang ngoài kia, cũng như một số thư viện nguồn mở mà bạn có thể khai thác.


2
"Công việc của bộ lọc thích ứng là tín hiệu"? Bạn vô tình một từ.
endolith

@endolith Cảm ơn. Tôi không thể nghĩ ra một cách hay để sửa nó, vì vậy tôi đã sử dụng thay đổi . Bạn được chào đón để chỉnh sửa nó với một cái gì đó thú vị hơn. =)
Phonon

3

Tôi không chắc chắn làm thế nào để xác định độ trễ là gì với một số loại hiệu chuẩn trước

Tôi sẽ bắt đầu bằng cách sửa đổi một thuật toán vân tay âm thanh, chẳng hạn như thuật toán được sử dụng bởi Shazam .

Yêu cầu của bạn tương tự như của Shazam theo nhiều cách (các tính năng phải tồn tại thuật toán nén được thiết kế cho điện thoại, chúng cũng chuyển qua micrô chất lượng thấp) để bạn có thể sử dụng các tính năng tương tự (tối đa năng lượng cục bộ trong không gian thời gian / tần số) bạn có thể muốn tăng độ phân giải thời gian với chi phí phân giải tần số.

Ngoài ra còn có vấn đề bao nhiêu để thu nhỏ tín hiệu bằng cách trừ đi.

Quy mô thống nhất gần như chắc chắn sẽ không đủ chính xác. Bạn sẽ cần phải làm một cái gì đó như xấp xỉ đáp ứng tần số với bộ lọc FIR sau đó truyền tín hiệu mic (trễ) của bạn qua bộ lọc đảo ngược trước khi trừ nó khỏi tín hiệu nhận được.


Dấu vân tay Shazam không thể tạo ra xấp xỉ độ trễ chính xác. Nó sử dụng nhiều quy trình trích xuất tính năng phức tạp để so sánh các mẫu âm thanh, không phải tất cả đều dựa trên thời gian.
Phonon

@Phonon, Shazam có thể đang sử dụng các thuật toán bổ sung ngay bây giờ, nhưng thuật toán trong bài viết được liên kết là dựa trên thời gian và đưa ra ước tính tốt về độ trễ.
vây

Có lẽ một cái gì đó như tương quan chéo của các phổ đã gửi và nhận sẽ cho bạn biết độ trễ. Phải chống lại tác động của việc lọc và thêm tiếng ồn
endolith
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.