คำถามติดแท็ก fundamental-frequency

2
วิธีจัดการกับพื้นฐานขั้นต่ำเมื่อใช้ AMDF สำหรับการแยกพิทช์?
ฉันกำลังใช้ฟังก์ชั่นค่าความแตกต่างเฉลี่ยเพื่อประเมินความถี่พื้นฐานของสัญญาณเสียงแบบกึ่งระยะเวลา AMDF หมายถึง Dn=1N−n∑k=nN−1|Sk−Sk−n|Dn=1N−n∑k=nN−1|Sk−Sk−n| D_n = \frac{1}{N-n}\sum_{k=n}^{N-1}|S_k - S_{k-n}| ที่ไหน NNNคือความยาวของสัญญาณ ฟังก์ชั่นนี้แสดงขั้นต่ำเมื่อสัญญาณถูกเลื่อนด้วยจำนวนเท่ากับระยะเวลา นี่คือรหัสที่ฉันใช้เพื่อแยก pitch (ใน Matlab): a = amdf(f); a = a/max(a); [p l] = findpeaks(-a, 'minpeakprominence', 0.6); pitch = round(sample_freq/l(1); อย่างไรก็ตามฉันกำลังจัดการกับสัญญาณเสียงที่ความถี่พื้นฐานต่ำมาก: เป็นผลให้เกิดปัญหาการเสแสร้งเกิดขึ้น: ขั้นต่ำที่ตรวจพบสอดคล้องกับครึ่งเวลาของสัญญาณ (เช่นฮาร์โมนิที่สอง): ฉันพยายามที่จะสกัดจุดสูงสุดที่ใหญ่ที่สุดและไม่ใช่แค่ครั้งแรก แต่บางครั้งปัญหานี้ยังคงอยู่ ฉันจะปรับปรุงโค้ดและ / หรือฟังก์ชั่น AMDF เพื่อจัดการกับพื้นฐานขั้นต่ำได้อย่างไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.