2017-11-01 15 views
5

Đăng lần đầu tiên, cảm ơn cộng đồng tuyệt vời!AudioKit FFT chuyển đổi sang dB?

Tôi đang sử dụng AudioKit và cố thêm bộ lọc tần số vào đầu vào micrô và vì vậy tôi đang cố gắng hiểu các giá trị sắp ra khỏi AudioKit AKFFTTap.

Hiện nay tôi đang cố gắng để chỉ in đệm FFT chuyển đổi thành dB giá trị

for i in 0..<self.bufferSize { 
    let db = 20 * log10((self.fft?.fftData[Int(i)])!) 
    print(db) 
} 

tôi đã mong đợi giá trị khác nhau, trong phạm vi khoảng -128 đến 0, nhưng tôi nhận được giá trị kỳ lạ của gần -200dB và khi tôi thổi vào micrô để cố định, nó chỉ đạt khoảng -60. Tôi không tiếp cận điều này một cách chính xác? Tôi đã giả định rằng các giá trị được đầu ra từ động cơ EZAudioFFT sẽ là giá trị biên độ đơn giản và phép tính chuyển đổi dB bình thường sẽ hoạt động. Ai có ý tưởng gì không?

Cảm ơn trước vì đã thảo luận về vấn đề này!

Trả lời

2

Bạn cần phải thêm tất cả các giá trị từ self.fft?.fftData (xem xét thay đổi các giá trị âm sang dương trước khi thêm) và sau đó thay đổi điều đó để xi ben

+0

Tôi đã thử ý tưởng của bạn về tổng hợp các giá trị tuyệt đối trong 'self.fft? .fftData' và tôi chắc chắn nhận được kết quả hợp lý hơn, tuy nhiên, kết quả vẫn quá nhạy cảm. Để kiểm tra điều này, tôi đang thêm một giá trị bù đắp để có được số đọc phù hợp với đồng hồ SPL chuyên dụng mà tôi có ở đây tại bàn làm việc của mình. Và nếu tôi nói, còi, thổi, hoặc tạo ra tiếng ồn hồng và so sánh kết quả, ứng dụng của tôi nhảy 40dB + trong khi đồng hồ SPL chỉ tăng 7-10 dB. Tôi đã so sánh với một số ứng dụng iOS để xem chỉ số dB và chúng dường như có kết quả tương tự với đồng hồ SPL. Bất kỳ ý tưởng tại sao điều này sẽ nhạy cảm hơn nhiều? –

+0

bạn đang sử dụng bao nhiêu mẫu cho một phép tính? bộ đệm đầy đủ? Tôi đã sử dụng tiêu chuẩn Tap, tôi không có kinh nghiệm với AKFFTTap vì vậy có lẽ tôi đang thiếu một cái gì đó –

3

Các giá trị trong mảng tương ứng với các giá trị của các thùng trong FFT. Việc có một thùng chứa một giá trị độ lớn gần bằng 1 sẽ có nghĩa là một lượng lớn năng lượng nằm trong dải tần số hẹp đó, ví dụ: một sinusoid rất lớn (một tín hiệu với một tần số duy nhất).

Âm thanh bình thường, chẳng hạn như âm thanh gây ra bởi bạn thổi vào micrô, truyền năng lượng của chúng qua toàn bộ phổ, tức là, trong nhiều thùng thay vì chỉ một. Vì lý do này, thường là các magnitudes nhận được thấp hơn khi kích thước FFT tăng lên.

Độ lớn -40dB trên một thùng đơn là khá lớn. Nếu bạn cố gắng chơi một giai điệu, bạn sẽ thấy một đỉnh rõ ràng ở một trong các thùng.

+0

Trong AudioKit, các giá trị bin không nằm trong thang điểm 0-1 chúng là magnitudes có thể chứa các giá trị từ 0 đến 700-1000 . Nếu tôi có thể nhận được điều này thành thang điểm 0-1 sẽ giúp ích rất nhiều, nhưng tôi không thấy làm thế nào để làm điều đó mà không có một giá trị tối đa rõ ràng để tham khảo. Tôi đã thổi vào mic để thử và có được tài liệu tham khảo đó, nhưng không bao giờ có một kết thúc trên phù hợp với các magnitudes được sản xuất bởi fft. –

+0

Câu hỏi của bạn cho thấy rằng các giá trị nằm trong khoảng 0..1, chỉ gần với 0 hơn bạn mong đợi. –