Tôi đang cố gắng viết một thuật toán sẽ tự động phân đoạn một đoạn âm thanh với các bản ghi âm cuộc gọi chim. Dữ liệu đầu vào của tôi là các tệp sóng dài 1 phút và trên đầu ra tôi muốn nhận các cuộc gọi riêng để phân tích thêm. Vấn đề là tỷ lệ tín hiệu trên tạp âm khá khủng khiếp do điều kiện môi trường và chất lượng kém của micrô (lấy mẫu đơn âm, 8 kHz).
Tôi sẽ rất biết ơn về bất kỳ lời khuyên nào về cách tiến hành giảm tiếng ồn.
Dưới đây là một ví dụ về đầu vào của tôi, ghi âm một phút ở định dạng sóng: http://goo.gl/16fG8P
Đây là cách tín hiệu trông như thế nào:
Lọc băng thông, trong đó tôi chỉ giữ bất cứ thứ gì trong khoảng 1500 - 2500 Hz, sẽ cải thiện tình hình, nhưng vẫn không như mong đợi. Trong phổ này vẫn còn rất nhiều tiếng ồn.
Tôi cũng đã vẽ năng lượng trung bình dài hạn (trên 32 mẫu) và loại bỏ một số nhấp chuột từ nó. Đây là kết quả:
Với tất cả các tạp âm còn lại, tôi phải đặt ngưỡng rất thấp cho thuật toán phát hiện khởi phát để chọn 10 giây gọi chim cuối cùng. Vấn đề là nếu tôi điều chỉnh nó theo cách như vậy thì trong lần ghi tiếp theo tôi có thể tải được các kết quả dương tính giả.
Di chuyển bộ lọc trung bình giúp một chút với tiếng ồn gió. Còn ý tưởng nào khác không? Tôi đã nghĩ đến "Phép trừ phổ", nhưng ở đây dường như tôi gặp vấn đề về gà và trứng - để tìm khu vực chỉ có tiếng ồn, tôi phải phân đoạn âm thanh và phân đoạn âm thanh tôi cần để loại bỏ tiếng ồn. Bạn có biết bất kỳ thư viện nào có thuật toán này hoặc một số triển khai trong mã giả không? Methinks Audacity sử dụng phương pháp như vậy để loại bỏ tiếng ồn. Nó rất hiệu quả, nhưng nó được để lại cho người dùng để đánh dấu khu vực chỉ có tiếng ồn.
Tôi đang viết bằng Python và nó là một dự án nguồn mở miễn phí.
Cảm ơn vì đã đọc!