2009-01-31 36 views
39

Không giống như một máy dò clap ("Clap trên! clap clap Clap tắt! clap clap Clap trên, vỗ tắt, lươi! clap clap ") Tôi cần phát hiện khi nào cánh cửa đóng lại. Đây là trong một chiếc xe, đó là dễ dàng hơn một căn phòng hoặc hộ gia đình cửa:Cho một dòng âm thanh, tìm thấy khi một đóng sầm cửa (tính toán mức độ áp lực âm thanh?)

Nghe: http://ubasics.com/so/van_driver_door_closing.wav

Look:
image of waveform shows steady line, then sudden disruption, settling down to steady line

Đó là lấy mẫu tại 16bits 4kHz, và tôi muốn tránh nhiều xử lý hoặc lưu trữ mẫu.

Khi bạn nhìn vào nó trong gan hoặc một công cụ dạng sóng nó khá đặc biệt, và hầu như luôn luôn clip do sự gia tăng áp lực âm thanh trong xe - ngay cả khi các cửa sổ và cửa ra vào khác đang mở:

Nghe: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Look:
alt text

tôi hy vọng có một thuật toán tương đối đơn giản mà sẽ mất đọc tại 4kHz, 8 bit, và theo dõi các 'trạng thái ổn định'. Khi thuật toán phát hiện mức tăng đáng kể về mức âm thanh, nó sẽ đánh dấu vị trí đó.

  • Suy nghĩ của bạn là gì?
  • Bạn sẽ phát hiện sự kiện này như thế nào?
  • Có ví dụ mã nào về tính toán mức áp suất âm thanh có thể giúp ích không?
  • Tôi có thể nhận được ngay với lấy mẫu ít thường xuyên

Cập nhật: Chơi với Octave (mã nguồn mở số phân tích - tương tự như Matlab) và nhìn thấy nếu gốc có nghĩa là vuông sẽ cung cấp cho (1kHz hoặc thậm chí chậm hơn?) tôi những gì tôi cần (mà kết quả trong một cái gì đó rất giống với SPL)

Update2: Đang tính toán RMS tìm thấy cánh cửa gần một cách dễ dàng trong trường hợp đơn giản:
alt textalt text
Bây giờ tôi chỉ cần nhìn vào những trường hợp khó khăn (radio, nhiệt/không khí trên cao, vv). CFAR trông thực sự thú vị - Tôi biết tôi sẽ phải sử dụng một thuật toán thích ứng, và CFAR chắc chắn phù hợp với dự luật.

-Adam

+0

Công cụ gia tốc có phải là tùy chọn không? – ccook

+0

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. –

+0

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

Trả lời

26

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à:

  1. Divide các mẫu thành các đoạn
  2. Tính năng lượng của từng bộ phận
  3. 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
  4. 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_SIZETHRESHOLD đề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:

  1. 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.
  2. 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.

+0

Tôi thực sự thích cách tiếp cận này, vì vậy tôi sẽ thực hiện nó và báo cáo kết quả của tôi trở lại đây. Thay vì có một ngưỡng cố định, tôi sẽ theo dõi năng lượng trung bình, và có một yếu tố có thể điều chỉnh (tức là, cửa sổ phải cao hơn 1,5 lần thời gian để kích hoạt). –

1

Có thể bạn nên cố gắng phát hiện sự gia tăng đáng kể áp suất không khí sẽ đánh dấu một cánh cửa đóng lại. Bạn có thể ghép nối nó với phân tích dạng sóng và âm thanh này và tất cả những điều này có thể cho bạn kết quả tốt hơn.

3

Tôi sẽ tưởng tượng rằng tần suất và biên độ cũng sẽ khác nhau đáng kể so với xe. Cách tốt nhất để xác định rằng sẽ lấy mẫu trong Civic so với một chiếc SUV lớn. Có lẽ bạn có thể có người dùng đóng cửa trong một chế độ "học" để có được biên độ và chữ ký tần số. Sau đó, bạn có thể sử dụng để so sánh khi ở chế độ sử dụng.

Bạn cũng có thể xem xét sử dụng Fourier analysis để loại bỏ tiếng ồn nền không liên quan đến đóng cửa.

8

Bạn nên nhấn vào công tắc đóng cửa trong xe. Cố gắng làm điều này với phân tích âm thanh là quá tải.

Có rất nhiều gợi ý về xử lý tín hiệu khác nhau cách tiếp cận để có, nhưng thực sự, bởi thời điểm đó bạn tìm hiểu về lý thuyết phát hiện , xây dựng một hội đồng quản trị xử lý tín hiệu nhúng, tìm hiểu những kiến ​​trúc xử lý cho chip bạn đã chọn, thử thuật toán, gỡ lỗi và sau đó điều chỉnh nó cho ô tô bạn muốn sử dụng trên (và sau đó điều chỉnh lại và gỡ lỗi lại cho mọi xe khác), bạn sẽ muốn bạn chỉ cần bấm vào một cây sậy chuyển đổi bên trong xe và làm nóng một nam châm đến cửa.

Không phải là vấn đề thú vị để giải quyết cho các chuyên gia dsp, nhưng từ cách bạn đặt câu hỏi này, rõ ràng là việc xử lý âm thanh không phải là tuyến đường bạn muốn thực hiện. Nó sẽ chỉ là một cơn ác mộng như vậy để làm cho nó hoạt động đúng.

Ngoài ra, lươi chỉ là bộ lọc thông cao được đưa vào bộ dò ngưỡng. (cộng với bộ hẹn giờ để đảm bảo 2 lần vỗ tay đủ nhanh)

+1

Trong nhiều trường hợp, đây là câu trả lời đúng. Nếu nó có thể được thực hiện mà không cần thiết bị chuyển mạch thì chúng ta có thể tránh các vấn đề cài đặt, tăng chi phí, các vấn đề trách nhiệm, và cho rằng thiết bị này có nghĩa là được sử dụng lại (không được lắp đặt vĩnh viễn) không tối ưu. Đó là một lựa chọn, mặc dù. –

+1

Trong một số trường hợp, chẳng hạn như hệ thống dây điện hoặc cửa hatchback có thể cần thiết vì âm thanh đóng không hoạt động, do đó cần phải xử lý nhiều hơn hoặc điều chỉnh tùy chỉnh (và do đó thiết lập). Một suy nghĩ khác là đặt một cảm biến ánh sáng gần một ánh sáng lịch sự - dễ cài đặt và cũng hoạt động. –

+0

Tôi có xu hướng đồng ý, nhưng điều đó không ngăn tôi đề xuất cách thực hiện thuật toán .... :) +1 –

5

Tôi sẽ bắt đầu bằng cách nhìn vào quang phổ. Tôi đã làm điều này trên hai tập tin âm thanh bạn đã cung cấp, và có vẻ là một số điểm tương đồng bạn có thể sử dụng. Ví dụ, sự khác biệt chính giữa hai dường như khoảng 40-50Hz. My .02.

CẬP NHẬT

Tôi có một ý tưởng sau khi công bố này. Nếu có thể, hãy thêm gia tốc kế vào thiết bị. Sau đó, tương quan với các tín hiệu rung và âm thanh. Điều này sẽ giúp phát hiện cửa xe chéo. Tôi nghĩ rằng nó nên được tương quan tốt kể từ khi âm thanh được điều khiển rung động, ví dụ như âm thanh stereo, không phải là. Tôi đã có một thiết bị đã có thể phát hiện vòng/phút của động cơ của tôi với một kính chắn gió gắn kết (cốc hút), do đó, độ nhạy có thể ở đó. (Tôi không hứa hẹn điều này hoạt động!)

alt text http://www.charlesrcook.com/spectral.jpg

%% Test Script (Matlab) 
clear 
hold all %keep plots open 
dt=.001 

%% Van driver door 
data = wavread('van_driver_door_closing.wav'); 

%Frequency analysis 
NFFT = 2^nextpow2(length(data)); 
Y = fft(data(:,2), NFFT)/length(data); 
freq = (1/dt)/2*linspace(0,1,NFFT/2); 
spectral = [freq' 2*abs(Y(1:NFFT/2))]; 

plot(spectral(:,1),spectral(:,2)) 

%% Repeat for van sliding door 
data = wavread('van_driverdoorclosing.wav'); 

%Frequency analysis 
NFFT = 2^nextpow2(length(data)); 
Y = fft(data(:,2), NFFT)/length(data); 
freq = (1/dt)/2*linspace(0,1,NFFT/2); 
spectral = [freq' 2*abs(Y(1:NFFT/2))]; 

plot(spectral(:,1),spectral(:,2)) 
6

Có rất nhiều tài liệu có liên quan về vấn đề này trong thế giới radar (nó được gọi là lý thuyết phát hiện).

Bạn có thể xem xét "phát hiện trung bình tế bào CFAR" (phát hiện tỷ lệ báo động không đổi). Wikipedia có một chút here. Ý tưởng của bạn rất giống với ý tưởng này, và nó sẽ hoạt động! :)

Chúc bạn may mắn!

+0

Âm thanh +1 (heh) giống như ứng dụng tốt – ccook

4

Quy trình tìm sự khác biệt đột biến trong tín hiệu âm thanh được gọi là transient detection. Các ứng dụng như Sony's AcidAbleton Live sử dụng tính năng phát hiện tạm thời để tìm các nhịp trong nhạc để thực hiện so khớp nhịp.

Mức tăng đột biến khác biệt mà bạn thấy trong dạng sóng ở trên được gọi là thoáng qua và có một số thuật toán tốt để phát hiện nó. Bài báo Transient detection and classification in energy matters mô tả 3 phương pháp để thực hiện việc này.

0

Về vấn đề lấy mẫu ít thường xuyên hơn, tần số âm thanh cao nhất có thể chụp được bằng một nửa tỷ lệ lấy mẫu. Do đó, nếu âm thanh cửa xe mạnh nhất ở 1000Hz (ví dụ) thì tốc độ lấy mẫu dưới 2000Hz sẽ làm mất âm thanh đó hoàn toàn

+0

Còn được gọi là tốc độ Nyquist - tốc độ lấy mẫu phải được thực hiện để tránh răng cưa trong một liên tục nhất định đến rời rạc chuyển đổi http://en.wikipedia.org/wiki/Nyquist_rate. –

0

Cổng tiếng ồn rất đơn giản có thể sẽ hoạt động tốt trong hoàn cảnh của bạn. Chỉ cần đợi mẫu đầu tiên có biên độ cao hơn giá trị ngưỡng được chỉ định (để tránh kích hoạt với tạp âm nền). Bạn sẽ chỉ cần phức tạp hơn điều này nếu bạn cần phân biệt giữa các loại tạp âm khác nhau (ví dụ: đóng cửa so với tiếng vỗ tay).

+0

Có, tôi đã hiển thị các trường hợp rất đơn giản tại đây. Thực tế là khắc nghiệt hơn nhiều - với radio và sưởi ấm/AC trên cao sau đó tôi nhận được kết quả hợp lý, nhưng tôi cũng nhận được một vài tích cực sai với chỉ phát hiện đỉnh RMS. –