Không thể tách tín hiệu âm thanh bằng FastICA khi ghi trong thế giới thực


12

Tôi đã viết một chương trình để thực hiện FastICA trên tệp WAV âm thanh nổi bằng cách sử dụng mã trên Python MDP FastICA Ví dụ

Với các ví dụ âm thanh tôi nhận được kết quả rất tốt.

Sau đó, tôi cố gắng thực hiện ghi âm trong thế giới thực bằng cách sử dụng hai micrô mono máy tính được kết nối với mic âm thanh nổi trong máy tính của mình bằng cách kết nối mic 1 với kênh L và mic 2 với kênh R. Tôi kiểm tra bằng cách phát một số nhạc ở chế độ nền trong khi tôi đang nói chuyện trong một căn phòng yên tĩnh.

Tuy nhiên, chạy FastICA hoàn toàn không tách rời các tín hiệu. Có thể là chất lượng của micro quá kém? Tôi có cần phải làm bất cứ điều gì với tệp WAV đã ghi (16 bit, PCM đã ký, 44100Hz) trước khi chạy FastICA không?

Bạn có thể tải về bản ghi âm ở đây .

Câu trả lời:


11

ICA ở dạng thô chỉ thích hợp để sử dụng với các hỗn hợp quan sát đồng bộ pha. Sử dụng micrô như bạn đã mô tả sẽ giới thiệu độ trễ pha như được chỉ ra bởi các áp phích khác. Tuy nhiên, độ trễ pha này có thể được sử dụng rất tốt. Thuật toán được biết đến nhiều nhất liên quan đến phân tách âm thanh nổi khi có sự chậm trễ là DUET. Các liên kết bị hỏng nhưng các tài liệu tham khảo bạn đang tìm kiếm ở đây> http://eleceng.ucd.ie/~srickard/bss.html.

Đây là bài báo bạn nên tìm>
A. Jourjine, S. Rickard và O. Yilmaz, Tách mù các tín hiệu trực giao khác nhau: Tách nguồn N từ 2 hỗn hợp, Hội nghị về âm thanh, lời nói và xử lý tín hiệu (ICASSP2000), Tập 5, trang 2985-2988, Istanbul, Thổ Nhĩ Kỳ, tháng 6 năm 2000


2
Một câu hỏi - nếu hỗn hợp đến từ nhiều hơn một mic không gian riêng ... thì làm sao chúng ta có thể đã từng có giai đoạn đồng bộ ... Trong tất cả các văn bản tôi thấy ví dụ này nhiều mics được sử dụng ở khắp nơi, nhưng nếu đồng bộ giai đoạn? là một vấn đề như vậy tại sao nó không được đề cập? Tôi chỉ cố gắng để hiểu ở đây, tôi mới đến cảnh ICA.
Spacey

@Mohammad: Tôi nghi ngờ tính đồng bộ pha có trong các ứng dụng khác và họ chỉ sử dụng các ứng dụng âm thanh để làm cho nó trở nên quen thuộc hơn với độc giả.
endolith

1
@Mohammad có thể với các micrô cách nhau để có tính đồng bộ pha cho một nguồn. Hãy tưởng tượng một nguồn được chụp với 2 micrô được đặt cách đều nhau ở hai bên của nguồn. Độ dài đường dẫn từ nguồn tới micrô là như nhau trong từng trường hợp và tín hiệu sẽ được nhận trong một pha ở cả hai micrô, nhưng chỉ đối với nguồn đó. Bạn có thể thêm nhiều mics tương đương dọc theo các kích thước không gian khác nhau để tiếp tục loại bỏ các tín hiệu không mong muốn. Một số kỹ thuật phân tích EEG tận dụng điều này. Bạn cũng nên lưu ý rằng độ trễ pha giữa mỗi mic sẽ là một hàm tần số (do bước sóng)
Dan Barry

@DanBarry Cảm ơn Dan - điểm thú vị về điện não đồ. Hãy để tôi làm rõ - tất nhiên tôi biết rõ rằng nếu các cảm biến tương đương từ một nguồn chúng ta sẽ có cùng độ trễ ... :-) Điều tôi đã cố gắng nhận được là cho các ứng dụng mà những thứ đó không thể kiểm soát được, (loa trong một phòng có một số cảm biến), ICA được cho là hoạt động trong những trường hợp như vậy - nhưng 99% chúng ta sẽ không có tính đồng bộ pha - nếu nó được quảng cáo là thuật toán làm việc trong trường hợp này - nhưng vẫn nhạy cảm với các vấn đề về pha đó - Điều gì còn thiếu ở đây? ... Cảm ơn!
Spacey

1
@endolith vâng, đó là một giải pháp tốt và nó hoạt động! Tôi cũng đã nghĩ đến một giải pháp tương tự vào năm 2003 và đã thất vọng khi tìm thấy một cái gì đó tương tự nhưng tôi đã đủ khác biệt để tôi quản lý bằng sáng chế. Tôi may mắn có thể là người đầu tiên phát triển thuật toán phân tách nguồn thời gian thực vào năm 2004. Bản trình diễn gốc ở đây> audioresearchgroup.com/main.php?page=Demos và có thể thấy một thuật toán cải tiến mới trong bản demo video đây> riffstation.com
Dan Barry

6

Khi tôi nói tiếp xuống trang:

hóa ra ICA không thực sự hoạt động tốt khi các tín hiệu xảy ra ở các độ trễ khác nhau trong các kênh cảm biến khác nhau; nó giả định trộn lẫn tức thời (rằng các tín hiệu đồng bộ hoàn hảo với nhau trong tất cả các bản ghi khác nhau). Độ trễ sẽ xảy ra trong tình huống thực tế với người biểu diễn và micrô, vì mỗi nguồn là một khoảng cách khác nhau với mỗi micrô.

Tôi đoán rằng sự chậm trễ này giữa các kênh là lý do. Nếu bạn nhìn kỹ vào hai sóng, có thể bạn sẽ thấy rằng một số âm thanh xuất hiện sớm hơn ở một kênh so với kênh kia và ngược lại.

Để chứng minh rằng đó không phải là chất lượng của micrô, bạn có thể thử ghi hai tín hiệu khác nhau bằng một micrô vào các thời điểm khác nhau và sau đó trộn chúng lại với nhau để một số tín hiệu nằm trong mỗi kênh và xem ICA có hoạt động trong trường hợp đó không .


Tôi đã thử. Đó là một vấn đề chậm trễ như bạn đề xuất. Bằng cách trộn các bản ghi riêng biệt, FastICA tạo ra kết quả gần như hoàn hảo. Tôi cần tìm một số cách để đối phó với sự chậm trễ ....
Jeremy

@Jeremy: Tôi nghĩ bạn sẽ cần một thuật toán khác.
endolith

Bạn có biết bất kỳ bss algo có thể đối phó với sự chậm trễ?
Jeremy

thực sự khi tôi ghi âm và vỗ tay để tạo ra tiếng ồn lớn, tôi không thể nhận thấy bất kỳ sự chậm trễ nào trong độ táo bạo.
Jeremy

1
@endolith Bạn có thể đúng - một số thông tin mới - Tôi đã kiểm tra các chú thích và rõ ràng tác giả của cuốn sách của tôi nói rằng anh ta giả định rằng tất cả các tín hiệu không bị trễ so với nhau. : - / Nói cách khác, ma trận trộn chỉ đơn giản là một ma trận thay đổi biên độ. Hở. Bây giờ nó thậm chí còn khó hiểu hơn. :-)
Spacey

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.