পিচ সনাক্তকরণের উন্নতির জন্য টিপস


21

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

সুতরাং, আমি একটি এফএফটি অ্যালগরিদম ব্যবহার করে মৌলিক ফ্রিকোয়েন্সিটি অর্জন করতে সক্ষম হয়েছি এবং এই মুহুর্তে অ্যাপ্লিকেশনটি কোনওভাবে কার্যকর রয়েছে। তবে উন্নতির জন্য জায়গা রয়েছে, এখনই আমি কাঁচা পিসিএম এফএফটি অ্যালগরিদমকে প্রেরণ করছি, তবে আমি ভাবছিলাম যে সম্ভবত কিছু প্রাক / পোস্ট অ্যালগরিদম / ফিল্টার রয়েছে যা সনাক্তকরণের উন্নতি করতে পারে। আপনি কোন পরামর্শ দিতে পারেন?

আমার মূল সমস্যাটি হ'ল যখন এটি একটি নির্দিষ্ট ফ্রিকোয়েন্সি সনাক্ত করে এটি 1-2 সিসির জন্য ফ্রিকোয়েন্সিটি দেখায় এবং তারপরে অন্যান্য এলোমেলো ফ্রিকোয়েন্সিগুলিতে ঝাঁপ দেয় এবং শব্দটি অবিচ্ছিন্ন থাকলেও আবার ফিরে আসে।

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

উত্তর:


20

আমি অনুমান করি যে অন্যান্য ফ্রিকোয়েন্সিগুলি এটি পায় মৌলিকের সুরেলা? আপনি যদি 100 হার্জেড খেলছেন এবং এর পরিবর্তে এটি 200 হার্জ বা 300 হার্জ প্রতিরোধ করে? প্রথমত, আপনার গিটারের সম্ভাব্য ফ্রিকোয়েন্সিগুলির মধ্যে আপনার অনুসন্ধানের স্থান সীমাবদ্ধ করা উচিত। আপনার প্রয়োজন সর্বাধিক মৌলিক এবং এটির সীমাবদ্ধ সন্ধান করুন।

মৌলিকটি সুরেলা (বা পুরোপুরি অনুপস্থিত, তবে এটি গিটারের কোনও সমস্যা নয়) এর চেয়ে কম পরিমাণে কম থাকলে স্বতঃসংশ্লিষ্টতা মৌলিক সন্ধানে এফএফটি এর চেয়ে আরও ভাল কাজ করবে :

এখানে চিত্র বর্ণনা লিখুন

আপনি মৌলিক উপর জোর দেওয়া এবং সুরেলা কমাতে নিম্ন ফ্রিকোয়েন্সিগুলি ওজন করার চেষ্টা করতে পারেন, বা এর মতো শীর্ষ-বাছাই করা অ্যালগরিদম ব্যবহার করতে পারেন এবং তারপরে ফ্রিকোয়েন্সিতে সর্বনিম্ন চয়ন করতে পারেন।

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

আপনি আরও সঠিক শিখর পেতে ইন্টারপোলেশন ব্যবহার করতে পারেন। বর্ণালীটির লগ নিন, তারপরে শিখর এবং দুটি প্রতিবেশী পয়েন্টের সাথে একটি প্যারোবোলার ফিট করুন এবং প্যারোবোলার আসল শিখরটি সন্ধান করুন। যদিও আপনার এত বেশি নির্ভুলতার প্রয়োজন নেই।

এখানে এই সব জন্য আমার উদাহরণ পাইথন কোড


এটি আমি খুঁজছিলাম, খুব ভাল উত্তর, আপনাকে ধন্যবাদ!
ভ্যালেন্টিন রাদু

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

@ জেসনআর এই সত্যটি দিয়েছিলেন যে এটি এমন একটি পরিবেশে কাজ করার জন্য তৈরি করা হয়েছে যেখানে উচ্চ-শক্তি হস্তক্ষেপের সুরের সম্ভাবনা সত্যিই কম, আপনি কি হ্যামিং উইন্ডো ব্যবহার না করাই ভাল বলে মনে করেন?
ভ্যালেন্টাইন রাদু

1
আমি নিশ্চিত করতে পারি যে হ্যামিং উইন্ডোটি ব্যবহার করে আমার পড়াশোনা অবিচ্ছিন্ন রাখার লক্ষ্যটির আরও কাছে এসে গেছে। এখনই, যখন আমি একটি এ 4 খেলি আমি বেশিরভাগ সময় 440 হার্জেড পাই এবং কেবল খুব বিরল আমি 650 হার্জ বা তার মতো ঘনিষ্ঠ পাঠ পাই। আমি অনুমান করছি সেগুলি কি সুরেলা? এছাড়াও, আমি লক্ষ্য করতে সাহায্য করতে পারি না যে উচ্চতর ফ্রিকোয়েন্সিটির জন্য অ্যাপটি ত্রুটিহীনভাবে কাজ করে এবং কমের জন্য এটি ব্যর্থ হতে শুরু করে। সম্ভবত যেহেতু আমি পিকের দৈর্ঘ্যের ফ্রিকোয়েন্সি বিন সনাক্ত করতে এবং কম ফ্রিকোয়েন্সিগুলির জন্য সর্বদা মৌলিক নয় এফটিটিটি ব্যবহার করছি?
ভ্যালেন্টাইন রাদু 13:53

1
@ মাইন্ডনয়েজ: 660 হার্জ 440 হার্জ এর সুরেলা নয়, তবে এটি 220 হার্জ এর সুরেলা বা 440 এর উপরে একটি নিখুঁত পঞ্চম। অন্য স্ট্রিং অনুরণন বা বিকৃতি বা কিছু হতে পারে? আপনি যদি এফএফটি প্লট করতে পারেন এবং এটি দেখতে পারেন তবে এই জাতীয় সমস্যাগুলি নির্ধারণ করা অনেক সহজ। হ্যাঁ, কম ফ্রিকোয়েন্সি উচ্চতরগুলির সাথে তুলনামূলকভাবে ফিল্টার হতে পারে এবং হ্রাস করা যেতে পারে যান্ত্রিক প্রভাব দ্বারা বা আপনার এনালগ সার্কিটের দ্বারা by
এন্ডোলিথ

12

পিচটি কোনও এফএফটির শীর্ষ মাত্রার ফ্রিকোয়েন্সি বিনের মতো নয়। পিচ একটি মানব মনো-শাব্দ ঘটনা a পিচ সাউন্ডে একটি অনুপস্থিত বা খুব দুর্বল মৌলিক (কিছু ভয়েস, পিয়ানো এবং গিটার শোনায় প্রচলিত) এবং / বা এর বর্ণালীতে প্রচুর শক্তিশালী ওভারটোনস থাকতে পারে যা পিচ ফ্রিকোয়েন্সিকে ছাপিয়ে যায় (তবে এখনও সেই পিচ নোট হিসাবে একটি মানুষের দ্বারা শোনা যায়) । সুতরাং যে কোনও এফএফটি পিক ফ্রিকোয়েন্সি সনাক্তকারী (এমনকি কিছু উইন্ডোং এবং ইন্টারপোলেশন সহ) পিচ অনুমানের একটি শক্তিশালী পদ্ধতি হবে না।

এই স্ট্যাকওভারফ্লো প্রশ্নে পিচ অনুমানের কিছু বিকল্প পদ্ধতির একটি তালিকা রয়েছে যা আরও ভাল ফলাফল দিতে পারে।

যুক্ত: আপনি যদি গিটার শোনার জন্য এটি করছেন, তবে মনে রাখবেন যে সর্বনিম্ন গিটারের স্ট্রিংগুলি প্রকৃতপক্ষে কিছুটা ইনারমনিক ওভারটোন তৈরি করতে পারে, ফলে পিচ অনুমান আরও বেশি কঠিন হয়ে যায়, কারণ মানুষের কান শুনতে পিক ফ্রিকোয়েন্সি শুনতে পাবে ওভারটোনগুলির উপ-গুণকের সাথে আরও ঘনিষ্ঠভাবে সম্পর্কিত স্ট্রিংয়ের আসল মৌলিক কম্পনের চেয়ে বেশি frequency

সংযুক্ত # 2: এটি প্রায়শই জিজ্ঞাসা করা হয় যে আমি এই বিষয়টিতে একটি দীর্ঘ ব্লগ পোস্ট লিখেছি: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft-fre वारंवार.html


আপনি কেবলমাত্র আমাদের উল্লেখ করেছেন এমন ব্লগটি সন্ধান করেছেন (এবং এতে মন্তব্য করেছেন)।
রবার্ট ব্রিস্টো-জনসন

5

আমি বহু বছর ধরে পলিফোনিক সংগীতে পিচ সনাক্তকরণ নিয়ে গবেষণা করতে ব্যয় করেছি - এমপি 3 রেকর্ডিংয়ের মধ্যে গিটারের একক নোট সনাক্ত করার মতো। আমি উইকিপিডিয়ায় একটি বিভাগও লিখেছিলাম যা প্রক্রিয়াটির একটি সংক্ষিপ্ত বিবরণ দেয় (নীচের লিঙ্কে "পিচ সনাক্তকরণ" উপবিধানটি দেখুন)।

যখন একটি একক কী পিয়ানোতে চাপানো হয়, আমরা যা শুনি তা কেবলমাত্র শব্দ কম্পনের একটি ফ্রিকোয়েন্সি নয়, বিভিন্ন গাণিতিকভাবে সম্পর্কিত ফ্রিকোয়েন্সিগুলিতে সংঘটিত একাধিক শব্দ কম্পনের সংমিশ্রণ । বিভিন্ন ফ্রিকোয়েন্সিগুলিতে এই সংমিশ্রনের কম্পনের উপাদানগুলিকে সুরেলা বা পার্টিয়াল হিসাবে উল্লেখ করা হয়। উদাহরণস্বরূপ, আমরা পিয়ানোতে মিডিল সি কী টিপলে, সংমিশ্রনের সুরেলাগুলির পৃথক ফ্রিকোয়েন্সিগুলি 261.6 হার্জ হার্ট থেকে মৌলিক ফ্রিকোয়েন্সি হিসাবে শুরু হবে, 523 হার্জ 2 য় হারমোনিক হবে, 785 হার্জ 3 য় হারমোনিক হবে, 1046 হার্জ হবে চতুর্থ হারমোনিক হোন ইত্যাদি The

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

এখন অবসর গ্রহণের পরে, আমি পিচস্কোপ প্লেয়ার নামে একটি নিখরচায় অ্যাপ্লিকেশনটির মধ্যে আমার পিচ সনাক্তকরণ ইঞ্জিনের উত্স কোডটি প্রকাশ করার সিদ্ধান্ত নিয়েছি । পিচস্কোপ প্লেয়ার ওয়েবে উপলভ্য, এবং আপনি আপনার পছন্দের একটি এমপি 3 ফাইলে আমার অ্যালগরিদমকে কাজ করতে উইন্ডোজের জন্য এক্সিকিউটেবল ডাউনলোড করতে পারেন। গিটহাব ডট কমের নীচের লিঙ্কটি আপনাকে আমার সম্পূর্ণ উত্স কোডে নিয়ে যাবে যেখানে আপনি দেখতে পাচ্ছেন যে আমি কীভাবে কাস্টম লোগারিদমিক ডিএফটি ট্রান্সফর্মের মাধ্যমে সুরেলাগুলি সনাক্ত করতে পারি এবং তারপরে পার্টিয়ালগুলি (হারমোনিকস) সন্ধান করি যার ফ্রিকোয়েন্সিগুলি সঠিক সংখ্যার সম্পর্ককে সন্তুষ্ট করে যা একটি 'সংজ্ঞা দেয়' পিচ '।

আমার পিচ সনাক্তকরণ অ্যালগরিদম আসলে একটি দুটি পর্যায় প্রক্রিয়া: ক) প্রথমে স্কেলপিচ সনাক্ত করা হয় ('স্কেলপিচ' এর 12 টি পিচের মান রয়েছে: {ই, এফ, এফ #, জি, জি #, এ, এ #, বি, সি, সি #, ডি , ডি #}) খ) ও পরে ScalePitch নির্ধারিত হয়, তারপর অক্টেভ 4 সম্ভব অক্টেভ-প্রার্থীদের নোট জন্য সব সুরবিজ্ঞান পরীক্ষা দ্বারা গণনা করা হয়। অ্যালগরিদমটি একটি পলিফোনিক এমপি 3 ফাইলের মধ্যে সময়ে যে কোনও মুহুর্তে সর্বাধিক প্রভাবশালী পিচ (একটি সংগীতের নোট) সনাক্ত করতে ডিজাইন করা হয়েছে। এটি সাধারণত একটি যন্ত্রের একক নোটের সাথে মিলে যায়। আমার 2 স্টেজ পিচ সনাক্তকরণ অ্যালগরিদমের সি ++ উত্স কোডে যারা আগ্রহী তারা গিটহাব ডট কমের এসপিচালেকসিপিপি ফাইলের মধ্যে এসিমেট_স্কেলপিচ () ফাংশন থেকে শুরু করতে চাইতে পারেন।

https://github.com/CreativeDetectors/PitchScope_Player

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

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

এখানে চিত্র বর্ণনা লিখুন

নীচের চিত্রটি অক্টেভে সনাক্তকরণের অ্যালগরিদমটি দেখায় যা আমি সঠিক অষ্টাভ-প্রার্থী নোট (যা সঠিক ফান্ডামেন্টাল) বাছাই করতে বিকাশ করেছি, একবার সেই নোটের জন্য স্কেলপিচ নির্ধারণ করা হয়েছে। সি ++ তে এই পদ্ধতিটি দেখতে ইচ্ছুকদের ফিনড্যাঙ্কিডিডালসারসিপি নামে পরিচিত ফাইলের ভিতরে থাকা ক্যালস_বেস্ট_অ্যাকটা_ক্যানডিট () ফাংশনে যেতে হবে, যা গিটহাবের আমার উত্স কোডে রয়েছে।

এখানে চিত্র বর্ণনা লিখুন


জেমস, আপনার ডিএফটি পিচ সনাক্তকারী কি অনুপস্থিত (বা দুর্বল) মৌলিক সাথে নোটগুলি সনাক্ত করে?
রবার্ট ব্রিস্টো-জনসন

হ্যাঁ, আমার 2 পর্যায় পিচ সনাক্তকরণ অ্যালগরিদম নোটগুলি সনাক্ত করবে, যদিও সিগন্যালের "অনুপস্থিত (বা দুর্বল) মৌলিক" রয়েছে - এটি এই 2 পর্যায়ের প্রক্রিয়ার একটি বড় শক্তি। মৌলিকটি দ্বিতীয় পর্যায়ে নির্ধারিত হয় যখন আপনি লোগারিদমিক ডিএফটি ডায়াগ্রামের নোটগুলির জন্য দেখতে পারা সময়-প্রস্থগুলিতে অক্টাভে সনাক্তকরণ সম্পাদন করা হয়। যেহেতু এই পিচ সনাক্তকরণ ফাংশনটি পলিফোনিক এমপি 3 সিগন্যালের বিভ্রান্তির মধ্যে কাজ করে, এটি নোটগুলি ফান্ডামেন্টাল সহ অনেকগুলি সুরেলা অনুপস্থিত সনাক্ত করে। আমি এই উত্তরে সবেমাত্র একটি দ্বিতীয় চিত্রটি যুক্ত করেছি যা আমার অক্টাভা সনাক্তকরণের অ্যালগরিদমটি ব্যাখ্যা করে।
জেমস পল মিলার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.