2009-01-07 35 views
6

Tôi đang cố gắng tìm một thuật toán để phát hiện khi người dùng thổi vào micrô (như Ninentdo DS hoặc iPhone) trên thiết bị WM6 có C#. Tôi đã suy nghĩ để sử dụng dạng sóng để đọc từ mic trong thời gian thực thành một bộ đệm nhỏ, nhưng tôi là một chút bị mất về cách nhận ra âm thanh thổi, tôi đoán nó có vẻ như tiếng ồn trắng. Bất cứ ai cũng có một ý tưởng về làm thế nào để làm điều đó?Làm thế nào để giám sát micrô cho âm thanh tiếng ồn?

Mọi trợ giúp sẽ được đánh giá cao.

+0

"âm thanh tiếng ồn" .. có vẻ như một cặp đôi khó xử. – mmcdole

+0

Bạn có quan tâm rằng âm thanh thổi và không chỉ là tiếng ồn lớn? Vấn đề trở nên dễ dàng hơn nhiều nếu bạn không thực sự quan tâm âm thanh là gì. –

Trả lời

4

Nếu tôi giải quyết vấn đề, tôi sẽ thổi vào micrô và record that. Sau đó, chạy an FFT trên dữ liệu sóng để có tần suất chi phối (hoặc một vài). Tôi sẽ làm điều đó cho một số "thổi" để xem họ có tạo ra kết quả tương tự hay không. Nếu họ làm (và tôi khá chắc chắn họ sẽ) sau đó tôi muốn sử dụng một thuật toán để tìm kiếm cùng một tần số.

Nó không phải là một nhiệm vụ tầm thường, nhưng vì rất nhiều công việc ghi âm và toán được thực hiện, bạn có thể làm cho nó hoạt động mà không có quá nhiều đau đớn.

+0

Tôi không biết OpenNetCF có chức năng FFT. Tuyệt đấy. – MusiGenesis

+0

Trong thực tế, chúng tôi có 2 cách triển khai khác nhau mà tôi đã làm trước đây (có thể xuất hiện trong phiên bản 1.2 hoặc hơn). – ctacke

+0

tôi nghĩ rằng "tiếng ồn" (ít nhất là tiếng ồn trắng, đó là những gì thổi vào một mic nên sản xuất) theo định nghĩa là một hỗn hợp của tất cả các tần số; tần số chiếm ưu thế sẽ ngụ ý độ cao, điều này sẽ làm cho âm thanh "không ồn" –

1

Đây không phải là giống hệt nhau, nhưng đây là câu trả lời của tôi cho một câu hỏi về phát hiện nốt bắt đầu:

Note onset detection

Câu trả lời mô tả một cách tiếp cận dựa vào sức mạnh đang lên của tín hiệu trên một ngưỡng cho trước . Cách tiếp cận này sẽ làm việc để phát hiện một tiếng ồn thổi, mặc dù nó cũng sẽ đáp ứng với bất kỳ tiếng ồn ở tất cả, vì vậy nói chuyện vv cũng sẽ kích hoạt nó.

Bạn có thể sử dụng FFT, nhưng tôi nghĩ điều này sẽ quá chậm để sử dụng trong thời gian thực, đặc biệt là trên thiết bị Windows Mobile (mặc dù có thể đủ nhanh). Tuy nhiên, tiếng ồn thổi không thể có một tần số thống trị, trừ khi quạt gió đang huýt sáo một ghi chú cụ thể. Nếu FFT đủ nhanh, bạn có thể thực sự muốn tìm tiếng ồn không có tần số thống trị (bạn có thể giả định rằng bất kỳ thứ gì có tần suất hoặc tần số chiếm ưu thế là lời nói hoặc một công cụ nào đó) và có trọng số cao hướng tới phần trên của dải âm thanh (trên 10.000Hz hoặc hơn).

+0

Tôi sẽ lấy từ của bạn cho nó trên tần số chiếm ưu thế. Công việc FFT của tôi đã được phân tích địa chấn. Những gì tôi biết có dạng sóng tìm kiếm rõ ràng "ồn ào" thường sẽ hiển thị một vài gai chi phối do tần số tự nhiên. Tôi giả định (có thể sai) bạn thấy tương tự trong tiếng ồn trắng. – ctacke

+0

Tôi nghĩ rằng nhiễu trắng trên mỗi màn hình cho thấy cường độ giống nhau ở tất cả các tần số (mặc dù đó có thể là tiếng ồn hồng - nó trễ và tôi quá mệt mỏi với google). Tuy nhiên, tôi không nghĩ một đòn sẽ thực sự là tiếng ồn trắng. – MusiGenesis

3

Một cú đánh trong micrô sẽ không nhất thiết phải hiển thị tần số chi phối trong phạm vi cao (10,00 Hz +). Thổi trong một microphone máy tính sẽ rất có thể gây ra tín hiệu thống kê và biến dạng, trong đó có rất nhiều tần số tầm thấp là tốt. Tín hiệu thu được sẽ đơn giản là một sự bão hòa lớn.

Tôi đã phải thực hiện một dự án tương tự vài năm trước và những gì tôi đã làm chỉ đơn giản là tìm các đỉnh âm lượng cao hơn mức nói bình thường. Làm việc tốt.

+0

Điều 10.000 hz là một dự đoán tổng số - tôi chưa bao giờ thực sự nhìn vào một bản ghi của một cú đánh. Đề cập đến sự biến dạng của bạn đã cho tôi một ý tưởng cho một câu trả lời khác. – MusiGenesis

3

Câu trả lời của sthg đề cập đến sự biến dạng là kết quả có thể xảy ra khi thổi vào micrô. Tôi đã thực hiện một bài kiểm tra nhanh và ghi âm của tôi về thổi (trên một chiếc micro giá rẻ) hiển thị một số lượng lớn các mẫu ở các giá trị tối thiểu và tối đa (ví dụ: 32767 và -32768 trên tệp WAV 16 bit) trông giống như một đầu phẳng đã được áp dụng cho mỗi đỉnh núi. Một cách rất đơn giản để phát hiện âm thanh thổi có thể chỉ là đếm tất cả các mẫu có giá trị tối thiểu/tối đa và nếu chúng đại diện cho hơn 5% tổng số (hoặc một số ngưỡng khác) giả định rằng hiện tượng thổi xảy ra.

+0

Đơn giản, hiệu quả, nhanh chóng ... Tôi nghĩ rằng đây là cách tôi muốn đi (mặc dù nó không gần như vui vẻ như một FFT lăn). – ctacke

+0

Cảm ơn. Tôi đã hy vọng ai đó sẽ nhận được sự hài hước trong cụm từ "giả sử rằng thổi đang xảy ra". :) – MusiGenesis

1

Tôi chưa xem xét quang phổ của điều này, nhưng tôi nghĩ bạn sẽ thấy phổ nhiễu giới hạn băng tần với hầu hết năng lượng dưới vài trăm Hz. Điều này có nghĩa là bạn không cần một FFT băng thông âm thanh đầy đủ, và 16K điểm là quá mức cần thiết. Ngay cả trên một FFT 256 điểm trên một băng thông nhỏ, bạn sẽ có thể cho biết tiếng ồn từ thổi trong micro ngoài lời nói.

Các vấn đề liên quan