2012-07-19 29 views
6

Trong khi tôi có nhiều câu hỏi trên trang web này xử lý khái niệm phát hiện quảng cáo chiêu hàng ... Tất cả đều đối phó với điều này huyền diệu FFT mà tôi không quen thuộc. Tôi đang cố gắng xây dựng một ứng dụng Android cần thực hiện phát hiện quảng cáo chiêu hàng. Tôi hoàn toàn không hiểu gì về các thuật toán được sử dụng để làm điều này.phát hiện tần số/cường độ cho núm vú giả

Nó không thể là rằng khó có thể? Có khoảng 8 tỷ ứng dụng chỉnh nhạc guitar trên thị trường Android sau khi tất cả.

Ai đó có thể trợ giúp?

+2

Bạn cần phải có một số hiểu biết cơ bản về biến đổi nhanh chóng để thực hiện những gì bạn đang yêu cầu. Nếu bạn đang tìm kiếm một thư viện FFT java, tôi không thể tưởng tượng nó sẽ là khó khăn để tìm một. Tôi khuyên bạn nên tìm kiếm một thư viện guitar tuner thay vì trừ khi bạn muốn tìm hiểu một số xử lý tín hiệu. FFT sẽ khó thực hiện mà không có sự hiểu biết cơ bản. – Tucker

Trả lời

3

Chuyển đổi Fourier nhanh sẽ thay đổi chức năng từ miền thời gian sang miền tần số. Vì vậy, thay vì f(t) trong đó f là tín hiệu bạn nhận được từ micrô và t là chỉ số thời gian của tín hiệu đó, bạn nhận được g(θ) trong đó g là FFT của fθ là tần số. Khi bạn có g(θ), bạn chỉ cần tìm xem θ nào có biên độ cao nhất, có nghĩa là tần số "to nhất". Đó sẽ là sân chính của âm thanh mà bạn đang chọn.

Để thực sự triển khai FFT, nếu bạn google "biến đổi nhanh chóng mã mẫu mã", bạn sẽ nhận được một loạt các ví dụ.

+1

[Ví dụ] (http://stackoverflow.com/a/2065693/230513) có thể hữu ích để thử nghiệm. – trashgod

+1

Tôi tìm thấy một loạt các mẫu tất cả cần mảng giá trị mà tôi không có ý tưởng làm thế nào để có được hoặc những gì họ có ý nghĩa. Mặc dù chúng tôi đang đến đó. Có phải [this] (http://introcs.cs.princeton.edu/java/97data/FFT.java.html) trong mã zip phải không? – brainmurphy1

+1

@ brainmurphy1 Liên kết đó trông giống như điều đúng. Bạn nhận được mảng từ đọc đầu vào từ micro. Tôi chưa bao giờ làm điều này trước đây nhưng google nói rằng bạn muốn [AudioRecord] (http://www.jarvana.com/jarvana/view/com/google/android/android/2.2.1/android-2.2.1-javadoc .jar! /android/media/AudioRecord.html) lớp học, và đây là một ví dụ: http://www.androiddevblog.net/android/android-audio-recording-part-2 –

12

FFT không thực sự là cách tốt nhất để thực hiện phát hiện quảng cáo chiêu hàng hoặc theo dõi quảng cáo chiêu hàng. Một vấn đề là tần số lớn nhất không phải lúc nào cũng là tần số cơ bản. Khác là FFT, một mình, đòi hỏi một số lượng khá lớn dữ liệu và xử lý để có được độ phân giải bạn cần phải điều chỉnh một công cụ, do đó, nó có thể xuất hiện chậm để đáp ứng (tức là độ trễ). Tuy nhiên, một vấn đề khác là kết quả của một FFT là nhất thiết trực quan để làm việc với: bạn nhận được một mảng các số phức và bạn phải biết cách giải thích chúng.

Nếu bạn thực sự muốn sử dụng một FFT, đây là một cách tiếp cận:

  1. thấp vượt qua tín hiệu của bạn. Điều này sẽ giúp ngăn ngừa tiếng ồn và độ hài cao hơn từ việc tạo ra các kết quả giả mạo. Conceivably, bạn có thể làm bỏ qua bước này và thay vào đó trọng lượng kết quả của bạn đối với các giá trị thấp hơn của FFT thay thế. Đối với một số công cụ có tần số cơ bản mạnh, điều này có thể không cần thiết.
  2. Hiển thị tín hiệu của bạn. Windows phải có kích thước nhỏ nhất 4096. Lớn hơn là tốt hơn cho một điểm vì nó mang đến cho bạn độ phân giải tần số tốt hơn. Nếu bạn đi quá lớn, nó sẽ kết thúc tăng thời gian tính toán và độ trễ của bạn. Chức năng hann là một lựa chọn tốt cho cửa sổ của bạn. http://en.wikipedia.org/wiki/Hann_function
  3. FFT tín hiệu cửa sổ thường xuyên nhất có thể. Ngay cả cửa sổ chồng chéo cũng tốt.
  4. Kết quả của FFT là số phức. Tìm độ lớn của từng số phức bằng sqrt (real^2 + imag^2). Chỉ số trong mảng FFT có độ lớn nhất là chỉ số có tần số cao nhất của bạn.
  5. Bạn có thể muốn trung bình nhiều FFT để có kết quả nhất quán hơn.

Bạn tính tần suất từ ​​chỉ mục như thế nào? Vâng, giả sử bạn có một cửa sổ có kích thước N. Sau FFT, bạn sẽ có N số phức. Nếu đỉnh của bạn là giá trị thứ n, và tốc độ lấy mẫu của bạn là 44100, thì tần số cao nhất của bạn sẽ gần (44100/2) * n/N. Tại sao lại gần? bạn cũng gặp lỗi (44100/2) * 1/N. Đối với một kích thước thùng 4096, đây là khoảng 5,3 Hz - dễ nghe ở A440. Bạn có thể cải thiện điều đó bằng cách 1. lấy pha vào tài khoản (tôi chỉ mô tả cách tính đến độ lớn), 2.sử dụng các cửa sổ lớn hơn (sẽ tăng thời gian chờ và xử lý yêu cầu như FFT là thuật toán N Đăng nhập N) hoặc 3. sử dụng thuật toán tốt hơn như YIN http://www.ircam.fr/pcm/cheveign/pss/2002_JASA_YIN.pdf

Bạn có thể bỏ qua bước cửa sổ và chỉ chia âm thanh thành các phần rời rạc tuy nhiên nhiều mẫu bạn muốn phân tích. Điều này tương đương với việc sử dụng cửa sổ vuông, hoạt động, nhưng bạn có thể nhận được nhiều tiếng ồn hơn trong kết quả của mình.

BTW: Nhiều mã giấy phép ứng dụng bộ chỉnh tần này tạo thành các bên thứ ba, chẳng hạn như mặt phẳng z và iZotope.

Cập nhật: Nếu bạn muốn mã nguồn C và hướng dẫn đầy đủ cho phương pháp FFT, tôi đã written one. Mã biên dịch và chạy trên Mac OS X, và nên được chuyển đổi sang các nền tảng khác khá dễ dàng. Nó không được thiết kế là tốt nhất, nhưng nó được thiết kế để dễ hiểu.

+1

Điều này dường như là chính xác những gì tôi cần, nhưng nó là vô dụng đối với tôi bởi vì tôi không biết những gì "đi qua thấp", "cửa sổ", và "chức năng Hann". (Mặc dù liên kết, tôi vẫn không hiểu nó áp dụng như thế nào.) Những gợi ý trên có thể giúp một người biết nhiều hơn, nhưng tôi hỏi câu hỏi này bởi vì tôi hoàn toàn không có kiến ​​thức về chúng. – brainmurphy1

+0

windowing: http://en.wikipedia.org/wiki/Window_function –

+0

Đối với thông qua thấp tôi đề nghị một thay thế, nhưng nếu bạn không biết nó là gì, bạn có thể google nó và đặt một câu hỏi khác. Nó không phải là một cái gì đó có thể dễ dàng được bảo hiểm như một câu trả lời phụ cho một câu hỏi khác. –

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