Nhận dạng sân nhanh


8

Tôi cần phát hiện cao độ (đo tần số tín hiệu) trong khi các nhạc sĩ phát nhạc, đưa ra cảnh báo nếu họ không điều chỉnh được, nhưng âm nhạc xảy ra quá nhanh đối với FFT (Biến đổi Fourier nhanh).

Dưới đây tôi cố gắng đưa ra một mô tả kỹ thuật của vấn đề.

Nhạc sĩ chơi nhạc ở 90-140 bpm. Điều này có nghĩa là có 90-140 nhóm ghi chú mỗi phút, tối đa 8 (thường xuyên hơn, tối đa 4) ghi chú trong mỗi nhóm (60/140/8 = 0,0536 giây, 60/90/4 = 0,167 giây), rằng là, ghi chú có thể thay đổi ở tốc độ 6-19 ghi chú mỗi giây.

Âm nhạc sử dụng thang đo logarit (xem hình ảnh đính kèm): phạm vi giữa, giả sử, 440Hz và 880Hz được chia thành 12 nốt, chỉ 7 trong số đó được sử dụng cho giai điệu. (Về cơ bản, họ chỉ sử dụng các phím trắng trên đàn piano; khi muốn thay đổi tần số bắt đầu, họ sử dụng một số phím đen và không sử dụng một số phím trắng.) Nghĩa là tần số của mỗi nốt tiếp theo được nhân lên. bằng 2 ^ (1/12) = 1.05946.

Để làm cho mọi thứ phức tạp hơn, tần số A (La) có thể thay đổi từ 438 đến 446 Hz. Các nhạc cụ dây trong lý thuyết có thể được điều chỉnh, trong khi các nhạc cụ gió phụ thuộc vào nhiệt độ không khí và độ ẩm, do đó tần số xảy ra sẽ được các nhạc sĩ đàm phán lại trong quá trình kiểm tra âm thanh.

Đôi khi các nhạc sĩ và ca sĩ mắc lỗi về tần số, họ gọi đó là "không đúng giai điệu". Họ muốn một thiết bị sẽ thông báo cho họ về những "lỗi không đúng" như vậy. Họ có bộ chỉnh âm, nhưng bộ chỉnh yêu cầu phát cùng một âm thanh trong khoảng 1 giây trước khi họ bắt đầu hiển thị bất cứ thứ gì. Điều này hoạt động để điều chỉnh, nhưng không hoạt động trong khi nhạc được phát.

Rất có thể, bộ chỉnh đang thực hiện FFT và do công thức df= =1/T chờ trong 1 giây để có độ phân giải 1Hz.

Đối với A = 440Hz, sự khác biệt về tần số giữa hai nốt là 440 * 0,05946 = 26,16 Hz, để có được độ phân giải tần số đó, người ta phải sử dụng thời gian thu là 0,038 giây, nghĩa là, ở tốc độ = 196bpm FFT chỉ có thể phân biệt hai lưu ý, ở tốc độ 98 bpm, nó có thể báo lỗi lỗi 50% với điều kiện là nó bắt đầu thu được tại thời điểm sân thay đổi. Nếu chúng tôi cho phép thay đổi cường độ trong quá trình mua lại, chúng tôi nhận được 49 bpm, quá chậm. Ngoài ra, rất mong muốn được chính xác hơn về tần số, giả sử, phát hiện lỗi không đúng 25% hoặc 12%.

Có cách nào để đo tần số (phát hiện cao độ) tốt hơn FFT, nghĩa là, với độ phân giải tốt hơn trong thời gian thu thập ít hơn? (Tốt hơn ít nhất 2 lần, lý tưởng hơn, tốt hơn 8-16 lần.) Đổi lại, tôi không cần phân biệt giữa các nốt của các quãng tám khác nhau, ví dụ cả 440 và 880 có thể được công nhận là A. Tôi không cần tuyến tính của FFT đầu ra, một thang logarit sẽ tốt hơn. (Có lẽ, nhiều sự đánh đổi là có thể, chỉ là không có gì khác xuất hiện trong tâm trí của tôi ngay bây giờ.)

Đây là một bản vẽ thực sự tốt:

Lưu ý tần số được liên kết từ Wikipedia


bản vẽ đẹp. họ nên lật ngược nó lại để các biểu tượng khóa của âm nhạc (và nhân viên âm nhạc) ở bên phải. nhưng sau đó tất cả các tần số và thời gian và số MIDI sẽ bị đảo lộn.
robert bristow-johnson

Điều này có vẻ như bạn cần phát hiện cao độ đa âm thay vì phát hiện đơn âm (tức là một nốt tại một thời điểm). Đúng không?
Jazzmaniac

@Jazzmaniac Polyphonic chắc chắn sẽ là một điểm cộng, đó là, đơn âm sẽ là một hạn chế. Nếu tôi có thể sử dụng FFT, tôi sẽ hiển thị một số đỉnh trên sơ đồ thời gian tần số 2D. Mặt khác, nếu tôi hiểu chính xác, các nhạc cụ gió là đơn âm, và violin khá gần với điều đó.
18446744073709551615

Dụng cụ gió chắc chắn hoạt động với các thuật toán phát hiện đơn âm. Tuy nhiên, các nhạc cụ dây (có nhiều hơn một chuỗi) rất khó, và hầu hết nếu không phải tất cả các máy dò đơn âm đều tạo ra kết quả không đáng tin cậy hoặc thậm chí không sử dụng được khi có âm thanh phân rã từ các chuỗi không bị tắt tiếng hoàn hảo, chuỗi mở cộng hưởng hoặc chỉ nhiễu từ micrô. Điều đó nói rằng, phát hiện đa âm là khó. Tuy nhiên, vì bạn không thực sự cần một phát hiện ghi chú chính xác mà chỉ cần phát hiện chính xác trong giai điệu, bạn rất có thể tìm thấy một thuật toán phù hợp. Tuy nhiên, nó sẽ không phải là một máy phát hiện đơn âm.
Jazzmaniac

Điều này có thể giải thích cho câu trả lời của RBJ, hoặc ai đó có thể đã vi phạm từ mục đích bán hàng hơi không khách quan của anh ta. Trong mọi trường hợp, đừng nhảy lên tàu của anh ấy quá sớm. Có những lựa chọn khác cho những gì bạn muốn, và cũng có thể là những lựa chọn tốt hơn.
Jazzmaniac

Câu trả lời:


9

" Có cách nào để đo tần số (phát hiện cao độ) tốt hơn FFT, nghĩa là, với độ phân giải tốt hơn trong thời gian thu thập ít hơn? "

có, có. hoặc là. có nhiều cách tốt hơn để phát hiện cao độ âm nhạc trong thời gian thực xa hơn, tốt hơn nhiều so với chạy FFT.

xem xét :

Chức năng chênh lệch cường độ trung bình (AMDF)

Qx[k]= =Σn|x[n]-x[n-k]|

Hàm bình phương bình phương trung bình (ASDF)

Qx[k]= =Σn(x[n]-x[n-k])2

Chức năng tự tương quan (AF)

Rx[k]= =Σnx[n]x[n-k]

lưu ý rằng tôi đang chơi nhanh và lỏng lẻo với các giới hạn cho phép tính tổng.

cũng lưu ý rằng không có giả định nào được thực hiện về hình dạng sóng hoặc giao thoa 0 hoặc các ngưỡng khác. giả định duy nhất là khi độ trễk là khoảng một khoảng thời gian (hoặc hai dấu chấm hoặc một số bội số nguyên khác của độ dài thời gian), x[n] trông rất giống x[n-k]. vì vậy, giả định duy nhất là cao độ có liên quan đến tần số cơ bản của hàm định kỳ hoặc gần như định kỳ (cái mà tôi muốn gọi là hàm "bán định kỳ").

Sở thích của tôi là ASDF (và đó là một bí mật thương mại được che giấu mỏng manh tôi vừa công bố với mọi người, nhưng mọi người trên comp.dsp đã biết điều đó rồi). tất cả đều là miền thời gian, AMDF và ASDF trông rất giống nhau và ASDF trông giống như một phiên bản lộn ngược của AF. bạn đang tìm kiếm null trong AMDF hoặc ASDF hoặc các đỉnh trong AF tương ứng với độ dài thời gian tiềm năng của đầu vào bán định kỳ.

Dưới đây là một vài thủ thuật khác:

  1. bạn luôn có thể tương quan với hiện tại N mẫu chống lại một số N mẫu bị trì hoãn bởi k. theo cách đó bạn đang xử lý dữ liệu mới nhất có thể có trong ứng dụng thời gian thực.

  2. bạn không cần tính toán tương quan cho mỗi độ trễ số nguyên k. thực tế, vì bạn thích tần số log, khoảng cách cho lớn hơnk có thể lớn hơn khoảng cách cho nhỏ hơn k.

  3. khi tìm thấy giá trị null (AM_F) hoặc đỉnh (AF) tiềm năng, bạn có thể tính toán tương quan cho các giá trị nguyên liền kề của k.

  4. giữa các giá trị nguyên liền kề của k, bạn có thể thực hiện phép nội suy để xác định vị trí cực đại đến độ chính xác của mẫu phân đoạn. tôi sẽ không cho bạn biết làm thế nào sử dụng trí tưởng tượng của bạn.

  5. toàn bộ mẹo (và đây là nước sốt bí mật nơi áp dụng bí mật thương mại và bằng sáng chế IVL) là chọn đúng hoặc không có giá trị khi có nhiều ứng cử viên. chọn đỉnh hoặc null không chính xác sẽ dẫn đến "lỗi quãng tám". Tôi sẽ không cho bạn biết làm thế nào để làm điều đó. sử dụng trí tưởng tượng của bạn.

gửi cho tôi một email và chúng tôi có thể thảo luận về các điều khoản hợp đồng nếu bạn muốn tôi thiết kế cho bạn một máy phát hiện cú đá. tốt hơn nhiều so với YIN, mà theo tôi, hoạt động như cứt.


1
Một bình luận về bỏ phiếu xuống sẽ được đánh giá cao. Nếu có gì sai, tôi muốn biết điều đó. Câu trả lời này không có công thức, nhưng ít nhất có một danh sách những gì cần đọc (vâng, điều đó không có vẻ dễ đọc, nhưng nó là thứ tốt hơn không có gì). Xin đừng xóa câu trả lời này.
18446744073709551615

1
Ai sẽ xóa câu trả lời? tôi?
robert bristow-johnson

3

Tôi đã trả lời câu hỏi của bạn ở đây: /programming/33667275/fast-frequency-measousing/33678202#33678202

Nhưng, tóm lại, trong một số trường hợp nhất định, bạn có thể nội suy kết quả FFT để phân giải tốt hơn khoảng cách bin FFT, do đó cho phép bạn sử dụng cửa sổ dữ liệu ngắn hơn để phân giải thời gian tốt hơn.

Nhưng tần số FFT không phải là tần số cao độ. Và đối với một số nhạc cụ (những nhạc cụ tạo ra âm bội hơi không điều hòa), cũng không phải là chức năng tự tương quan (hoặc họ hàng của nó như AMDF). Đó là bởi vì cao độ là một hiện tượng tâm lý.


hai lưu ý: nếu bạn muốn phát hiện cao độ của mình là " nhanh ", tôi không khuyên bạn nên thực hiện điều đó trong miền tần số (trừ khi có thể nếu bạn đang thực hiện một số việc đa tốc độ với nhiều FFT. thậm chí không thể bắt đầu FFT cho đến khi bạn nhận được tất cả các mẫu. Đối với một FFT có độ dài vừa phải (để có độ phân giải đủ ở các âm thấp), bạn đã chờ đợi, giả sử, 0,1 giây. Cao độ (và độ ồn) đôi khi là các biện pháp tâm lý tương quan tốt với các tính chất vật lý như thời gian (và sức mạnh). đối với chuông, toms, bạn sẽ nhận được một âm vực, nhưng nó có thể không có nghĩa đúng.
robert bristow-johnson

nhưng tôi chỉ chạy tập lệnh MATLAB nhỏ của mình trên một bản hit tom được ghi lại và có vẻ như với tôi rằng nốt nhạc được trả về sẽ là một giá trị ghi chú hợp lý.
robert bristow-johnson
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.