Cách hiệu quả nhất để trích xuất các thành phần tần số của tín hiệu âm thanh với độ chính xác gần như con người trong thời gian thực


14

Tôi đang cố gắng tìm ra cách (nếu có thể) để trích xuất các thành phần tần số của một mẫu âm thanh tùy ý (thường là âm nhạc) theo cách giống như FFT, nhưng trong nghiên cứu của tôi về thuật toán FFT, tôi biết rằng nó bị một số hạn chế nghiêm trọng cho mục đích này.

Có 3 vấn đề mà FFT đang trình bày:

  1. Vì độ phân giải bin FFT tương đương với kích thước cửa sổ của bạn, để đạt được độ chính xác khá hợp lý (giả sử 1 Hz), bạn cần một cửa sổ dài vô lý (giả sử 1 giây). Điều này có nghĩa là bạn không thể phát hiện quá độ hoặc tần số mới được giới thiệu một cách nhanh chóng. Điều đó cũng có nghĩa là vấn đề không thể được giải quyết với CPU nhanh hơn và tốc độ mẫu cao hơn - hạn chế về bản chất gắn liền với thời gian.

  2. Con người cảm nhận tần số logarit, nhưng các thùng FFT được đặt cách nhau một cách tuyến tính. Ví dụ, sự khác biệt 20hz ở đầu thấp của thính giác của chúng tôi là rất lớn , trong khi chênh lệch 20hz ở đầu cao là không thể chấp nhận được. Vì vậy, để có được độ chính xác mà chúng tôi yêu cầu ở tần số thấp, chúng tôi phải tính toán nhiều hơn so với yêu cầu ở tần số cao.

  3. Một số vấn đề này có thể được giải quyết bằng cách nội suy giữa các thùng FFT. Điều này có thể hoạt động đối với nhiều âm thanh âm nhạc, bởi vì tần số thường sẽ được đặt cách nhau khá xa và do đó, không quá 1 tần số sẽ rò rỉ vào một cặp thùng. Nhưng điều này sẽ không phải luôn luôn như vậy, đặc biệt đối với các âm thanh không điều hòa như các nhạc cụ gõ. Vì vậy, nội suy thực sự chỉ là phỏng đoán.

Từ những gì tôi hiểu về thuật toán DFT / FFT, các đầu ra (biên độ bin) có hiệu quả tương quan của sin / cosine ở tần số của mỗi thùng. Tôi nhận ra rằng nếu thuật toán có thể được thiết kế lại sao cho tần số bin được đặt cách nhau không tuyến tính (nghĩa là chúng ta tương quan với một tập hợp sin / cosin khác nhau), thì chúng ta có thể đạt được độ phân giải bằng âm thanh ở mọi tần số. Điều này là có thể, hay nó là một giấc mơ ống dựa trên sự hiểu biết chưa đầy đủ của tôi về các toán học liên quan?

Tôi đoán tôi cũng có thể giải quyết vấn đề bằng vũ lực, bằng cách tương quan các sin / cosin ở mọi tần số mà tôi quan tâm. Tôi không quá mải mê với toán học ở đây. Điều này có thể không? Những loại hiệu quả? Nó sẽ giải quyết vấn đề của tôi?

Có một cách khác để đạt được sự phân tách tần số chính xác, thời gian thực của tín hiệu không? Hiệu quả của CPU là một mối quan tâm, nhưng không phải là mối quan tâm chính - tôi quan tâm một phần đến việc liệu nó có thể được thực hiện trên lý thuyết hay không. Tuy nhiên, một cái gì đó khả thi trong thời gian thực trên một máy tính để bàn hiện đại sẽ là lý tưởng.


3
Vấn đề nào bạn đang cố gắng giải quyết? Phát hiện, phát hiện nhiều-0,2 (để phiên âm), nhận dạng hợp âm, mô hình âm sắc ...? Có những giải pháp đặc biệt cho một số vấn đề này. Bạn có quan tâm đến tính không khả dụng (sẽ được sử dụng trong phân tích-> chuyển đổi-> khung tái tổng hợp) không?
pichenettes

Vấn đề tôi đang cố gắng giải quyết được thừa nhận là khá cởi mở. Tôi có một mối quan tâm chung về âm nhạc kỹ thuật số, bao gồm hầu hết danh sách của bạn. Nhưng sự mơ hồ của tôi một phần là do tôi thiếu kiến ​​thức về những gì có thể làm được và những cách giải quyết tiêu chuẩn cụ thể hoặc tốt nhất cho từng vấn đề bạn đề cập (cho đến khi tôi hỏi câu hỏi này, tôi luôn cho rằng FFT là ). Nhưng mục trong danh sách mà tôi quan tâm nhất là mô hình âm sắc. Tôi cũng muốn tìm cách trích xuất các âm sắc phức tạp phát ra đồng thời trong bản ghi âm. Resynt tổng hợp là thú vị. Các thuật toán AI được quan tâm.
bryhoyt

Một vấn đề cụ thể hơn mà tôi đã cố gắng giải quyết trong quá khứ và đôi khi muốn thử lại: Tôi muốn viết một chương trình để "ứng biến" trong thời gian thực với một nhóm người chơi hoặc ca sĩ được ghi âm bằng micrô. Tôi đã có được máy tính của mình "huýt sáo" một sin, với sự chậm trễ đáng chú ý và mất điều chỉnh. Nó là rất quan trọng cho một ngẫu hứng như vậy để được chính xác trên giai điệu và đúng nhịp. Chắc chắn, có nhiều cách khác để đạt được điều này (người chơi chơi nhạc cụ kỹ thuật số hoặc cung cấp cho máy tính một số "thông tin bên trong" như tiến trình hợp âm được cài đặt sẵn, v.v.) nhưng đây không phải là mục tiêu của tôi.
bryhoyt

"thuật toán có thể được thiết kế lại để các tần số bin được đặt cách nhau không tuyến tính, sau đó chúng ta có thể đạt được độ phân giải bằng âm thanh ở mọi tần số." Âm thanh như một biến đổi sóng con Morlet liên tục
endolith

Câu trả lời:


5

Như tôi đã nhận xét trên một bài đăng trước, phương pháp phân tích tần số thời gian được gọi là "biến đổi Fourier ngắn hạn" tương đương với ngân hàng bộ lọc, phân tích tín hiệu của bạn x . Đối với cửa sổ phân tích đã cho w n , có kích thước N , bộ lọc ở tần số k / N là: h n = w - n e j 2 π n kXxwnNk/N

hn= =w-nej2πnkN

Đối với các cửa sổ phân tích thông thường (Hann, Hamming hoặc thậm chí là hình chữ nhật), điều này tương ứng với bộ lọc thông thấp, với tần số cắt khoảng , được "chuyển" sang tần số bin k (nhờ điều chế hàm mũ phức tạp) , do đó dẫn đến một bộ lọc thông dải.1/Nk

Tại thời điểm này, để trả lời trực tiếp mối quan tâm của bạn về việc phản ánh nhận thức của con người, một số người đã sử dụng ["biến đổi Q không đổi" (CQT)] [Brown91]. Nó dựa trên cùng một nguyên tắc như FT, theo cách hiểu của ngân hàng bộ lọc. Tuy nhiên, các trung tâm không cách nhau tuyến tính như đối với FT "bình thường", mà là khoảng cách log2. Sau đó quy mô liên quan chặt chẽ đến một quy mô âm nhạc phương Tây: nếu ta chọn f k + 1 = 2 1 / 12 f k , sau đó chúng ta có được 12 tần số mỗi octave (rings a bell :-)?), Và băng thông được thiết lập để , nói, 2 1 / 12 - 1fkfk+1= =21/12fk. Bạn cũng có thể chọn các trung tâm khác, phù hợp nhất với nhu cầu của bạn.21/12-12fk

Bạn có thể tìm thấy việc triển khai CQT ở đây và ở đó, một nghiên cứu gần đây của Giáo sư Klapuri, đi kèm với một nghịch đảo khá tốt có thể được tìm thấy ở đây . Nhóm Audio tại Telecom ParisTech cũng có một triển khai của Giáo sư Prado, nhưng tôi chưa thử.

[Brown91] J. Brown, "Tính toán biến đổi quang phổ Q không đổi", Tạp chí của Hiệp hội âm học Hoa Kỳ, 1991, 89, 425-434

EDIT 20121014: một số câu trả lời và nhận xét cho câu hỏi của bạn (bryhoyt).

  1. Chỉ những ý kiến ​​chung về nhận xét của riêng bạn cho câu hỏi chính: Bạn dường như quan tâm đến nhiều ứng dụng, đối với tôi, không phải là vấn đề khá nhỏ để giải quyết. "Mô hình âm sắc" đối với tôi liên quan nhiều hơn đến nhận dạng giọng nói hoặc tương tự, trong đó độ phân giải hoặc độ chính xác hoặc độ chính xác không phải là vấn đề lớn (hãy xem xét cách MFCC thường được tính toán).

    Cũng xem xét có bao nhiêu nhà nghiên cứu hàng đầu ( F. Pachetnhóm repmus tại IRCAM, Pháp , trích dẫn một số) đang làm việc về chủ đề ngẫu hứng và đệm tự động: nhiệm vụ không phải là không thể, nhưng đòi hỏi phải có chuyên môn trong nhiều lĩnh vực. Tóm lại, một hệ thống điển hình cần bắt chước hệ thống thính giác của con người (ít nhất), thực hiện nhận thức âm thanh / âm nhạc / cao độ / nhịp điệu, biết về lý thuyết âm nhạc và đưa ra quyết định dựa trên ước tính của tất cả các bước trước đó. Biến đổi Fourier, hoặc bất kỳ biểu diễn tín hiệu nào, chỉ là một bước (nhỏ) hướng tới mục tiêu cuối cùng - và theo tôi, có thể hiểu rõ nhất cho đến nay.

    Điều đó nói rằng, vẫn có khả năng tất cả mọi người đang nhìn xa hơn những gì thực sự xảy ra, và rằng bạn có thể phá vỡ nó trong một giải pháp đơn giản, thanh lịch! Đừng quên xuất bản về nó sau khi nó được thực hiện! :-)

  2. một mẫu 0,1s ở ​​44kHz là đủ để chứa một dải tần số lớn

    FS/N= =44100/4410= =10Hz

  3. FFT không thể phát hiện điều này ở tần số thấp và cao, nhưng bạn nói các thuật toán khác có thể: sự đánh đổi là gì?

    Câu trả lời ngắn: đọc luận án của tôi về ước tính giai điệu!

    Để giải thích thêm một chút: nhiều thuật toán ước lượng cao độ vượt xa các giới hạn của FT, nhờ các giả định về âm thanh để xử lý. Chúng tôi hy vọng các ghi chú từ âm thanh tự nhiên (giọng nói của con người, oboe, sax, piano ...) sẽ phức tạp hơn so với các hình sin đơn. Hầu hết các âm thanh phát ra đều hài hòa ít nhiều, điều đó có nghĩa là chúng có thể được mô hình hóa thành các tổng của hình sin có tần số là bội số của tần số cơ bản.

    Do đó, rất hữu ích khi tính đến các sóng hài này khi ước tính cao độ, với các phương pháp sử dụng các hàm phát hiện như tổng phổ, sản phẩm quang phổ hoặc các hàm tương quan tự động tồn tại. Ai đó đã bắt đầu một chủ đề liên quan gần đây.

  4. Sự đánh đổi là gì? Cụ thể hơn, mức độ chính xác tần số tôi có thể mong đợi cho một cửa sổ ngắn hợp lý? (Tôi hiểu kích thước cửa sổ trong CQT là khác nhau - bao nhiêu vậy?) Thậm chí cụ thể hơn, tôi sẽ có thể đến gần mức nào. mục tiêu chênh lệch tần số 0,5% với cửa sổ 0,005s?

    Như đã nói trước đây, với một cửa sổ 0,005s, bạn có thể mong đợi một cái gì đó như 200Hz "rò rỉ tần số". Đó thực sự chỉ là vấn đề khi bạn có 2 hình sin với tần số gần hơn 200Hz, do đó FT sẽ không thể chỉ ra rằng chúng là 2 hình sin khác nhau. Chà, chúng tôi ở rất xa 0,5% của bạn (nhân tiện, một nửa cung là 6% tần số!) Và 0,005s thực sự là một chút nhỏ cho mục đích của bạn. Tuy nhiên, nếu bạn muốn cung cấp ước tính cứ sau 0,005 giây, bạn vẫn có thể xử lý các khung chồng chéo dài hơn, như thường được thực hiện trong xử lý lời nói / âm nhạc. Đó có phải là những gì bạn thực sự muốn?

    Nk= =FSfk(21/B-1)
    BB= =48fk= =100Hzyêu cầu khoảng 0,7 giây cửa sổ dài. Không có gì để nói rằng sau đó chúng ta mất một chút độ phân giải thời gian ... Nhưng như đã đề cập trước đó, đây chỉ là vấn đề nếu chúng ta quên cấu trúc của âm thanh. Ngoài ra, âm thanh học tâm lý cho rằng dưới 500Hz, con người không thực sự phân biệt các sin sin rất tốt: ngay cả con người cũng bị thách thức ở đó. Tất nhiên, chúng tôi có thể hy vọng máy tính của chúng tôi có thể làm tốt hơn chúng tôi, nhưng ở đây, chúng tôi phải đối mặt với một vấn đề khó khăn!

    Cuối cùng, lưu ý rằng các cách khác để tính toán biểu diễn tần số thời gian của âm thanh tồn tại, hãy xem xét các ngân hàng bộ lọc gammatone. Ưu điểm của CQT mà tôi đã đề cập trước đây là có phần mềm cho cả biến đổi và đảo ngược của nó. Cá nhân, tôi vẫn tuân theo STFT, mặc dù, vì đơn giản và bởi vì, cho đến nay, tôi chưa bao giờ cần độ phân giải tốt hơn ở tần số thấp, ngay cả để tách nguồn.

    [Schoerkhuber2010] Schoerkhuber, C. và Klapuri, A., "Hộp công cụ biến đổi Constant-Q để xử lý âm nhạc", Hội nghị điện toán âm thanh và âm nhạc lần thứ 7, Barcelona, ​​Tây Ban Nha, 2010.


Một lưu ý nhỏ: CQT có thể giúp giải quyết điểm 1 và 2 của bạn, nhưng không phải điểm 3. Đối với điểm 3, luôn có sự đánh đổi giữa độ phân giải thời gian và tần số và nếu bạn muốn độ phân giải tần số tốt ở mức thấp thành phần tần số, bạn rất có thể cần phải chấp nhận để mất độ phân giải thời gian. Bây giờ, để ước tính cao độ, có thể có một số giải pháp khác, bạn có thể đọc của tôi trong luận án tiến sĩ của tôi nếu bạn quan tâm: D
Jean-louis Durrieu

Tôi không hiểu lắm. Tôi biết rằng bạn không nhận được bất cứ thứ gì miễn phí - Tôi không thể mong đợi một thuật toán phát hiện chính xác các tần số chưa được lấy mẫu ở độ phân giải tốt trong ít nhất một vài khoảng tần số thấp nhất. Nhưng một mẫu 0,1 ở tần số 44kHz là đủ để chứa một dải tần số lớn, mà con người có thể phân biệt chính xác (theo thuật ngữ tương đối - "đây là thứ 5", "có thứ 4 giảm dần", v.v.), chứng minh thông tin đang ở đâu đó FFT không thể phát hiện điều này ở tần số thấp và cao, nhưng bạn nói các thuật toán khác có thể: sự đánh đổi là gì?
bryhoyt

Trong tất cả các câu trả lời xuất sắc ở trên, CQT có vẻ phù hợp chính xác nhất với câu hỏi tôi đang hỏi. Sự đánh đổi là gì? Cụ thể hơn, mức độ chính xác tần số tôi có thể mong đợi cho một cửa sổ ngắn hợp lý? (Tôi hiểu kích thước cửa sổ trong CQT là khác nhau - bao nhiêu vậy?) Thậm chí cụ thể hơn, tôi sẽ có thể đến gần mức nào. mục tiêu chênh lệch tần số 0,5% với cửa sổ 0,005s? (Đó là dự đoán sơ bộ của tôi khi con người có thể bắt đầu nghe thấy điều gì đó không đúng nhịp hoặc lạc nhịp)
bryhoyt

5

Đầu tiên, với cách tiếp cận biến đổi Fourier ngắn hạn cổ điển, có phương pháp thay thế cho phép nội suy - đặc biệt là các kỹ thuật sử dụng thông tin pha để phục hồi tần số tức thời ( Xem câu hỏi này ) có thể cung cấp cho bạn chính xác vị trí của đỉnh phổ mà không cần tăng kích thước FFT. Hạn chế, như bạn đã nói một cách chính xác, là bạn không tăng khả năng hệ thống phân biệt các đỉnh liền kề - nhưng đây đã là một cải tiến lớn so với việc sử dụng tần số trung tâm của chỉ số bin FFT.

SrFFT_STôize

Có một cách tiếp cận mạnh mẽ khác hoạt động: "thăm dò" các tín hiệu của bạn với hàm mũ phức tạp cửa sổ (sóng con Gabor). Chúng được đặc trưng bởi tần số trung tâm, thời gian trung tâm và băng thông (đo lường mức độ lan truyền của sóng con theo thời gian hoặc theo tần số). Bạn sẽ phải đánh giá nhiều, rất nhiều, rất nhiều mối tương quan giữa tín hiệu của bạn và các sóng nhỏ này ở bao nhiêu lần bù, tần số và băng thông bạn muốn. Kết quả sẽ giống như một STFT "được lát gạch" rất linh hoạt trong đó kích thước cửa sổ tối ưu được chọn cho từng dải thời gian và từng dải tần số. Bên cạnh chi phí tính toán, nhược điểm là không có thuật toán hiệu quả và không có thuật toán nhân quả (bạn sẽ cần phải biết trước nhiều mẫu như sóng con dài nhất trong từ điển của bạn). Nếu bạn muốn thử nghiệm những kỹ thuật này,MPTK .

k

  • k
  • Chúng hoạt động tốt khi có nhiễu trắng - điều này đòi hỏi tín hiệu phải được làm trắng trước khi phân tích; thực hiện phân tích trong các kênh riêng lẻ của một ngân hàng bộ lọc cũng giúp.

Đây là những tính toán đắt tiền, nhưng chúng có thể hoạt động trực tuyến, với các cửa sổ ngắn nếu đơn đặt hàng mô hình và / hoặc tiếng ồn thấp.


4

Tần suất hay cao độ? Hiện đã có hàng tấn tài liệu nghiên cứu và sách về nhận thức cao độ của con người. Nhưng, IIRC, con người có xu hướng rất tệ trong việc "trích xuất" tần số một cách chính xác trừ khi chúng là một bước cơ bản. Và nhiều đỉnh tần số trong một "dải tới hạn" có xu hướng được coi là nhiễu. Vì vậy, bất kỳ phương pháp nào có "độ chính xác gần như con người" cũng có thể phải bao gồm một số thất bại về ước tính nhận thức của con người.

FFT chỉ là một ngân hàng của các bộ lọc không tối ưu cho nhiều mục đích trừ khi tính trực giao và tính không khả dụng là các yêu cầu. Các ngân hàng bộ lọc khác là có thể nếu bạn không yêu cầu hai ngân hàng đó (và nhận thức của con người rõ ràng là không), chẳng hạn như ngân hàng bộ lọc tần số MEL. Khi một đỉnh tần số được xác định bởi ngân hàng bộ lọc tần số MEL, phân tích thêm bằng kỹ thuật nội suy FFT hoặc kỹ thuật phát âm pha có thể hữu ích để tinh chỉnh ước tính tần số của bất kỳ đỉnh tần số phổ bị cô lập nào.

Lưu ý rằng không có thông tin nào thực sự được thu thập bởi bất kỳ kỹ thuật lọc nào được sử dụng trên cùng một khoảng thời gian của dữ liệu miền thời gian, so với FFT. Điều đang xảy ra thực sự có thể là việc mất thông tin để phù hợp hơn với "sự không chính xác" hoặc sự bất thường của hệ thống thính giác của con người.

Và ước lượng cao độ từ một tập hợp tần số là một vấn đề hoàn toàn khác, một chủ đề với nhiều tài liệu nghiên cứu và chương trong sách về thính học và như vậy.

Phần cuối cùng của câu hỏi về hiệu suất của bạn có thể là cá trích đỏ. Người ta có thể thực hiện hàng chục FFT và hàng chục ngân hàng bộ lọc khác nhau trong thời gian thực trên bộ xử lý điện thoại di động ngày nay. Với các thư viện FFT rất hiệu quả có sẵn từ các nhà cung cấp CPU, một FFT với 1000 thùng "thừa" có thể hiệu quả hơn một ngân hàng bộ lọc nhỏ hơn nhưng được mã hóa ngây thơ hơn.


Rất nhiều thông tin trả lời, cảm ơn. Tôi nhận thức được sự khác biệt giữa cao độ và tần số, nhưng câu trả lời của bạn thực sự giúp làm nổi bật độ chính xác của con người phụ thuộc vào âm thanh đáp ứng các yêu cầu nhất định. Điều này đúng với kiến ​​thức về sự hài hòa của tôi rằng con người khá tệ trong việc trích xuất các tần số không phải là cơ bản cao độ. Tôi có thể phân biệt chính xác các khoảng trong giai điệu với nhau và với các khoảng ngoài giai điệu (khoảng phụ âm dễ dàng hơn so với không đồng nhất). Nhưng tôi gặp khó khăn khi phân biệt hai khoảng thời gian không phù hợp (trừ "phẳng", "rất phẳng", "sắc nét", v.v.).
bryhoyt

2

Có nhiều lựa chọn thay thế, nhưng nó phụ thuộc vào những gì bạn đang làm. Về mặt vật lý, tôi cho rằng đôi tai của chúng ta giống như một ngân hàng lọc song song hơn là một FFT, giúp chúng có độ phân giải thời gian tốt và một quá trình gọi là "lấy nét" mang lại cho chúng độ phân giải tần số tốt. Vì vậy, trong một số trường hợp, về mặt lý thuyết bạn có thể sử dụng ngân hàng bộ lọc, nhưng điều này đòi hỏi rất nhiều quá trình xử lý khiến bạn có rất nhiều dữ liệu để xử lý.

Có thể xem wavelet như một tập hợp các bộ lọc đặc biệt hiệu quả và có liên quan. Vấn đề với sóng con để phân tích âm nhạc và âm thanh là chúng thường chỉ cung cấp cho bạn độ phân giải 1 quãng tám (mặc dù bạn có thể làm nhiều việc khác nhau về vấn đề này, tôi thực sự không thấy sóng con nào đặc biệt hữu ích trong âm thanh).

Một cách tiếp cận khác là sử dụng các cửa sổ FFT chồng chéo. Bạn có thể tăng độ phân giải tần số của FFT bằng cách xem không chỉ thông tin cường độ, mà cả thông tin pha. Điều này cho phép bạn sử dụng các cửa sổ ngắn hơn nhiều so với những gì bạn có thể sử dụng, điều này dẫn đến hiệu suất tốt hơn và độ phân giải thời gian tốt hơn. Các cửa sổ chồng chéo rất khó để tổng hợp lại một cách chính xác và việc đưa ra quá nhiều giả định về pha cũng có thể nguy hiểm. Như có thể, những loại mánh khóe này có lẽ là yếu tố chính để giải quyết các vấn đề phân tích tần số thời gian phức tạp.

Có một số công cụ khác cho các ứng dụng cụ thể là tốt.


1
xnXkmwn
Xfm= =Σnxn+mwne-j2πnkN
Nxnm
Xfm= =Σpxpwp-me-j2π(p-m)kN= =Σpxphm-p
hn= =w-nej2πnkN

1
Một STFT có thể là một ngân hàng bộ lọc, nhưng không phải tất cả các bộ lọc đều là STFT.
Bjorn Roche
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.