পিচ সনাক্তকরণে সুরেলা পণ্য বর্ণালী সীমাবদ্ধতা


10

আমি এইচপিএস ব্যবহার করে একটি পিচ সনাক্তকরণ অ্যালগরিদম তৈরি করেছি এবং আমি একটি সমস্যার মুখোমুখি হয়েছি। আমি সিগন্যাল প্রসেসিংয়ের সাথে এক শিক্ষানবিস এবং এই সাইটটি আমাকে আগে সহায়তা করেছিল, তাই আমার জিজ্ঞাসা করা উচিত।

উচ্চতর পিচের জন্য ( eg. >C6:1046.50hz) আমি এইচপিএস থেকে আবর্জনা ডেটা পেতে শুরু করছি। আমি যত বেশি আবর্জনা পেয়েছি পিচটি তত বেশি হবে (আবর্জনার দ্বারা আমি ফ্রিকোয়েন্সিগুলি বোঝাই যা অষ্টক ত্রুটি বা সুরেলা নয় এবং 1Hz-20Hz এর কাছাকাছি)

আমি যা অনুভব করে দেখেছি:

  1. ফলাফলগুলি উচ্চতর পিচের জন্য সবচেয়ে খারাপ, যদি মৌলিক A6 বা তার বেশি হয় তবে আমি কেবল জঞ্জালের ডেটা পাই।

  2. এফএফটি এমনকি খুব উঁচু পিচের জন্যও সূক্ষ্মভাবে কাজ করে, (সূক্ষ্মভাবে আমি বলতে চাইছি যে এর শিখরটি মৌলিক বা এর সুরেলাগুলির মধ্যে একটি দেখায়, তবে আবর্জনা নয়)

  3. যদি আমি এইচপিএসের জন্য বিবেচনা করি এমন সুরেলা সংখ্যা কম করি তবে আবর্জনা হ্রাস পায়, তবে এটি মৌলিক এবং সুরেলাগুলির মধ্যে বৈষম্য করা আরও শক্ত করে তোলে।

এখানে আমার অ্যালগরিদম:

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

কোন সাহায্য প্রশংসা করা হয়!

আপডেট 1: সুতরাং, আমি আরও কয়েকটি জিনিস যুক্ত করতে চাই:

  1. আমি যে নমুনা রেটে রেকর্ড করছি তা হ'ল 44100 হার্জ
  2. আমি দেখেছি যে এই আচরণটি গিটারে সবে দৃশ্যমান, তবে একটি ডিজিটাল পিয়ানোতে খুব একই দৃশ্যমান (একই প্লে নোটের জন্য)
  3. এখানে আমার এইচপিএস অ্যালগরিদম, সম্ভবত আরও বেশি অভিজ্ঞতার সাথে কেউ সমস্যা চিহ্নিত করতে পারে।

    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
আপনার নমুনার হার কত? আপনি এডিসির আগে কী অ্যান্টি-এলিয়জিং ফিল্টার পেয়েছেন?
মার্টিন থম্পসন

আমার রেকর্ডিংয়ের নমুনার হার 44100 হার্জ, দুঃখিত আমি এর আগে এটি উল্লেখ করিনি।
ভ্যালেন্টিন রাদু

1. আপনাকে এইচপিএস গণনায় ব্যবহৃত ইন্টারমিডিয়েট স্পেকট্রা এবং পণ্যগুলি প্লট করতে হবে এবং এটি কোথায় ভুল মান পাচ্ছে তা দেখতে হবে। ২. গিটার এবং পিয়ানো হ'ল ইনহারমনিক , যার ফলে শিখরগুলি পুরোপুরি লাইন আপ না করে। এর কতটা প্রভাব পড়বে তা নিশ্চিত নয়, তবে এইচপিএস পুরোপুরি সুরেলা বর্ণালী ধরেছে।
এন্ডোলিথ

উত্তর:


3

এটি হতে পারে যে উচ্চতর পিচগুলিতে খুব কম সুরেলা পার্টিয়ালগুলি সিগন্যালে উপস্থিত রয়েছে। এইচপিএস অ্যালগরিদমটি বেশ সহজ এবং পটভূমি থেকে মৌলিক উত্থান না হওয়া পর্যন্ত upperর্ধ্ব সুরেলাগুলির উপর নির্ভর করে। অবশ্যই আমাদের অবাক করা উচিত, আপনার নমুনার হার কত? যদি এটি 8000 হার্জেড হয়, তবে 1000 1000 হার্জ পিচের 3 সুর সুরক্ষার জন্য কেবলমাত্র জায়গা আছে ...


আমি 44100 হার্জেড রেকর্ড করছি, তবে তবুও আপনার উত্তর আমাকে এ সম্পর্কে ভাবতে বাধ্য করেছে। সম্ভবত এটি সম্পর্কিত কিছু এবং আমার আসল এফএফটিতে আমি কতগুলি পিক পেয়েছি তার উপর নির্ভর করে আমার এইচপিএসে কতগুলি সুরেলা বিবেচনা করতে হবে তা সিদ্ধান্ত নেওয়া উচিত। আরেকটি জিনিস আমি লক্ষ্য করেছি যে এটি আমার বৈদ্যুতিক পিয়ানোয়ের চেয়ে স্ট্রিং ইন্সট্রুমেন্টগুলির সাথে আরও ভালভাবে কাজ করে, এটি প্যানোর ক্ষেত্রে হারমোনিকস সাপ্তাহিক হওয়ার কারণ হতে পারে?
ভ্যালেন্টিন রাদু

@ মাইন্ডনয়েজ: ধনুকের স্ট্রিং যন্ত্রগুলি সুরেলা হয়, যখন স্ট্রিং যন্ত্রগুলি তোলা বা স্ট্রাইক করা হয় en.wikedia.org/wiki/Inharmonicity । সমস্যাটির অংশ কিনা নিশ্চিত না
এন্ডোলিথ

@ এন্ডোলিথ বিশেষত কারণ হতে পারে: "স্ট্রিংগুলি যত কম ইলাস্টিক থাকে ( তত সংক্ষিপ্ত, ঘন এবং কড়া হয়), তারা তত বেশি অকার্যকরতা প্রদর্শন করে " " এবং আমি ঠিক সেই ধরণের স্ট্রিংগুলিতে ত্রুটি পাচ্ছি (উচ্চ নোট)। আসলে, ত্রুটিটি ঘটে গেলে আমার এফএফটি-তে সর্বদা সবচেয়ে শক্তিশালী ফ্রিক্স হয়, সুতরাং এটি অবশ্যই সুরেলা বা এইচপিএস অ্যালগরিদম সহ করতে হবে, তবে আমি নিশ্চিত না কেন আমি 1500 হার্জ এর মৌলিক জন্য 20-50hz আবর্জনা পাই get এইচপিএস অ্যালগরিদম পোস্ট করবে।
ভ্যালেন্টিন রাদু

1
@ মাইন্ডনয়েজ: "ইনহারমোনিসিটি পিয়ানোতে সর্বনিম্ন এবং সর্বোচ্চ নোটগুলিকে মূলত প্রভাবিত করে ... সর্বনিম্ন স্ট্রিংগুলি, যা দীর্ঘতম হতে হবে, এটি পিয়ানো আকারের দ্বারা সীমাবদ্ধ short একটি ছোট পিয়ানো ডিজাইনার ব্যবহার করতে বাধ্য হয় ভর ঘনত্ব বাড়ানোর জন্য পুরু স্ট্রিংগুলি এইভাবে ইনহারমনিসিটিতে পরিচালিত হয় সর্বোচ্চ স্ট্রিংগুলি সবচেয়ে বেশি উত্তেজনার মধ্যে থাকতে হবে, তবুও কম ভর ঘনত্বের জন্য পাতলা হতে হবে স্টিলের সীমিত শক্তি পিয়ানো ডিজাইনারকে খুব ছোট ব্যবহার করতে বাধ্য করে স্ট্রিংগুলির সংক্ষিপ্ত তরঙ্গদৈর্ঘ্য এইভাবে অবিচ্ছিন্নতা তৈরি করে। "
এন্ডোলিথ

2

কিছু যন্ত্রের জন্য, উত্পাদিত উল্লেখযোগ্য সুরেলাগুলির সংখ্যা বিভিন্ন পিচ রেঞ্জের পরিবর্তে পরিবর্তিত হতে পারে। কিছু শারীরিক যন্ত্রের জন্য অতি নিম্নতম এবং সর্বোচ্চ নোটের পার্টিয়ালগুলি বৃহত্তর ইনহারমনিসিটি প্রদর্শন করতে পারে। এফএস / 2 এর নীচে অ্যান্টি-ওরফে ফিল্টার কাটার অফের নীচে ফিট করতে পারে এমন হারমোনিক্সের সংখ্যা খুব উচ্চ নোটের জন্য অবশ্যই কম হবে। আপনার এইচপিএস পিচ অনুমানক এমডি এই কারণগুলিকে আমলে নিতে চায়।

কিছু যন্ত্রের আক্রমণ ক্ষণস্থায়ী একটি আহরমনিক বর্ণালী ব্যান্ড উত্পাদন করতে পারে যা কিছু পিচ বা তাদের উল্লেখযোগ্য সুরেলাগুলির এইচপিএস অনুসন্ধান অঞ্চলের সাথে ওভারল্যাপ হতে পারে।

সম্ভাব্যভাবে, অডিও এডিসির আগে লো পাস ফিল্টারটিতে যথেষ্ট পরিমাণে স্টপ ব্যান্ডের মনোযোগ না থাকলে খুব উচ্চ ফ্রিকোয়েন্সিগুলির ওভারটোনগুলি এমনকি Fs / 2 এর চারপাশে মোড়ানো হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.