Nhìn vào ảnh chụp màn hình của tệp âm thanh nguồn, một cách đơn giản để phát hiện thay đổi ở mức âm thanh là thực hiện numerical integration của mẫu để tìm ra "năng lượng" của sóng tại một thời điểm cụ thể.
Một thuật toán thô sẽ là:
- Divide các mẫu thành các đoạn
- Tính năng lượng của từng bộ phận
- Hãy tỷ lệ các nguồn năng lượng giữa các cửa sổ trước và cửa sổ hiện hành
- Nếu tỷ lệ vượt quá ngưỡng nào đó, hãy xác định rằng có tiếng ồn lớn bất ngờ.
Mã giả
samples = load_audio_samples() // Array containing audio samples
WINDOW_SIZE = 1000 // Sample window of 1000 samples (example)
for (i = 0; i < samples.length; i += WINDOW_SIZE):
// Perform a numerical integration of the current window using simple
// addition of current sample to a sum.
for (j = 0; j < WINDOW_SIZE; j++):
energy += samples[i+j]
// Take ratio of energies of last window and current window, and see
// if there is a big difference in the energies. If so, there is a
// sudden loud noise.
if (energy/last_energy > THRESHOLD):
sudden_sound_detected()
last_energy = energy
energy = 0;
tôi nên thêm một từ chối trách nhiệm mà tôi đã không cố gắng này.
Cách này có thể thực hiện được mà không cần phải ghi mẫu trước. Miễn là có bộ đệm của một số chiều dài (WINDOW_SIZE
trong ví dụ), một tích hợp số có thể được thực hiện để tính toán năng lượng của phần âm thanh. Tuy nhiên, điều này có nghĩa là sẽ có sự chậm trễ trong quá trình xử lý, phụ thuộc vào độ dài của WINDOW_SIZE
. Việc xác định chiều dài tốt cho một phần âm thanh là một mối quan tâm khác.
Làm thế nào để chia thành nhiều phần
Trong tập tin âm thanh đầu tiên, dường như trong suốt thời gian âm thanh của đóng cửa là 0,25 giây, vì vậy cửa sổ sử dụng để tổng hợp số có lẽ nên được nhiều nhất là nửa trong số đó, hoặc thậm chí nhiều hơn như một phần mười, do đó, sự khác biệt giữa sự im lặng và âm thanh đột ngột có thể được nhận thấy, ngay cả khi cửa sổ đang chồng chéo giữa phần im lặng và phần tiếng ồn.
Ví dụ, nếu cửa sổ tích hợp là 0,5 giây và cửa sổ đầu tiên che mất 0,25 giây im lặng và 0,25 giây đóng cửa và cửa sổ thứ hai bao phủ 0,25 giây đóng cửa và 0,25 giây im lặng, có thể xuất hiện hai phần âm thanh có cùng mức độ nhiễu, do đó, không kích hoạt phát hiện âm thanh. Tôi tưởng tượng có một cửa sổ ngắn sẽ làm giảm bớt vấn đề này một chút.
Tuy nhiên, việc có cửa sổ quá ngắn sẽ có nghĩa là sự gia tăng âm thanh có thể không hoàn toàn khớp vào một cửa sổ và có thể xuất hiện ít năng lượng giữa các phần lân cận. để bỏ lỡ.
Tôi tin rằng WINDOW_SIZE
và THRESHOLD
đều sẽ phải được xác định theo kinh nghiệm cho âm thanh sẽ được phát hiện.
Để xác định số lượng mẫu mà thuật toán này sẽ cần giữ trong bộ nhớ, giả sử, WINDOW_SIZE
là 1/10 âm thanh đóng cửa, khoảng 0,025 giây. Ở tốc độ lấy mẫu 4 kHz, đó là 100 mẫu. Điều đó dường như không quá nhiều yêu cầu về bộ nhớ. Sử dụng các mẫu 16 bit 200 byte.
Ưu/Nhược điểm
Ưu điểm của phương pháp này là xử lý có thể được thực hiện với số học số nguyên đơn giản nếu âm thanh nguồn được đưa vào như số nguyên. Bắt được, như đã đề cập, xử lý thời gian thực sẽ có độ trễ, tùy thuộc vào kích thước của phần được tích hợp.
Có một vài vấn đề mà tôi có thể nghĩ đến phương pháp này:
- Nếu tiếng ồn xung quanh là quá lớn, sự khác biệt về năng lượng giữa các tiếng ồn xung quanh và đóng cửa sẽ không thể dễ dàng phân biệt và có thể không phát hiện được cửa đóng.
- Bất kỳ tiếng ồn đột ngột nào, chẳng hạn như tiếng vỗ tay, có thể được coi là cánh cửa đóng.
Có lẽ, kết hợp các đề xuất trong các câu trả lời khác, chẳng hạn như cố gắng phân tích chữ ký tần số đóng cửa bằng phân tích Fourier, yêu cầu xử lý nhiều hơn nhưng sẽ ít bị lỗi hơn.
Có thể sẽ mất một số thử nghiệm trước khi tìm cách giải quyết vấn đề này.
Công cụ gia tốc có phải là tùy chọn không? – ccook
Tôi bao gồm gia tốc kế ba trục trên bảng. Ngẫu nhiên, nó cũng bao gồm một cảm biến áp suất, cảm biến ánh sáng, phát hiện chuyển đổi cửa, GPS, và máy ảnh. Trong khi các tùy chọn này có sẵn, lý tưởng là thiết kế sẽ chỉ yêu cầu micrô cho cảm biến đóng cửa. –
chỉ là một suy nghĩ ngẫu nhiên - nếu nó gần như luôn luôn clip khi nó đóng cửa - tại sao không chỉ phát hiện cho clip? – aronchick