Giảm trừ một luồng âm thanh từ một luồng âm thanh khác


8

Tôi là một kỹ sư phần mềm lâu năm nhưng thực tế không có kinh nghiệm xử lý tín hiệu / âm thanh. Tôi quan tâm đến việc tìm hiểu về xử lý tín hiệu thông qua trường hợp sử dụng mà chúng tôi có cho một trong các thành phần âm thanh của mình. LƯU Ý: đây chỉ là một bài tập học tập đối với tôi ... nó không phải là ưu tiên mà kết quả cuối cùng có ích.

Chúng tôi có một thành phần (A) tạo ra âm thanh (thông qua loa). Chúng tôi có một thành phần khác (B) ghi lại âm thanh đó (thông qua một micrô đơn giản).

Những gì tôi muốn làm là sử dụng A để ghi lại âm thanh của B. Sau đó, tôi muốn, nếu thậm chí có thể, so sánh hai luồng. Mục tiêu sẽ là loại bỏ âm thanh có trong luồng A - để lại các điều kiện môi trường tồn tại trong quá trình ghi - tôi hiểu việc loại bỏ hoàn toàn là không thể.

Tôi nhận ra rằng có những vấn đề về pha và cường độ. Tôi cũng nhận ra rằng đó không chỉ là vấn đề đơn giản của việc "trừ" B khỏi A. Điều đó nói rằng, giả định của tôi là bạn có thể trừ A khỏi A.

Tôi muốn hiểu làm thế nào để tiếp cận vấn đề. Một lần nữa, đây là một kinh nghiệm học tập đối với tôi (không có thời hạn); Tôi sẵn sàng bắt đầu lại từ đầu.

Bất kỳ lời khuyên / đề nghị sẽ được nhiều đánh giá cao.

Câu trả lời:


5

Thiết lập này chia sẻ một số điểm tương đồng với các vấn đề nhận dạng hệ thống, trong đó A sẽ là đầu vào của hệ thống LTI mà bạn muốn ước tính hàm truyền của, Blà đầu ra; và "âm thanh xung quanh" là tiếng ồn phụ gia. Giả định LTI là hợp lý với điều kiện bộ chuyển đổi / bộ khuếch đại / bộ chuyển đổi của bạn có chất lượng khá.

Vì vậy, các bước sẽ là:

  • Sử dụng kỹ thuật nhận dạng hệ thống để tìm bộ lọc FIR h^ làm giảm thiểu lỗi bình phương trung bình giữa h^AB. Một phương pháp đơn giản, có thể không phù hợp nhất ở đây, là phân chia mối tương quan chéo củaAB bởi sự tự tương quan của A. Giải thích tại đây . Hạn chế là nó sẽ không hoạt động tốt đối với các bản ghi dài (bạn có thể tính toán tốt hơn các ước tính của mình trên các phân đoạn ngắn hơn và trung bình chúng) - và âm nhạc không phải là tín hiệu "thăm dò" tốt nhất để gửi vào hệ thống để ước tính phản hồi của nó.
  • Bây giờ bạn có thể sử dụng h^A như một ước tính của tín hiệu gốc A là "nghe" bởi micrô và trừ nó khỏi B để lấy âm thanh xung quanh.

Tôi đã chụp ảnh này bằng clip nhạc (A), áp dụng mô hình hồi âm và amp nhẹ để mô phỏng loa trong phòng, sau đó trộn vào mẫu âm thanh mèo để lấy (B), sau đó ước tính đáp ứng xung từ ( Cặp A, B), sau đó trừ A được lọc khỏi B. Điều này cho thấy một số kết quả nhưng kỹ thuật ước lượng FIR tốt hơn có thể giúp ích ở đây! (lưu ý rằng tôi đã cắt IR ước tính thành 5000 mẫu đầu tiên để tăng tốc tính toán).

Lưu ý rằng có các thuật toán để thực hiện việc này một cách thích ứng (như LMS ). Điều này có thể phù hợp hơn cho vấn đề của bạn nếuABđược xử lý trong thời gian thực chứ không phải ngoại tuyến. Các thuật toán như vậy tạo thành cơ sở của các hệ thống khử tiếng vang được sử dụng trong viễn thông.


Cảm ơn bạn rất nhiều @pinchenettes! C_cat_estimated.wav của bạn chính xác là loại kết quả tôi đang cố gắng đạt được. Có cách nào bạn có thể cho tôi biết bạn đã làm như thế nào (phần mềm được sử dụng, v.v.) không? Xin vui lòng liên hệ trực tiếp với tôi: catxtwo @ gmail
CaymanEss

Tôi đã sử dụng Audacity và các đơn vị âm thanh tiêu chuẩn của Apple để xử lý âm thanh gốc và có được hiệu ứng "phòng". Mẫu mèo đã được trộn lẫn trong táo bạo. Phần còn lại của mã là bằng python + numpy: gist.github.com/pichenettes/5434412 . Đây là "điều đơn giản nhất có thể có thể hoạt động" - cốt lõi của thuật toán chỉ có 6 dòng mã.
pichenettes

Một lần nữa, cảm ơn bạn rất nhiều @pinchenettes. Điều này sẽ giúp tôi đi. Cuối cùng tôi sẽ muốn làm điều này trong thời gian thực - bạn có tin rằng sử dụng LMS vẫn khả thi không?
CaymanEss

Nếu bạn biết rằng đáp ứng xung của bạn sẽ không thay đổi, bạn có thể tính toán nó bằng thuật toán chậm trong những giây đầu tiên và sau đó tiếp tục sử dụng nó. Mặt khác (loa đang di chuyển, môi trường đang thay đổi ...) bạn sẽ cần một thuật toán thích ứng. Lưu ý rằng có thể bạn sẽ phải đối phó với tích chập với các phản hồi xung dài nếu bạn muốn tạo mô hình phòng -> Kiểm tra điều này để biết các kỹ thuật dsp.stackexchange.com/questions/8771/ . Tôi không biết các phương pháp lọc thích ứng được tối ưu hóa cho các phản hồi FIR rất dài.
pichenettes

Các tín hiệu cần phải có cùng độ dài, số lượng kênh và tốc độ mẫu.
pichenettes

1

Vấn đề không cho phép âm thanh xung quanh chính xác là đầu ra là:

(a) độ lệch pha (b) độ lệch pha do thời gian trễ.

Do đó, tổng thể tín hiệu được ghi bởi B sẽ là (giả sử phòng hoạt động như một hệ thống LTI) yB[n]=k=0pαkxA[nk]+xamb[n])=(xh)[n]+xamb[n], Ở đâu h[n]=αnhoặc vì vậy phòng đáp ứng xung. Đâyxamb[n]là tín hiệu xung quanh tại vị trí của B. Hiện nay,z[n]=xA[n]yB[n] bạn có thể thấy rằng bạn sẽ có z[n]xamb[n], trừ khi bạn biết đáp ứng xung của phòng hoặc ước tính của nó. Để có được cái nhìn sâu sắc, bạn có thể đi tiếp bằng cách thực hiện phép trừ và xem phổ của tín hiệu kết quả và so sánh với phổ tín hiệu xung quanh và chỉ phổ của tín hiệu A.

Một cách khác là đặt mic gần A để giảm thiểu ảnh hưởng của phản ứng xung trong phòng, một kỹ thuật như vậy được sử dụng trong tai nghe khử tiếng ồn trong đó loại bỏ tiếng ồn xung quanh. http://en.wikipedia.org/wiki/Naty-cancelling_headphonese .


Cảm ơn bạn rất nhiều @Neek. Có một tên cho phương trình yB [n] (thuật toán) không? Một lần nữa, tôi hoàn toàn mới đối với dsp do đó sẽ có ích cho tôi khi có thể đọc các thuật toán / khái niệm cụ thể.
CaymanEss

1
Nó được gọi là hủy đăng ký lời nói và âm thanh. Nó tương tự như một vấn đề khử tích chập khi bạn cho rằng hoạt động dội lại là do hệ thống LTI, nóh(t)là một hệ thống LTI.
Neek

1

Nghe có vẻ giống như một trường hợp tiêu chuẩn cho "loại bỏ tiếng vang âm thanh". Rất nhiều bằng sáng chế, tài liệu nghiên cứu và luận văn học thuật tồn tại trong chủ đề này (bắt đầu từ năm 1967, tôi tin với bài báo của MM Sondhi "Một âm thanh Echo Cancellor thích ứng").

Một cái nhìn tổng quan đơn giản có ở đây http://supportdocs.polycom.com/PolycomService/support/global/document/support/technical/products/voice/vortex_choose_acoust_echo_canceller.pdf .

Đây là một cuốn sách hay về chủ đề này http://www.amazon.com/Advances-Network-Acoust-Cancname-Processing/dp33540417214


Cảm ơn bạn @Hilmar. Theo khuyến nghị của bạn, tôi đã đọc tổng quan về khử tiếng vang và một số giấy tờ về khử tiếng ồn. Có phải tôi đã sai khi nghĩ rằng hủy bỏ là trái ngược với những gì tôi muốn? Một lần nữa, mục tiêu của tôi là thu được tiếng ồn xung quanh, chứ không phải là phiên bản được làm sạch của tín hiệu gốc.
CaymanEss
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.