ข้อ จำกัด ของผลิตภัณฑ์ Harmonic Spectrum ในการตรวจจับพิทช์


10

ฉันใช้อัลกอริทึมการตรวจจับพิชชันโดยใช้ HPS และฉันประสบปัญหา ฉันเป็นผู้เริ่มต้นด้วยการประมวลผลสัญญาณและเว็บไซต์นี้ช่วยฉันมาก่อนดังนั้นฉันจึงควรถาม

สำหรับสนามที่สูงขึ้น ( eg. >C6:1046.50hz) ฉันกำลังเริ่มรับข้อมูลขยะจาก HPS ยิ่งระดับเสียงสูงขึ้นเท่าไรฉันก็ยิ่งได้รับขยะมากขึ้นเท่านั้น (โดยขยะฉันหมายถึงความถี่ที่ไม่ใช่ข้อผิดพลาดระดับแปดเสียงหรือเสียงประสานและอยู่ที่ประมาณ 1Hz-20Hz)

สิ่งที่ฉันสังเกตุเห็น:

  1. ผลลัพธ์นั้นเลวร้ายที่สุดสำหรับสนามที่สูงกว่าถ้าพื้นฐานอยู่เหนือ A6 หรือมากกว่านั้นฉันได้รับข้อมูลขยะเท่านั้น

  2. FFT ใช้งานได้ดีแม้ในระดับเสียงที่สูงมาก (โดยละเอียดฉันหมายถึงจุดสูงสุดของมันแสดงให้เห็นถึงพื้นฐานหรือหนึ่งเดียวของฮาร์โมนิกของมัน แต่ไม่ใช่ขยะ)

  3. ถ้าฉันลดจำนวนของฮาร์โมนิกที่ฉันคำนึงถึงสำหรับ HPS ขยะจะลดลง แต่นั่นทำให้ยากที่จะแยกแยะระหว่างพื้นฐานและฮาร์โมนิก

นี่คืออัลกอริทึมของฉัน:

->raw buffer -> hann window, 16384 samples, 50% overlap -> zero padding -> FFT -> HPS

ความช่วยเหลือใด ๆ ที่เป็นที่นิยม!

อัปเดต 1: ดังนั้นมีอีกสองสามสิ่งที่ฉันต้องการเพิ่ม:

  1. อัตราตัวอย่างที่ฉันบันทึกที่ 44100 Hz
  2. ฉันสังเกตว่าพฤติกรรมนี้แทบจะมองไม่เห็นในกีตาร์ แต่มองเห็นได้ชัดเจนบนเปียโนดิจิตอล (สำหรับโน้ตตัวเดียวกัน)
  3. นี่คืออัลกอริทึม HPS ของฉันบางทีคนที่มีประสบการณ์มากขึ้นสามารถมองเห็นปัญหาได้

    int hps(float* spectrum, int spectrumSize, int harmonics) {
    
    int i, j, maxSearchIndex, maxBin;
    maxSearchIndex = spectrumSize/harmonics;
    
    maxBin = 1;
    for (j=1; j<=maxSearchIndex; j++) {
        for (i=1; i<=harmonics; i++) { 
            spectrum[j] *= spectrum[j*i];
        }
        if (spectrum[j] > spectrum[maxBin]) {
            maxBin = j;
        }
    }
    
    // Fixing octave too high errors    
    int correctMaxBin = 1;
    int maxsearch = maxBin * 3 / 4;
    for (i=2; i<maxsearch; i++) {
        if (spectrum[i] > spectrum[correctMaxBin]) {
            correctMaxBin = i;
        }
    }
    if (abs(correctMaxBin * 2 - maxBin) < 4) {
        if (spectrum[correctMaxBin]/spectrum[maxBin] > 0.2) {
            maxBin = correctMaxBin;
        }
    }
    
    return maxBin;
    }
    

1
อัตราตัวอย่างของคุณคือเท่าไหร่ คุณมีตัวกรองการขจัดรอยหยักอะไรก่อน ADC
Martin Thompson

อัตราตัวอย่างการบันทึกของฉันคือ 44100 Hz ขอโทษที่ฉันไม่ได้พูดถึงมันมาก่อน
Valentin Radu

1. คุณต้องพล็อตสเปกตรัมกลางและผลิตภัณฑ์ที่ใช้ในการคำนวณ HPS และดูว่ามันได้รับค่าที่ไม่ถูกต้องจากที่ใด 2. กีตาร์และเปียโนเป็นสิ่งที่ไม่น่าไว้วางใจซึ่งจะทำให้ยอดเขาไม่เรียงกันอย่างสมบูรณ์แบบ ไม่แน่ใจว่าจะมีผลกระทบเท่าใด แต่ HPS ถือว่าสเปคตรัมฮาร์มอนิกอย่างสมบูรณ์แบบ
endolith

คำตอบ:


3

อาจเป็นไปได้ว่ามีสัญญาณฮาร์มอนิกน้อยมากที่ส่งสัญญาณในระดับเสียงสูงกว่านี้ อัลกอรึทึมของ HPS นั้นค่อนข้างง่ายและอาศัยฮาร์มอนิกบนเหล่านั้นในการซ้อนกันจนกว่าพื้นฐานจะโผล่ออกมาจากพื้นหลัง แน่นอนเราควรสงสัยว่าอัตราการสุ่มตัวอย่างของคุณคืออะไร หากเป็น 8000 เฮิร์ตซ์แสดงว่ามีห้องสำหรับเสียงประสาน 3 สนามในระยะ 1,000 เฮิร์ตซ์ ...


ฉันบันทึกที่ 44100 เฮิร์ตซ์ แต่คำตอบของคุณยังทำให้ฉันคิดถึงมัน บางทีมันอาจเกี่ยวข้องกับสิ่งนั้นและฉันควรตัดสินใจว่าจะใช้ฮาร์โมนิกจำนวนมากเท่าไรขึ้นอยู่กับจำนวนพีคที่ฉันพบใน FFT ดั้งเดิมของฉัน สิ่งที่ฉันสังเกตเห็นอีกอย่างก็คือมันทำงานได้ดีกว่ากับเครื่องสายมากกว่าเปียโนไฟฟ้าของฉันนี่เป็นเพราะฮาร์มอนิกส์เป็นสัปดาห์ในกรณีของเปียโน
Valentin Radu

@mindnoise: เครื่องสายโค้งคำนับมีฮาร์โมนิในขณะที่ตราสารสตริง plucked หรือหลงมีen.wikipedia.org/wiki/Inharmonicity ไม่แน่ใจว่าเป็นส่วนหนึ่งของปัญหาหรือไม่
endolith

@endolith อาจจะเป็นอย่างยิ่งเพราะ "ความยืดหยุ่นน้อยสตริงที่มี (นั่นคือสั้นหนาและแข็งพวกเขาจะ) inharmonicity มากกว่าที่พวกเขาแสดงให้เห็น ." และฉันได้รับข้อผิดพลาดตรงกับประเภทของสตริงเหล่านั้น (โน้ตสูง) ที่จริงแล้วพื้นฐานคือความถี่ที่แข็งแกร่งที่สุดใน FFT ของฉันเสมอเมื่อเกิดข้อผิดพลาดดังนั้นมันจึงเกี่ยวข้องกับฮาร์โมนิกหรืออัลกอริทึม HPS แต่ฉันไม่แน่ใจว่าทำไมฉันถึงได้ขยะ 20-50 เฮิร์ตสำหรับพื้นฐาน 1500 เฮิร์ตซ์ จะโพสต์อัลกอริทึม hps
Valentin Radu

1
@ mindnoise: "Inharmonicity ส่วนใหญ่มีผลต่อโน้ตที่ต่ำที่สุดและสูงที่สุดในเปียโน ... สตริงที่ต่ำที่สุดซึ่งจะต้องยาวที่สุดจะถูก จำกัด ด้วยขนาดของเปียโนมากที่สุดนักออกแบบของเปียโนสั้นถูกบังคับให้ใช้ สายหนาเพื่อเพิ่มความหนาแน่นของมวลและถูกผลักดันเข้าสู่ inharmonicity สายสูงสุดจะต้องอยู่ภายใต้ความตึงเครียดที่ยิ่งใหญ่ที่สุด แต่ก็ต้องผอมเพื่อให้มีความหนาแน่นของมวลต่ำความแข็งแรงที่ จำกัด ของเหล็กบังคับให้นักออกแบบเปียโนใช้สั้นมาก สตริงที่มีความยาวคลื่นสั้นจึงสร้าง
endolith

2

สำหรับเครื่องมือบางตัวจำนวนฮาร์มอนิกที่สำคัญที่ผลิตได้อาจเปลี่ยนแปลงไปตามระดับพิทช์ที่แตกต่างกัน ส่วนของบันทึกย่อที่ต่ำที่สุดและสูงที่สุดสำหรับเครื่องมือทางกายภาพบางชนิดอาจแสดงให้เห็นถึงการไม่ลงรอยกันมากขึ้น จำนวนฮาร์มอนิกที่สามารถอยู่ด้านล่างของตัวกรอง anti-alias ที่ตัดใต้ Fs / 2 จะลดลงอย่างแน่นอนสำหรับโน้ตที่สูงมาก เครื่องมือประเมินระดับพิตช์ HPS ของคุณต้องการพิจารณาปัจจัยเหล่านั้น

การโจมตีชั่วคราวของเครื่องมือบางชนิดอาจสร้างเสียงรบกวนแบบอาห์มานิกซึ่งอาจซ้อนทับกับพื้นที่ค้นหา HPS ของสนามบางสนามหรือเสียงประสานที่สำคัญ

อาจเป็นไปได้ว่า overtones ของความถี่ที่สูงมาก ๆ อาจรวมถึง Fs / 2 หากตัวกรอง low pass ก่อนเสียง ADC นั้นไม่มีการลดทอนสัญญาณย่านความถี่ที่ดีพอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.