Đây là máy dò ngáy của tôi một lần nữa.
Tôi đã khá giỏi trong việc phát hiện tín hiệu khi có bất cứ thứ gì ở đó - có thể theo dõi từ tiếng ngáy bong tróc xuống đến hơi thở mà bạn thậm chí không thể nghe thấy trong bản ghi âm. Vấn đề là, tôi không thể biết khi nào tín hiệu đã giảm xuống dưới mức có thể phát hiện được và ứng dụng chỉ là "nghe thấy". Và thật không may, ngáy / thở thường không đủ để một chế độ tự tương quan đơn giản hoặc sơ đồ thời gian tương tự không có khả năng giúp ích nhiều. (Và thực tế có khả năng trong một số trường hợp, tiếng ồn thường xuyên hơn nhịp thở.)
Vì vậy, có bất kỳ thủ thuật nào tôi thiếu để tìm ra khi không có tín hiệu? Có vẻ như tôi đang chống lại một nơi khó khăn ở đây, với "tín hiệu" rất giống tiếng ồn bắt đầu.
(Và có lẽ điều này có liên quan đến một vấn đề khác mà tôi gặp phải: Thật kỳ lạ, tôi không thể đo chính xác (hoặc thậm chí xấp xỉ) mức tín hiệu ngay cả khi khá to. Vì tôi cần phải sử dụng các đường trung bình và tỷ lệ để phát hiện tín hiệu, loại thông tin cấp độ bị mất. Tôi đang tìm kiếm một số thủ thuật để khôi phục nó.)
Kỹ thuật cơ bản
(Dành cho Yoda)
Tín hiệu âm thanh được lấy mẫu (thường là 8000Hz, vì nhiều lý do), sau đó được FFT trong 1024 khối. (Trong các thử nghiệm của tôi, các bộ lọc Hamming và các khối chồng lấp dường như không có tác dụng gì, mặc dù chúng có thể được xem xét lại sau.)
FFT được chia thành các "dải" (hiện tại là 5, có kích thước hơi lệch để đặt chi tiết hơn ở đầu thấp) và "mức chênh lệch phổ" và mức độ của từng dải được tính tổng. Trung bình dài hạn của các giá trị giới hạn cực đại được sử dụng làm "ngưỡng" và các điều chỉnh sai lệch tiếp theo được sử dụng để duy trì tỷ lệ "vượt ngưỡng" khoảng 20%.
Mỗi giá trị "vượt ngưỡng" được đặt trọng số 1 (dưới ngưỡng được đặt trọng số 0), nhưng sau đó trọng số đó được điều chỉnh bằng "độ biến thiên" rõ ràng (ở khoảng 2Hz) trong dải, để tăng thêm trọng lượng cho các dải mang tín hiệu rõ ràng hơn.
Trọng lượng của các dải được tính tổng và sau đó trọng số tổng của các khối tiếp theo được cộng lại trong khoảng một giây để tạo ra "điểm số" đang chạy. Điều này một lần nữa được so sánh với ngưỡng trung bình đang chạy (cộng với một số phương pháp phỏng đoán) để phát hiện khởi phát / bù ngáy.
Cập nhật
Tôi chợt nhận ra rằng nếu thuật toán của tôi duy trì hiệu quả tín hiệu ở mức không đổi (theo vấn đề về mức tín hiệu của tôi), cách để đo SNR hiệu quả là bằng cách đo nhiễu khi không có tín hiệu.
Thuận tiện, ngáy là không liên tục, với rất nhiều "không khí chết" ở giữa. Và tôi đã phát hiện ra phong bì ngáy. Vì vậy, bất cứ điều gì bên ngoài phong bì (giữa cuối một ngáy và bắt đầu tiếp theo) có lẽ là tiếng ồn! Điều này tôi có thể (với một số mức độ chính xác / độ lặp lại khiêm tốn). (Tất nhiên, phải mất ba lần thử với một thuật toán khá nửa chừng - thực tế không bao giờ phù hợp với lý thuyết.)
Vì vậy, tôi chưa có câu trả lời đầy đủ, nhưng tôi đã đạt được tiến bộ.
(Mặc dù kỹ thuật trên mang lại cho tôi một proxy khá tốt cho SNR, tôi vẫn gặp khó khăn trong việc ước tính mức tín hiệu thực tế. Chỉ báo "mức tương đối" của tôi có thể vượt quá mức cho một hơi thở khó nghe và vì vậy đối với một trình điều khiển cửa sổ. Tôi cần một số loại proxy cho mức tuyệt đối.)