Làm thế nào để đối phó với mức cơ bản thấp khi sử dụng AMDF để trích xuất cao độ?


11

Tôi đang sử dụng Chức năng chênh lệch cường độ trung bình để ước tính tần số cơ bản của tín hiệu âm thanh bán nguyệt. AMDF được định nghĩa là

Dn=1Nnk=nN1|SkSkn|

Trong đó N là chiều dài của tín hiệu. Hàm này thể hiện mức tối thiểu khi tín hiệu được dịch chuyển một lượng bằng với chu kỳ của nó.

Đây là mã tôi đang sử dụng để trích xuất cao độ (trong Matlab):

 a = amdf(f);
 a = a/max(a);
 [p l] = findpeaks(-a, 'minpeakprominence', 0.6);
 pitch = round(sample_freq/l(1);

Tuy nhiên, tôi đang xử lý tín hiệu âm thanh có tần số cơ bản rất thấp:

phổ của tín hiệu âm thanh

Kết quả là, một vấn đề nhân đôi cao độ phát sinh: mức tối thiểu được phát hiện tương ứng với một nửa thời gian của tín hiệu (tức là sóng hài thứ hai):

AMDF của tín hiệu trên

Tôi đã cố gắng trích xuất đỉnh lớn nhất và không chỉ đầu tiên, nhưng đôi khi vấn đề này vẫn còn. Làm cách nào tôi có thể cải thiện mã và / hoặc chức năng AMDF để xử lý mức cơ bản thấp?


Âm thanh học tâm lý và nhận thức của con người ảnh hưởng đến cao độ và sự không chắc chắn của quãng tám. Nó có thể yêu cầu thử nghiệm để xác định trong những điều kiện nào, đỉnh AMDF lớn nhất tạo ra sự khác biệt rõ ràng.
hotpaw2

tần số của bạn thấp đến mức nào? Có ví dụ nào để tôi lắng nghe không?
ederwander

Câu trả lời:


10

Đây là những gì chúng ta gọi trong biz phát hiện cao độ, " vấn đề quãng tám ".

Trước hết, tôi sẽ thay đổi AMDF thành ASDF. Và tôi sẽ không giảm kích thước cửa sổ khi độ trễ tăng lên. (Ngoài ra, tôi đang thay đổi ký hiệu thành thứ mà tôi cho là thông thường hơn. " " là tín hiệu thời gian rời rạc.)x[n]

Hàm khác biệt bình phương trung bình (ASDF) của trong vùng lân cận của mẫu x [ n 0 ] là:x[n]x[n0]

Qx[k,n0]1Nn=0N1(x[n+n0N+k2]  x[n+n0N+k2+k])2

k kfloor()hàm và, nếu chẵn thì .kk2=k+12=k2

Bây giờ, mở rộng vuông và xem xét những gì trông giống như summations như (không phải là đang đi đến vô cùng, nhưng để cung cấp cho bạn một ý tưởng nếu là lớn). ASDF liên quan trực tiếp đến sự tự tương quan. Nó thực chất là sự tự động bị đảo lộn. Những bước này tôi sẽ để lại cho bạn. hãy xem câu trả lời nàyN NNN N

Vì vậy, bây giờ hãy xem xét "tự tương quan" có độ dài hữu hạn này (trong vùng lân cận của mẫu ) được xác định từ ASDF:x[n0]

Rx[k,n0]=Rx[0,n0]12Qx[k,n0]

Ở đâu

Rx[0,n0]1Nn=0N1(x[n+n0N2])2

Vì và cho tất cả độ trễ , điều đó có nghĩa là cho tất cả độ trễ .Q x [ k , n 0 ] 0 k R x [ k , n 0 ] R x [ 0 , n 0 ] kQx[0,n0]=0Qx[k,n0]0kRx[k,n0]Rx[0,n0]k

Giả sử trong một phút rằng là định kỳ với chu kỳ (và xảy ra là một số nguyên), thìP Px[n]PP

x[n+P]=x[n]n

và và cho bất kỳ số lượng chu kỳ nào ( là số nguyên). Vì vậy, bạn nhận được một đỉnh tại và tại bằng với bất kỳ bội số nào khác của nếu là định kỳ. Nếu là không hoàn toàn định kỳ, những gì chúng ta có thể mong đợi là đỉnh lớn nhất tại , một đỉnh (nhưng hơi nhỏ) tại (giai đoạn chúng ta đang tìm kiếm) và đỉnh dần dần nhỏ hơn cho bội số lớn hơn .R x [ m P , n 0 ] = R x [ 0 , n 0 ] R x [ k , n 0 ] m k = 0 k P x [ n ] x [ n ] k = 0 k = P PQx[mP,n0]=0Rx[mP,n0]=Rx[0,n0]Rx[k,n0]mk=0kPx[n]x[n]k=0k=PP

Vì vậy, vấn đề quãng tám xuất hiện vì một vài lý do. Trước hết, không nhất thiết là một số nguyên. Đó là một vấn đề nội suy, không phải là một vấn đề lớn. P

Lý do thứ hai và vấn đề khó khăn hơn là của subharmonics . Hãy xem xét rằng bạn đang nghe một giai điệu định kỳ tốt ở chính xác A-440 Hz và nó có vẻ như là một A có 9 nửa cung ở giữa C. Bây giờ giả sử ai đó thêm vào âm đó một biên độ rất nhỏ (như giảm 60 dB) A -20? Nó sẽ nghe như thế nào và về mặt toán học thời gian "thực sự" là gì?


Chọn đỉnh "đúng" cho giai đoạn này.

Giả sử bạn chạy ghi chú của mình thông qua bộ lọc chặn DC, do đó giá trị trung bình của bằng không. Hóa ra nguyên nhân của giá trị tự động cho mỗi cũng bằng 0 (hoặc gần với nó nếu lớn). Điều đó có nghĩa là phải tính tổng (trên ) bằng 0, có nghĩa là có nhiều diện tích trên 0 như bên dưới.x[n]Rx[k,n0]n0NRx[k,n0]k

Được rồi, vì vậy đại diện cho sức mạnh của trong vùng lân cận xung quanh và phải không âm. không bao giờ vượt quá nhưng có thể lớn bằng khi là định kỳ. nếu . Vì vậy, nếu là định kỳ với chu kỳ và bạn có một loạt các đỉnh cách nhau bởi và bạn có một ý tưởng về việc các đỉnh đó nên cao đến mức nào. Và nếu thành phần DC của bằng 0, điều đó có nghĩa là ở giữa các đỉnh, nó phải có giá trị âm.Rx[0,n0]x[n]n=n0Rx[k,n0]Rx[0,n0]x[n]Rx[P,n0]=Rx[0,n0]x[n+P]=x[n]x[n]PPRx[k,n0]

Nếu là "bán định kỳ", một chu kỳ của sẽ trông rất giống một chu kỳ liền kề, nhưng không giống như một chu kỳ đi xa hơn tín hiệu theo thời gian. Điều đó có nghĩa là đỉnh thứ nhất sẽ cao hơn đỉnh thứ hai tại hoặc thứ ba . Người ta có thể sử dụng quy tắc để luôn chọn đỉnh cao nhất và mong muốn đỉnh cao nhất luôn luôn là đỉnh đầu tiên. Nhưng, vì subharmonics không nghe được, đôi khi đó không phải là trường hợp. đôi khi đỉnh thứ hai hoặc có thể là đỉnh thứ ba cao hơn một chút. Ngoài ra, vì khoảng thời gian có thể không phải là số nguyên mẫu mà là trongx[n]x[n]x[n]Rx[P,n0]Rx[2P,n0]Rx[3P,n0]PkRx[k,n0]luôn luôn là một số nguyên, do đó, đỉnh thực sự có thể sẽ nằm giữa các giá trị nguyên của . Ngay cả khi bạn đã nội suy đỉnh cực đại (mà tôi khuyên dùng và phép nội suy bậc hai là đủ tốt) và mức độ thực sự của nó là bao nhiêu giữa số nguyên , phép nội suy của bạn có thể làm cho một đỉnh cao hơn một chút hoặc thấp hơn một chút so với thực tế. Vì vậy, việc chọn đỉnh hoàn toàn cao nhất có thể dẫn đến việc chọn thứ hai một cách ngẫu nhiên so với đỉnh đầu tiên (hoặc ngược lại) khi bạn thực sự muốn thứ khác.kk

Vì vậy, bằng cách nào đó bạn phải chấp nhận các đỉnh ở mức tăng để đỉnh thứ nhất có lợi thế hơn một chút so với đỉnh thứ hai và thứ hai so với thứ tư (quãng tám tiếp theo xuống), v.v ... Làm thế nào để bạn làm điều đó?k

Bạn làm điều đó bằng cách nhân với một chức năng giảm của sao cho đỉnh tại bị giảm bởi một số yếu tố, liên quan đến một đỉnh cao giống hệt nhau tại . Hóa ra hàm năng lượng (không phải hàm mũ) thực hiện điều đó. thật tính toánRx[k,n0]kk=2Pk=P

kα Rx[k,n0]

Vì vậy, nếu hoàn toàn định kỳ với chu kỳ và bỏ qua các vấn đề nội suy cho không nguyên , thìx[n]PP

Rx[2P,n0]=Rx[P,n0]

nhưng

(2P)αRx[2P,n0]=(2P)αRx[P,n0]<PαRx[P,n0]

Yếu tố làm giảm đỉnh của một quãng tám thấp hơn là tỷ lệ

(2P)αRx[2P,n0]PαRx[P,n0]=(2P)αPα=2α

Vì vậy, nếu bạn muốn tăng đỉnh đầu tiên của mình lên 1% so với đỉnh thứ hai, điều đó có nghĩa là bạn sẽ không chọn cao độ là cao độ phụ hài hòa, trừ khi tự động tương thích cao độ phụ ít hơn 1% so với đỉnh thứ nhất đỉnh điểm, bạn sẽ giải quyết cho từα

2α=0.99

Đó là cách nhất quán để cân hoặc giảm nhấn mạnh hoặc tàn tật đỉnh tương ứng với cao độ dưới âm một quãng tám dưới đây.

Nó vẫn để lại cho bạn một vấn đề ngưỡng. Bạn phải chọn tốt. Nhưng đây là một cách nhất quán nhấn mạnh đỉnh đầu tiên trong lần thứ hai, đó là một quãng tám thấp hơn, nhưng không quá nhiều đến nỗi nếu ghi chú thực sự một quãng tám thấp hơn, nhưng năng lượng trong tất cả các giai điệu thậm chí là mạnh mẽ, so với kỳ quặc hài hòa, điều này vẫn sẽ để lại một khả năng cho đỉnh thứ hai được chọn.α


1
Để trả lời câu hỏi cuối cùng của bạn: nếu bạn thêm biên độ 220 Hz, thì cường độ sẽ là 220 Hz trong đó 440 Hz là sóng hài đầu tiên sau cơ bản (nói theo toán học). Trường hợp của tôi là tương tự nhưng cũng có hài âm cao hơn, vì vậy cơ bản bị thiếu không phải là một vấn đề từ quan điểm nhận thức. Tôi không hiểu làm thế nào thay thế AMDF bằng ASDF có thể giải quyết vấn đề quãng tám
Firion

nhưng nửa còn lại của câu hỏi là * "nó sẽ như thế nào"? trả lời và sau đó hãy xem những gì bạn muốn máy phát hiện sân của bạn làm.
robert bristow-johnson

hãy thử tính toán và vẽ sơ đồ cho cùng một giai điệu mà bạn đã thực hiện cho AMDF. sẽ trông giống như AMDF lộn ngược. Rx[k,n0]
robert bristow-johnson

Nếu bạn không có các sóng hài cao hơn khác mà chỉ có tần số 440 Hz và âm 220 Hz đủ thấp, bạn sẽ nghe thấy âm tần 440 Hz. Trên một số mức (tôi không biết cái nào), bạn cũng sẽ nghe thấy âm 220 Hz và cường độ 220 Hz.
Firion

có một lý do tại sao tôi nói -60 dB. Bây giờ bạn muốn máy dò cao độ của bạn nói gì, đó là nốt 220 Hz hay 440 Hz hay thứ gì khác?
robert bristow-johnson

0

Về mặt heurist, tần số cơ bản của giọng nói sẽ nằm trong khoảng [70, 400] Hz. Vì vậy, bước đầu tiên sẽ là áp dụng bộ lọc thông dải để cách ly xấp xỉ dải đó.

Thứ hai, bạn có thể áp dụng hàm trọng số cho phổ công suất. Gần cơ bản, trọng lượng phải gần 1, trong khi càng gần cuối dải, trọng lượng phải gần 0. Trọng lượng này là tất nhiên. Tôi muốn giới thiệu một cái gì đó siêu tuyến tính: bậc hai, bậc bốn, v.v. - để thực sự tiêu diệt các quãng tám.


Làm thế nào tôi có thể áp dụng trọng lượng? Tôi không biết cơ bản ở đâu. Ngoài ra, tín hiệu của tôi là một ghi chú của nhạc cụ, vì vậy phạm vi lớn hơn
Firion
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.