مهندسي بينهايت: شزم؛ تجلي قدرت فيزيك در دنياي موسيقي
آيا تاكنون در خصوص سازوكار سرويس تشخيص موسيقي شزم كنجكاو شدهايد؟ با توجه به مقالهي پژوهشي منتشرشده توسط يكي از بنيانگذاران شزم، بهنام آوري لي-چون ونگ، فرآيندي موسوم به «شناسايي هويت صوتي»، پايهي تمام پردازشهاي صورتگرفته در پس سرويس شزم محسوب ميشود؛ اما شناسايي هويت صوتي به چه مفهوم است؟ با اخبار تخصصي، علمي، تكنولوژيكي، فناوري مرجع متخصصين ايران همراه باشيد تا سازوكار شزم را زير ذرهبين قرار دهيم.
براي درك آنچه در اين مقالات خواهد آمد، بايد بهصورت ابتدايي با مفاهيمي همچون پردازش سيگنال آشنا شويم؛ از اين رو در ابتدا كار خود را با مفاهيم پايهاي تئوري موسيقي و پردازش سيگنال آغاز ميكنيم و با مكانيزمهاي موجود در بطن شزم، آن را به پايان ميرسانيم. براي مطالعهي اين مقالهي طولاني به دانشي نياز نخواهيد داشت؛ اما از آنجايي كه با علوم كامپيوتر و رياضيات درگير خواهيم بود، بهتر است كه پسزمينهي علمي مناسبي را بهخصوص براي مطالعهي بخشهاي پاياني داشته باشيد. چنانچه با واژههايي همچون اُكتاو، فركانس، نمونهبرداري و نشت طيفي آشنايي داريد، ميتوانيد از مطالعهي بخش اول صرفانديشه متخصصين كنيد. شما ميتوانيد از فهرست مطالب براي دسترسي سريعتر به موضوعات استفاده كنيد.
موسيقي و فيزيك
صوت، ارتعاش يا موجي است كه از طريق هوا يا آب منتشر شده و توسط گوش ادراك ميشود؛ بهعنوان مثال هنگامي كه در حال گوشدادن به موسيقي هستيد، هدفونها ارتعاشاتي را توليد ميكنند كه تا زمان رسيدن به گوش شما، از طريق هوا منتشر ميشوند. از انديشه متخصصينات موجي، نور نيز يك ارتعاش محسوب ميشود؛ اما بهجاي گوش، چشم توانايي ادراك آن را دارد. يك ارتعاش را ميتوان از طريق موجهاي سينوسي مدلسازي كرد. در اين قسمت سعي داريم تا با چگونگي توصيف فيزيكي و متخصص موسيقي آشنا شويم.
تن خالص در برابر صوت حقيقي
تن خالص، تُني با شكل موج سينوسي است، امواج سينوسي توسط مشخصههاي زير توصيف ميشود:
مشخصههاي يادشده توسط گوش انسان در قالب صوت ادراك ميشود. گوش انسان در بهترين حالت، تنهاي خالص با فركانس ۲۰ تا ۲۰٬۰۰۰ هرتز را ميشنود؛ اما اين بازه با گذر زمان و افزايش سن انسان، محدودتر ميشود. براي مقايسه بايد اشاره كنيم كه نور از موجهاي سينوسي با فركانس بين ۱۰۱۴ × ۴ تا ۱۰۱۴ × ۷.۹ هرتز تشكيل ميشود.
شما ميتوانيد محدودهي شنوايي خود را با ويديوي زير مطالعه كنيد، اين ويديو، تمام تنهاي حقيقي بين ۲۰ هرتز تا ۲۰ كيلوهرتز را توليد ميكند. من در اين ويديو قادر به شنيدن محدودهي ۲۰ تا ۱۸ هزار هرتز بودم.
ادراك انسان از بلندي صدا به فركانس تن خالص بستگي دارد؛ بهعنوان مثال، يك تن خالص با دامنهي ۱۰ و فركانس ۳۰ هرتز، آرامتر از تن خالص ديگري با دامنهي ۱۰ و فركانس ۱۰۰۰ هرتز به گوش ميرسد. گوش انسان از يك مدل سايكوآكوستيك تبعيت ميكند كه در اين مقاله ميتوانيد، اطلاعات بيشتري را دربارهي آن بهدست آوريد. در تصوير زير ميتوانيد نمونهاي از يك موج سينوسي با فركانس ۲۰ هرتز و دامنهي يك را مشاهده كنيد:
بايد بدانيد كه تنهاي خالص در دنياي واقعي وجود ندارند و آنچه ما بهصورت روزمره ميشنويم، تركيبي از چندين تن خالص با دامنههاي متفاوت است.
در تصوير بالا ميتوانيد نمونهاي از صداي حقيقي را مشاهده كنيد كه از تركيب چندين موج سينوسي شكل گرفته است:
صداهاي واقعي ميتوانند تركيبي از هزاران تن خالص باشند.
نتهاي موسيقي
هر قطعهي موسيقي حاصل مجموعهاي از نتها است كه در زمان بهخصوصي اجرا ميشوند، هركدام از اين نتها مدتزمان و بلندي منحصربهفردي دارند.
مجموعهي نتها در قالب اكتاوهايي تقسيم ميشوند. در كشورهاي غربي، هر اكتاو، مجموعهاي از ۸ نت (اي، بي، سي، دي، ايي، اف، جي در بسياري از كشورهاي انگليسيزبان و دو – ر – مي – فا – سُل – لا – سي در كشورهاي لاتين غربي) محسوب ميشود. ويژگي اكتاوها بدين شرح است:
بسياري از آلات موسيقي، بيش از ۸ نت را در اكتاوها فراهم ميكنند، چنين نتهايي سميتُن يا نيمپرده ناميده ميشوند.
براي اكتاو چهارم (يا اكتاو سوم در كشورهاي لاتين غربي)، فركانس نتها بدين شكل است:
اگرچه ممكن است عجيب بهانديشه متخصصين برسد؛ اما حساسيت فركانسي گوش انسان، لگاريتمي است؛ بدين مفهوم:
گوشهاي انسان قادر به تشخيص تعداد يكساني از نتها هستند. خاطرنشان ميكنيم كه نت A4/La3 در فركانس ۴۴۰ هرتز، مرجعي استاندارد براي كاليبرهسازي ابزار آكوستيك و آلات موسيقي محسوب ميشود.
طنين
نواختن يك نت با گيتار، پيانو، ويولون يا يك هنرمند، به توليد صداي يكساني منجر نميشود؛ زيرا هر آلت موسيقي، طنين منحصربهفردي براي يك نت دلخواه دارد. براي هر آلت موسيقي، صداي توليدشده، انبوه فركانسهايي است كه مشابه يك نت دلخواه (نام علمي نت موسيقي، نواك است) به گوش ميرسند. اين صدا، يك فركانس پايه (كمترين فركانس) و چندين Overtone يا نت فرعي (هر فركانسي بالاتر از فركانس پايه) را در برميگيرد.
بسياري از آلتهاي موسيقي صداهاي نزديك به هارمونيك (همساز) را توليد ميكنند. براي چنين ابزارهايي، نتهاي فرعي، چندين فركانس پايه با نام هارمونيك هستند؛ بهعنوان مثال، تركيب تنهاي خالص A2 (پايه)، A4 و A6 هارمونيك هستند؛ اما تركيب تنهاي خالص A2، B3 و F5 غيرهارمونيك يا ناهمساز است. بسياري از سازهاي كوبهاي، مانند درام يا سنج، صداهاي غيرهارمونيك توليد ميكنند.
خاطرنشان ميكنيم كه نواك (نت موسيقي ادراكشده)، ممكن است در صداي توليدشده توسط يك ساز بهخصوص وجود نداشته باشد؛ بهعنوان مثال، چنانچه يك ساز صدايي با تنهاي خالص A4، A6 و A8 را توليد كند، مغز انسان صداي حاصل را در قالب يك نت A2 تشريح ميكند. در حالتي كه پايينترين فركانس در صدا A4 باشد، نت / نواك يك A2 خواهد بود، به اين پديده، از دست رفتن فركانس پايه گفته ميشود.
طيفنگاره
يك قطعهي موسيقي توسط چندين ساز و هنرمند نواخته ميشود، تمام اين سازها، تركيبي از موجهاي سينوسي در چندين فركانس را توليد ميكنند و در مجموع، صداي توليدشده از تركيب موجهاي سينوسي بهمراتب بزرگتري تشكيل ميشود. ميتوان با يك طيفنگاره، موسيقي را مشاهده كرد. در اغلب اوقات، طيفنگاره نموداري سهبعدي است:
نمودار زير، طيفنگارهي مربوط به صداي پيانو را نشان ميدهد. رنگها در طيفنگاره، دامنهي صدا را برحسب دسيبل نشان ميدهند.
نكتهي جالب توجه ديگر، تغيير شدت فركانسها با گذر زمان است، اين موضوع يكي ديگر از ويژگيهاي يك ساز محسوب ميشود كه آن را منحصربهفرد ميكند. اگر نوازنده بهجاي پيانو، ساز ديگري را بنوازد، الگوي تكامل فركانسها متفاوت خواهد بود و صداي حاصلشده نيز كمي تفاوت خواهد داشت؛ زيرا هر هنرمند / ساز، استايل منحصربهفردي دارد. از لحاظ متخصص، اين تكامل فركانسي، محدودهي (envelope) سيگنال صدا را اصلاح ميكند و اين محدوده بخشي از طنين محسوب ميشود.
براي آنكه ايدهاي ابتدايي از نوع كاركرد پروسهي شناسايي هويت صوتي در شزم بهدست آوريد، توجه شما را به طيفنگارهي بالا جلب ميكنيم كه در آن برخي از فركانسها (نمونههايي پايين) اهميت بيشتري نسبت به بقيه دارند. اگر تنها فركانسهاي قدرتمند را نگه داريم، چه پيش ميآيد؟
ديجيتاليسازي
مادامي كه از علاقهمندان به صفحهي گرامافون نباشيد، هنگام گوش دادن به موسيقي از فايلهاي ديجيتال (mp3، سيدي صوتي، ogg يا apple lossless) استفاده ميكنيد؛ اما هنرمندان موسيقي را بهصورت آنالوگ توليد ميكنند؛ بدين مفهوم كه موسيقي آنها در قالب بيت نيستند. براي آنكه موسيقي قابل ذخيرهسازي يا پخششدن در دستگاههاي الكترونيكي باشد، بايد بهصورت ديجيتال باشد. در اين بخش با چگونگي گذار از آنالوگ به ديجيتال آشنا ميشويم. آگاهي از چگونگي توليد موسيقي ديجيتال به ما در بخشهاي بعدي جهت تحليل يا دستكاري آن كمك خواهد كرد.
نمونهبرداري
سيگنالهاي آنالوگ پيوسته هستند؛ بدين مفهوم كه اگر شما يك ثانيه از سيگنال آنالوگي را انتخاب كنيد، ميتوانيد آن را به بيشمار قسمت تقسيم كنيد. در دنياي ديجيتال، نميتوان بينهايت اطلاعات را ذخيره كرد؛ از اين رو بايد يك واحد حداقلي، نظير يك ميليثانيه در اختيار داشته باشيد. در طول اين واحد از زمان، صوت نميتواند تغيير كند؛ بنابراين واحد زمان بايد بهاندازهاي كوتاه باشد كه موسيقي ديجيتال شبيه به نمونهي آنالوگ باشد و بهاندازهاي طولاني باشد كه بتوان فضاي مورد نياز براي ذخيرهي موسيقي را محدود كرد.
بهعنوان مثال، موسيقي مورد علاقهي خود را بهخاطر بياوريد؛ حال تصور كنيد كه صدا در اين موسيقي هر ۲ ثانيه يك بار تغيير كند، بيشك نتيجهي نهايي هيچ شباهتي به نمونهي اصلي نخواهد داشت. در چنين شرايطي بهلحاظ متخصص گفته ميشود كه صدا Aliased شده است؛ اين پديده زماني رخ ميدهد كه فركانس نمونهبرداري كمتر از دو برابر فركانس بيشينهي موجود در صوت باشد.
براي آنكه از كيفيت صداي موسيقي اطمينان حاصل كنيم، بايد واحد نمونهبرداري را بسيار كوچك، بهعنوان مثال در حد يك نانو ثانيه (۹- ۱۰) انتخاب كنيم، در اين شرايط كيفيت صداي حاصل بسيار بالا خواهد بود؛ اما فضاي كافي براي ذخيرهي موسيقي در اختيار نخواهيد داشت. به اين فرآيند نمونهبرداري گفته ميشود.
واحد استاندارد زمان در موسيقي ديجيتال، ۴۴۱۰۰ نموه به ازاي هر ثانيه است؛ اما اين فركانس ۴۴.۱ كيلوهرتزي از كجا آمده؟ در فصل نخست مقاله، گفتيم كه انسان در بهترين حالت ميتواند اصواتي با فركانس بين ۲۰ تا ۲۰ هزار هرتز را بشنود. براساس قضيهي نايكوئيست، براي آنكه بتوان سيگنالي با فركانس بين صفر تا ۲۰ هزار هرتز را گسستهسازي يا ديجيتالسازي كرد، بايد در هر ثانيه حداقل ۴۰ هزار بار نمونهبرداري كرد.
ايدهي موجود در پس چنين منطقي آن است كه براي قابل شناساييبودن يك سيگنال سينوسي با فركانس F، بايد در هر سيكل آن، حداقل دو نقطه وجود داشته باشد؛ بنابراين چنانچه فركانس نمونهبرداري دو برابر فركانس سيگنال باشد، در هر سيكل از سيگنال ابتدايي، دو نقطه خواهيد داشت. براي درك بهتر موضوع به تصوير زير توجه كنيد:
در نمودار بالا، صوتي با فركانس ۲۰ هرتز با استفاده از نرخ نمونهبرداري ۴۰ هرتزي، ديجيتال ميشود.
اگرچه خطوط حاصل از نمونهبرداري، فُرم يا دامنهاي مشابه منحني اصلي ندارند؛ اما فركانس سيگنال نمونهبرداريشده ثابت باقي مانده است. در ادامه توجه شما را به يك نمونهبرداري مناسب جلب ميكنيم:
در نمودار بالا صوتي با فركانس ۲۰ هرتز و سيگنال نمونهبرداريشدهاي را با فركانس ۳۰ هرتز مشاهده ميكنيد؛ بدين مفهوم كه سيگنال نمونهبرداريشده فركانس يكساني با سيگنال اصلي ندارد: تنها ۱۰ هرتز فاصله وجود دارد. چنانچه دقيقتر نگاه كنيد، مشاهده خواهيد كرد كه يك سيكل در سيگنال نمونهبرداريشده، دو سيكل در سيگنال اصلي را به نمايش ميگذارد، در اين حالت شاهد پديدهي Under Sampling هستيم.
نمودار بالا، موضوع مهم ديگري را نيز به تصوير ميكشد: چنانچه ميخواهيد سيگنالي بين صفر تا ۲۰ هزار هرتز را ديجيتال كنيد، بايد پيش از نمونهبرداري، فركانسهاي بالاتر از ۲۰ هزار هرتز را از سيگنال حذف كنيد، در غير اينصورت، فركانسهاي يادشده پس از نمونهبرداري به فركانسهايي بين صفر تا ۲۰ هزار هرتز بدل شده و صداهاي ناخواستهاي را ايجاد خواهند كرد كه به اين پديده Aliasing گفته ميشود.
بنابراين، چنانچه ميخواهيد موسيقي را بهخوبي از آنالوگ به ديجيتال تبديل كنيد، بايد حداقل نرخ نمونهبرداري ۴۰ هزار بار در ثانيه را انتخاب كنيد. شركتهايي همچون سوني در طول دههي ۹۰ فركانس ۴۴.۱ كيلوهرتز را انتخاب كردند؛ زيرا بالاتر از ۴۰ هزار هرتز است و با فرمتهاي تصويري NTSC و PAL سازگاري دارد؛ البته استانداردهاي ديگري همچون ۴۸ كيلوهرتز (بلوري)، ۹۶ كيلوهرتز يا ۱۹۲ كيلوهرتز نيز وجود دارند؛ اما چنانچه حرفهاي يا به اصطلاح خورهي صدا نيستيد، به احتمال زياد، موسيقي را با نرخ ۴۴.۱ كيلوهرتز گوش ميدهيد.
نكتهي ۱: قضيهي نايكوئيست ممباحثه بسيار گستردهاي است، براي كسب اطلاعات بيشتر ميتوانيد به مراجع پردازش سيگنال يا صفحهي ويكيپدياي اين قضيه مراجعه كنيد.
نكتهي ۲: براي ديجتاليسازي، فركانس نمونهبرداري بايد اكيدا بزرگتر از دو برابر فركانس سيگنال باشد؛ زيرا در بدترين حالت، ممكن است با يك سيگنال ديجيتالي ثابت طرف باشيم.
كوانتيدهسازي
در بخش قبل، با چگونگي ديجيتاليسازي فركانسهاي موسيقي آنالوگ آشنا شديم؛ اما بلندي صداي موسيقي چگونه خواهد بود؟ بلندي صدا معياري نسبي است: به ازاي بلندي صداي يكسان درون سيگنال، چنانچه حجم صداي اسپيكر را افزايش دهيد، شدت صداي موسيقي افزايش خواهد يافت. بلندي صدا، به تفاوت بين پايينترين و بالاترين سطح صدا در يك قطعهي موسيقي گفته ميشود.
اشكال پيشين در مورد بلندي صدا نيز پيش ميآيد: گذار از دنياي پيوسته با بينهايت تغيير در حجم به دنياي گسسته چگونه صورت ميگيرد؟
موسيقي مورد علاقهي خود را با چهار سطح بلندي «بدون صدا»، «صداي پايين»، «صداي بلند» و «تمام توان» تصور كنيد، در چنين وضعيتي، حتي بهترين موسيقي دنيا نيز غيرقابل تحمل خواهد بود. آنچه تصور كرديد، كوانتيدهسازي با ۴ سطح بود. در تصور زير ميتوانيد نمونهاي از كوانتيدهسازي سطح پايين را مشاهده كنيد:
اين تصوير، كوانتيدهسازي با ۸ سطح را نشان ميدهد. همانطور كه مشاهده ميكنيد، صداي حاصل با رنگ قرمز، تفاوت فاحشي با نمونهي اصلي دارد. تفاوت بين صداي واقعي و نمونهي كوانتيدهشده، خطاي كوانتيدهسازي يا نويز كوانتيدهسازي ناميده ميشود. كوانتيدهسازي ۸ سطحي با نام كوانتيدهسازي ۳ بيتي نيز ناميده ميشود؛ زيرا شما تنها به ۳ بيت براي پيادهسازي ۸ سطح مختلف نياز خواهيد داشت (۸ = ۲۳).
در تصوير زير همان سيگنال را با كوانتيدهسازي ۶۴ سطحي يا كوانتيدهسازي ۶ بيتي مشاهده ميكنيد. اگرچه صداي حاصل باز هم متفاوت بهانديشه متخصصين ميرسد؛ اما شباهت بيشتري به صداي اصلي دارد.
خوشبختانه گوش انسانها حساسيت فوقالعاده بالايي ندارد؛ از اين رو كوانتيدهسازي ۱۶ بيتي يا ۶۵۵۳۶ سطحي بهعنوان استاندارد تعريف ميشود. با كوانتيدهسازي ۱۶ بيتي، نويز كوانتيدهسازي براي گوش انسانها بهاندازهي كافي در سطح پاييني قرار دارد.
نكتهي ۱: در استوديوهاي ضبط موسيقي، حرفهايها از كوانتيدهسازي ۲۴ بيتي استفاده ميكنند؛ بدين مفهوم كه بين بالاترين و پايينترين بلندي صدا، ۲۲۴ يا ۱۶ ميليون تغيير ممكن وجود دارد.
نكتهي ۲: در مثالهاي ارائهشده در خصوص تعداد سطحهاي كوانتيدهسازي، تقريبهايي صورت گرفته است.
مدولاسيون كُد پالس
PCM يا مدولاسيون كُد پالس، استانداردي است كه سيگنالهاي ديجيتال را بهتصوير ميكشد. اين استاندارد در ديسكهاي فشرده و بسياري از دستگاههاي الكترونيكي بهكار ميرود؛ بهعنوان مثال، هنگامي كه به يك فايل mp3 در كاميپوتر، موبايل هوشمند يا تبلت خود گوش ميدهيد، آن فايل بهصورت خودكار به سيگنال PCM تبديل شده و به هدفون شما ارسال ميشود.
جريان PCM، جرياني از بيتهاي سازماندهي شده است، اين جريان ميتواند از چندين كانال تشكيل شده باشد؛ بهعنوان مثال، يك قطعهي موسيقي استريو، دو كانال دارد. در يك جريان، دامنهي سيگنال به نمونههايي تقسيم ميشود. تعداد نمونهها به ازاي هر ثانيه، با نرخ نمونهبرداري موسيقي هماهنگي دارد؛ بهعنوان مثال، يك قطعهي موسيقي با نرخ نمونهبرداري ۴۴۱۰۰ هرتزي، در هر ثانيه ۴۴۱۰۰ نمونه خواهد داشت. هر نمونه، دامنهي صداي كوانتيدهي مربوط به كسري از ثانيهها را در بر دارد.
فرمتهاي PCM گوناگوني وجود دارد؛ اما رايجترين نمونه براي صدا، فرمت خطي PCM استريو با فركانس ۴۴.۱ كيلوهرتز و عمق ۱۶ بيت است، اين فرمت ۴۴۱۰۰ نمونه در هر ثانيه از موسيقي را در بر دارد و هر نمونه، ۴ بيت را اشغال ميكنند.
در فرمت استريوي PCM با فركانس ۴۴.۱ كيلوهرتز و عمق ۱۶ بيت، در هر ثانيه از موسيقي، ۴۴۱۰۰ نمونه مانند تصوير بالا خواهيد داشت.
از صداي ديجيتال تا فركانس
شما اكنون از چگونگي گذار از صداي آنالوگ به ديجيتال آگاهي داريد؛ اما چگونه ميتوان فركانسهاي موجود داخل يك سيگنال ديجيتال را بهدست آورد؟ اين بخش از اهميت بسيار بالايي برخوردار است؛ زيرا الگوريتم شناسايي هويت صوت شزم تنها با فركانسها كار ميكند.
براي سيگنالهاي پيوسته يا آنالوگ، راهكاري موسوم به تبديل فوريه وجود دارد. با استفاده از اين راهكار، ميتوان تابع زمان را به تابع فركانس تبديل كرد. بهعبارت ديگر، چنانچه شما تبديل فوريه را روي يك صوت بهكار ببريد، اين تبديل، فركانسهاي موجود در اين صوت و شدت آنها را در اختيار شما خواهد گذاشت؛ اما در اين مسير، دو اشكال وجود دارد:
خوشبختانه تابع رياضي ديگري موسوم به تبديل گسستهي فوريه (DFT) وجود دارد كه با چنين محدوديتهايي سازگار است.
نكته: تبديل فوريه بايد تنها روي يك كانال اِعمال شود؛ بنابراين چنانچه يك قطعهي موسيقي استريو داشته باشيد، بايد آن را به قطعهي مونو (تك كاناله) تبديل كنيد.
تبديل فوريهي گسسته
تبديل فوريهي گسسته روي سيگنالهاي گسسته اِعمال ميشود و طيفي گسسته از فركانسهاي موجود در سيگنال را ارائه ميدهد. رابطهي جادويي زير، سيگنال ديجيتال را به فركانسها بدل ميكند:
در رابطهي بالا:
بهعنوان مثال براي يك سيگنال صوتي با پنجرهي ۴۰۹۶ نمونهاي، رابطهي يادشده بايد ۴۰۹۶ بار به كار گرفته شود:
همانطور كه احتمالا متوجه شدهايد، بهجاي فركانس، در خصوص بازهي فركانسي صحبت كرديم؛ زيرا DFT طيف گسسته ارائه ميدهد. بازهي فركانسي، كوچكترين واحد فركانسي است كه DFT ميتواند محاسبه كند. اندازهي اين بازه (وضوح طيف / طيفي يا وضوح فركانسي) برابر با نرخ نمونهبرداري سيگنال تقسيم بر اندازهي پنجره (N) است. در مثال ما، با پنجرهي ۴۰۹۶ نمونهاي و نرخ نمونهبرداري صوتي استاندارد ۴۴.۱ كيلوهرتزي، وضوح فركانسي معادل ۱۰.۷۷ هرتز است (بهجز بازهي صفرم كه استثناء محسوب ميشود):
بنابراين DFT نميتواند دو فركانس با تفاوت كمتر از ۱۰.۷۷ هرتز را تفكيك كند؛ بهعنوان مثال، نتهايي با فركانس ۲۷ هرتز، ۳۲ هرتز و ۳۷ هرتز، در بازهي فركانسي يكساني قرار ميگيرند. چنانچه نت در فركانس ۳۷ هرتز بسيار قدرتمند باشد، شما تنها متوجه خواهيد شد كه بازهي سوم قدرتمند است، اين موضوع بر سر تفكيك نتها در پايينترين اكتاوها اشكالساز خواهد بود؛ بهعنوان مثال:
شما ميتوانيد وضوح فركانسي را با افزايش ابعاد پنجره بهبود دهيد؛ اما در اين حالت تغييرات سريع فركانس / نت را در موسيقي از دست خواهيد داد:
يكي ديگر از مشخصات سيگنال صوتي اين است كه ما تنها به نيمي از بازهي محاسبهشده توسط DFT نياز داريم. در مثال پيشين، وضوح فركانسي ۱۰.۷ هرتز بود؛ بدين مفهوم كه بازهي ۲۰۴۷ام فركانسهاي بين ۲۱۹۰۲.۹ هرتز تا ۲۱۹۱۳.۶ هرتز را در بر ميگيرد؛ اما:
چنانچه ميخواهيد دليل آنكه وضوح فركانسي معادل نرخ نمونهبرداري تقسيم بر ابعاد پنجرهاست يا دليل عجيببودن اين رابطه را بدانيد، توصيه ميكنيم اين مقالهي پنج بخشي دربارهي تبديل فوريه را مطالعه كنيد (بهخصوص بخشهاي چهارم و پنجم)؛ زيرا يكي از بهترين مقالات براي افراد مبتدي مانند ما محسوب ميشود.
توابع پنجره
اگر ميخواهيد فركانس يك صوت يك ثانيهاي را در هر بازهي ۰.۱ ثانيهاي بهدست آوريد، بايد تبديل فوريه را روي بازهي ۰.۱ ثانيهاي اول، بازهي ۰.۱ ثانيهاي دوم، بازهي ۰.۱ ثانيهاي سوم و غيره پياده كنيد...
صورتمساله
اما در اين حالت، بهصورت ضمني يك تابع پنجرهاي (مستطيلي) را پياده ميكنيد:
در تصوير زير ميتوانيد بهصورت شهودي، اِعمال تابع پنجرهاي روي يك سيگنال صوتي ديجيتال (نمونهبرداريشده) را براي بهدست آوردن فركانس بازهي ۰.۱ ثانيهي نخست را مشاهده كنيد:
در اين نمودار، براي بهدست آوردن فركانسهاي بازهي ۰.۱ ثانيهاي نخست بايد سيگنال صوتي نمونهبرداريشده (رنگ آبي) را در تابع پنجرهاي (رنگ سبز) ضرب كنيد.
در اين نمودار، براي بهدست آوردن فركانسهاي بازهي ۰.۱ ثانيهاي دوم بايد سيگنال صوتي نمونهبرداريشده (رنگ آبي) را در تابع پنجرهاي (رنگ سبز) ضرب كنيد.
با «پنجرهايسازي» سيگنال صوتي در حقيقت تابع سيگنال صوتي بر حسب زمان را در تابع پنجرهاي برحسب زمان ضرب ميكنيد. اين تابع پنجرهاي، نشت طيفي را توليد ميكند. نشت طيفي در حقيقت پديداري فركانسهاي جديدي است كه درون سيگنال صوتي وجود ندارند. توان فركانسهاي واقعي به فركانسهاي ديگر نشت ميكند.
در ادامه توضيح رياضي غيررسمي اين پديده را ارائه ميكنيم. فرض كنيد كه بخشي از كل سيگنال صوتي را ميخواهيد، در اين صورت بايد سيگنال صوتي را در تابع پنجرهاي ضرب كنيد كه تنها به بخش مورد انديشه متخصصين شما اجازهي عبور ميدهد.
part_of_audio(t) = full_audio(t) . window (t)
هنگامي كه بهدنبال فركانسهاي اين بخش از سيگنال صوتي هستيد، تبديل فوريه را روي آن پياده ميكنيد:
Fourier(part_of_audio(t)) = Fourier(full_audio(t) . window (t))
براساس قضيهي كانوولوشن (* نشاندهندهي عملگر كانوولوشن و . نشاندهندهي عملگر ضرب است):
Fourier(full_audio(t) . window (t)) = Fourier(full_audio(t)) * Fourier(window (t))Fourier(part_of_audio(t)) = Fourier(full_audio(t)) * Fourier(window (t))
* فركانس part_of_audio(t) به نوع تابع پنجرهاي window() استفاده شده بستگي دارد.
مباحثه در رابطه با قضيهي كانوولوشن و نتيجهي پيادهسازي آن روي تبديل فوريهي سيگنال صوتي را در اين بخش خاتمه ميدهيم؛ زيرا وارد شدن به آن، رياضيات پيشرفتهاي را ميطلبد كه بيشك از حوصلهي مباحثه خارج است. اگر به دنبال كسب اطلاعات بيشتر هستيد، توصيه ميكنيم كه با مراجعه به صفحهي ۲۹ در اين لينك، اثر رياضي پيادهسازي تابع پنجرهاي روي يك سيگنال را مشاهده كنيد. در اين مرحله تنها بايد به خاطر داشته باشيد كه تقسيم سيگنالهاي صوتي به قطعات كوچك براي تحليل فركانسي هر قطعه، نشت طيفي را توليد ميكند.
انواع توابع پنجرهاي
خاطرنشان ميكنيم كه نميتوان از وقوع پديدهي نشت طيفي جلوگيري كرد؛ اما ميتوان با انتخاب تابع پنجرهاي مناسب، رفتار آن را كنترل كرد: بهجاي استفاده از توابع پنجرهاي مستطيلي، ميتوانيد توابع پنجرهاي مثلثي، پارزن، بلكمن يا همينگ را انتخاب كنيد...
توابع مستطيلي سادهترين نوع توابع پنجرهاي محسوب ميشوند؛ چرا كه تنها بايد سيگنالهاي صوتي را به قطعات كوچكي تقسيم كنيد، اما بهانديشه متخصصين ميرسد كه براي تحليل مهمترين فركانسهاي موجود در يك سيگنال، انتخاب چندان مناسبي نباشد. در ادامه به سه تابع مستطيلي، همينگ و بلكمن نگاهي خواهيم داشت، براي مطالعه تاثير اين سه تابع سيگنال صوتي متشكل از فركانسهاي زير را بهكار خواهيم برد:
در حالت ايدهآل، تبديل فوريهي سيگنال يادشده، طيف زير را توليد خواهد كرد:
اين نمودار، طيفي را با ۹ خط عمودي در فركانسهاي ۴۰، ۱۶۰، ۳۲۰، ۶۴۰، ۱۰۰۰، ۱۲۲۵، ۱۴۰۰، ۲۰۰۰ و ۲۵۰۰ هرتز را نشان ميدهد. محور y دامنهي طيفي را برحسب دسيبل به تصوير ميكشد؛ بنابراين مقياس آن لگاريتمي است. با اين مقياس، صوتي با دامنهي ۶۰ دسيبل، ۱۰۰ برابر قدرتمندتر از صوت ۴۰ دسيبلي و ۱۰٬۰۰۰ برابر قدرتمندتر از صوت ۲۰ دسيبلي است. براي آنكه درك بهتري از موضوع داشته باشيد، هنگامي كه در يك اتاق ساكت صحبت كنيد، شدت صداي شما ۲۰ تا ۳۰ دسيبل بيشتر از صداي اتاق در شعاع يك متريتان خواهد بود.
براي رسم اين نمودار «بينقص»، تبديل فوريه به يك تابع پنجرهاي بسيار طولاني ۱۰ ثانيهاي اعمال شده است. استفاده از پنجرههايي با بازهي زماني طولاني، نشت طيفي را كاهش ميدهد؛ اما ۱۰ ثانيه، زماني طولاني محسوب ميشود، زيرا در يك قطعهي موسيقي، صدا بسيار سريعتر تغيير ميكند. براي آنكه متوجه تغييرات سريع در موسيقي شويد، از شما دعوت ميكنيم تا به ويديوهاي زير توجه كنيد:
براي آنكه بتوان اين تغييرات سريع را ثبت كرد، بايد صدا را با استفاده از توابع پنجره به بخشهاي بسيار كوچكي تقسيم كرد. تصور كنيد كه ميخواهيد فركانسهاي صدايي را در هر يكسوم ثانيه تحليل كنيد.
در اين نمودار، شما ميتوانيد سيگنال صدا را براي بهدست آوردن سيگنال بين ۰.۳۳۳ و ۰.۶۶۶ ثانيه در يكي از سه نوع تابع پنجرهاي ضرب كنيد. همانطور كه گفتيم، استفاده از تابع مستطيلي، مانند بريدن سيگنال بين ۰.۳۳۳ ثانيه و ۰.۶۶۶ ثانيه است؛ در حالي براي استفاده از توابع همينگ با بلكمن بايد سيگنال را در سيگنال پنجرهاي ضرب كنيد.
تصوير زير، طيف صداي قبلي با تابع پنجرهاي ۴۰۹۶ نمونهاي را نشان ميدهد:
سيگنال با فركانس ۴۴۱۰۰ هرتزي نمونهبرداري شده است؛ بنابراين تابع پنجرهاي ۴۰۹۶ نمونهاي، يك بخش ۹۳ ميليثانيهاي (۴۴۱۰۰/۴۰۹۶) و وضوح فركانسي ۱۰.۷ هرتزي را نشان ميدهد.
اين نمودار نشان ميدهد كه تمام توابع پنجرهاي، طيف حقيقي صدا را تغيير ميدهند. بهوضوح ميتوان ديد كه بخشي از توان فركانسهاي حقيقي به همسايگي آنها پخش شده است. طيف حاصل از تابع مستطيلي بدترين عملكرد را دارد؛ چرا كه نشت طيفي در آن بسيار بيشتر از دو تابع ديگر است، اين موضوع بين فركانسهاي ۴۰ تا ۱۶۰ هرتز، بيش از پيش جلوه ميكند. تابع بلكمن نزديكترين طيف را به نمونهي حقيقي توليد ميكند.
نمودار زير، نمونهاي ديگري را با تبديل فوريهي مبتني بر تابع پنجرهاي ۱۰۲۴ نمونهاي نشان ميدهد:
سيگنال با فركانس ۴۴۱۰۰ هرتزي نمونهبرداري شده است؛ بنابراين تابع پنجرهاي ۱۰۲۴ نمونهاي، يك بخش ۲۳ ميليثانيهاي (۴۴۱۰۰/۱۰۲۴) و وضوح فركانسي ۴۳ هرتزي را نشان ميدهد.
اين بار، تابع مستطيلي، بهترين طيف را توليد ميكند. در هر سه تابع پنجرهاي، فركانس ۱۶۰ هرتزي توسط نشت طيفي توليدشده با فركانسهاي ۴۰ و ۳۲۰ هرتزي پنهان شده است. تابع بلكمن بدترين نتيجه را توليد ميكند؛ چرا كه فركانس ۱۲۲۵ هرتزي نزديك به ناپديد شدن است.
مقايسهي دو نمودار نشان ميدهد كه نشت طيفي در تمام توابع پنجرهاي با بالا رفتن وضوح فركانسي، افزايش پيدا ميكند. الگوريت هويتسنجي صوتي شزم، بهدنبال بلندترين فركانس درون قطعهي موسيقي ميگردد؛ اما بهدليل نشت طيفي، نميتوان بهسادگي بالاترين فركانس را بهدست آورد. در نمونهي آخر، سه فركانس بلند تقريبي، ۳۲۰، ۲۷۷ (۴۳-۳۲۰) و ۳۶۳ (۴۳+۳۲۰) هرتز هستند؛ اما تنها فركانس ۳۲۰ هرتز وجود دارد.
كدام تابع پنجرهاي بهتر است؟
بهترين يا بدترين تابع پنجرهاي وجود ندارد. هر تابع پنجرهاي، ويژگيهاي منحصربهفردي دارد و بسته به نوع مسئله ميتوان نوع خاصي را برگزيد. تابع مستطيلي بهلحاظ وضوح بهترين گزينه براي سيگنالهاي سينوسي با توانهاي نزديك به هم محسوب ميشود؛ اما اين نوع تابع براي سيگنالهاي سينوسي با دامنههاي بسيار متفاوت (مانند آنچه در موسيقي رخ ميدهد؛ چرا كه نتهاي موسيقي بلندي يكساني ندارند)، انتخاب بسياري بدي بهشمار ميرود.
توابعي نظير بلكمن براي جلوگيري از ناپديد شدن فركانسهاي ضعيف توسط فركانسهاي قدرتمند بهموجب نشت طيفي، انتخاب بهتري هستند؛ اما اين توابع در خصوص نويز عملكرد بدي دارند؛ چرا كه وجود نويز باعث ناپديد شدن فركانسهاي بيشتري نسبت به تابع مستطيلي ميشود. اين موضوع براي الگوريتمي مانند شزم كه بايد توان مواجهه با نويز را داشته باشد، اشكالساز خواهد بود (بهعنوان مثال هنگامي كه در يك محيط شلوغ بهدنبال شناسايي موسيقي خاصي با شزم هستيد، نويز بسياري وجود خواهد داشت).
تابع همينگ بين دو تابع مستطيلي و بلكمن قرار ميگيرد و از اين رو بهانديشه متخصصين ميرسد كه گزينهاي بهتري براي الگوريتمي نظير شزم باشد. در پايان اين بخش توصيه ميكنيم كه براي بهدست آوردن اطلاعات بيشتري در رابطه با توابع پنجرهاي و نشت طيفي به منابع زير مراجعه كنيد:
تبديل سريع فوريه و پيچيدگي زمان
صورتمساله
اگر بار ديگر به رابطهي به رابطهي DFT توجه كنيد، مشاهده خواهيد كرد كه براي محاسبهي يك بازه، بايد N جمع و N ضرب را انجام دهيد كه در آنها N ابعاد پنجره محسوب ميشود؛ بدين ترتيب بهدست آوردن N بازه، مستلزم انجام ۲ در N بهتوان ۲ محاسبه است كه تعداد بسيار زيادي بهشمار ميرود.
بهعنوان مثال، يك قطعهي موسيقي سه دقيقهاي با فركانس ۴۴.۱ كيلوهرتزي را تصور كنيد كه بايد طيفنگارهي آن را با تابع پنجرهاي ۴۰۹۶ نمونهاي محاسبه كنيد؛ بدين ترتيب بايد ۱۰.۷ يا (۴۴۱۰۰/۴۰۹۶) DFT بهازاي هر ثانيه را بهدست آوريد؛ بنابراين كل قطعهي موسيقي ۱۹۳۸ نمونه DFT خواهد داشت. هر DFT به انجام ۱۰۷ × ۳.۳۵ عمليات (۴۰۹۶۲ × ۲) نياز خواهد داشت؛ از اين رو محاسبهي طيفنگارهي كل قطعهي موسيقي، مستلزم انجام ۱۰۱۰ × ۶.۵ عمليات رياضي خواهد بود.
فرض ميكنيم كه كلكسيوني از ۱۰۰۰ قطعهي موسيقي سه دقيقهاي را در اختيار داريد؛ براي بهدست آوردن طيفنگارهي كل اين قطعات موسيقي بايد ۱۰۱۳ × ۶.۵ عمليات رياضي را انجام دهيد، انجام اين محاسبات حتي با داشتن پردازندهاي قدرتمند، چندين روز / ماه بهطول خواهد انجاميد.
خوشبختانه نسخهي سريعتري از DFT با نام FFT يا تبديل سريع فوريه وجود دارد. برخي از نسخههاي DFT تنها به انجام ۱.۵ × N × log(N) عمليات رياضي نياز دارند. استفاده از FFT بهجاي DFT براي كلكسيون موسيقي يادشده در پاراگراف قبلي به ۳۴۰ برابر محاسبات كمتري (۱۰۱۱ × ۱.۴۳) نياز خواهد داشت و براي انجام آن به چند دقيقه / ساعت نياز خواهيد داشت.
اين مثال، مصالحهاي ديگري را نيز نشان ميدهد: اگرچه افزايش ابعاد پنجره، وضوح فركانسي را بهبود ميبخشد؛ مدتزمان لازم براي انجام محاسبات را نيز افزايش ميدهد. بهعنوان مثال چنانچه طيفنگارهي كلكسيون موسيقي يادشده را با استفاده از پنجرهي ۵۱۲ نمونهاي محاسبه كنيد (وضوح فركانسي ۸۶ هرتزي)، ميتوان با استفاده از تبديل سريع فوريه، نتيجه را طي ۱۰۱۱ × ۱.۰۷ محاسبه بهدست آورد كه بهصورت تقريبي يكچهارم برابر سريعتر از حالت انجام محاسبه با پنجرهي ۴۰۹۶ نمونهاي (وضوح فركانسي ۱۰.۷۷ هرتزي) است.
اين پيچيدگي زماني از آنجايي حائز اهميت است كه هنگام شناسايي يك قطعهي موسيقي با استفاده از شزم، موبايل شما بايد طيفنگارهي صوت ضبطشده را محاسبه كند؛ در حالي كه پردازندههاي موبايل بسيار ضعيفتر از پردازندههاي دسكتاپ هستند.
نمونهكاهي (Downsampling)
خوشبختانه راهكاري موسوم به نمونهكاهي وجود دارد كه بهموجب آن ميتوان در آنِ واحد، ضمن حفظ وضوح فركانسي، ابعاد پنجره را نيز كاهش داد. يك قطعهي موسيقي با فركانس ۴۴۱۰۰ هرتزي را در انديشه متخصصين ميگيريم، چنانچه اين قطعه را فركانس ۱۱۰۲۵ هرتز (۴/۴۴۱۰۰) مجددا نمونهبرداري كنيد، چه با انجام تبديل سريع فوريه روي يك قطعهي موسيقي ۴۴.۱ كيلوهرتزي با پنجرهي ۴۰۹۶ نمونهاي و چه با محاسبهي تبديل سريع فوريه روي يك قطعه با نمونهبرداري مجدد ۱۱ كيلوهرتزي و تابع پنجرهاي ۱۰۲۴ نمونهاي، به وضوح فركانسي يكساني دست خواهيد يافت. تنها تفاوت اين است كه موسيقي با نمونهبرداري مجدد تنها فركانسها صفر تا ۵ كيلوهرتزي را در بر خواهد داشت؛ اما مهمترين بخش موسيقي بين فركانسهاي يادشده قرار دارد. در حقيقت، بسياري از افراد بين موسيقي ۱۱ كيلوهرتزي و موسيقي ۴۴.۱ كيلوهرتزي، تفاوتي متوجه نخواهند شد؛ بنابراين مهمترين فركانسها كماكان در موسيقي با نمونهبرداري مجدد موجود هستند و اين موضوع براي الگوريتمي مانند شزم بسيار حائز اهميت است.
نمونهكاهي يك قطعهي موسيقي ۴۴.۱ كيلوهرتزي به نمونهي ۱۱.۰۲۵ كيلوهرتزي چندان دشوار نيست: يكي از راهكارهاي ساده براي نمونهكاهي، نمونهبرداري با گروههاي چهارتايي و تبديل اين گروه به يك نمونه از طريق ميانگينگيري بين چهار نمونه است؛ اما در اين بين بايد براي جلوگيري از Aliasing، پيش از نمونهكاهي، فركانسهاي بالا را فيلتر كرد. اين فرآيند با استفاده از فيلتر ديجيتال پايينگذر امكانپذير است.
تبديل سريع فوريه
مجددا به مباحثه تبديل سريع فوريه بازميگرديم؛ سادهترين نسخه از FFT الگوريتم كولي – توكي با مبناي ۲ است. در الگوريتم يادشده بهجاي محاسبهي مستقيم تبديل فوريه روي N نمونهي پنجره:
بخش پاياني صرفا با انجام N عمليات توسط يك ترفند رياضي روي ريشهي واحد (عبارت نمايي) صورت ميگيرد. كُد زير در زبان پايتون و براي محاسبهي تبديل سريع فوريه نوشته شده است. براي كسب اطلاعات بيشتر دربارهي تبديل سريع فوريه ميتوانيد به اين مقالهي ويكيپديا مراجعه كنيد.
from cmath import *def fft(x): N=len(x) if N==1: return x even=fft([x[k] for k in range(0,N,2)]) odd= fft([x[k] for k in range(1,N,2)]) M=N/2 l=[ even[k] + exp(-2j*pi*k/N)*odd[k] for k in range(M) ] r=[ even[k] - exp(-2j*pi*k/N)*odd[k] for k in range(M) ] return l+r
شزم
در بخشهايي پيشين با مباحث بسياري آشنا شديم؛ اما اكنون زمان آن رسيده است تا با كنار هم قرار دادن مباحث يادشده، متوجه شويم كه چگونه شزم بهسرعت موسيقي را شناسايي ميكند. در ابتدا نگاهي كلي به شزم خواهيم داشت، سپس بهچگونگي توليد هويت صوتي ميپردازيم و در نهايت با مكانيزم جستوجوي صوتي بهينه اين بخش را به پايان خواهيم برد.
يادداشت: از اين مرحله به بعد، با اين فرض پيش خواهيم كرد كه شما بخشهاي مربوط به نتهاي موسيقي، تبديل سريع فوريه و توابع پنجرهاي را مطالعه كردهايد. در بخش حاضر گاهي از واژههاي «فركانس»، «بازه»، «نت» يا «بازهي فركانسي» اشاره خواهيم كرد كه همگي مفهوم يكساني را ميرسانند؛ زيرا ما با سيگنالهاي صوتي ديجيتال سروكار داريم.
نگاه كلي
هويت صوتي، خلاصهاي ديجيتال است كه از آن ميتوان براي شناسايي يك نمونهي صوتي يا شناسايي نمونههاي مشابه در يك پايگاه دادهي صوتي استفاده كرد؛ بهعنوان مثال هنگامي كه شما موسيقي خاصي را براي شخصي زمزمه ميكنيد، در حقيقت در حال ايجاد يك هويت صوتي هستيد؛ چرا كه بخشهايي از موسيقي را از ذهن خود استخراج ميكنيد كه از انديشه متخصصين شما ضروري هستند و اگر شما خوانندهي خوبي نيز باشيد؛ شنونده قطعهي موسيقي را شناسايي خواهد كرد.
پيش از اينكه وارد جزئيات شويم، در تصوير زير ميتوانيد تصويري از ساختار سادهشدهي احتمالي شزم را مشاهده كنيد؛ به ياد داشته باشيد كه اين تصوير صرفا براساس حدسيات و برمبناي مقالهاي است كه در سال ۲۰۱۳ توسط يكي از بنيانگذاران شزم منتشر شد.
در سمت سرور:
در سمت كلاينت:
نكات كليدي مربوط به شزم عبارت هستند از:
فيلتر طيفنگاره
هويتهاي صوتي با هويتهاي كامپيوتري نظير SSHA يا MD5 متفاوت هستند؛ چرا كه دو فايل متفاوت بهلحاظ تعداد بيت كه موسيقي يكساني را در بر دارند، بايد هويت صوتي يكساني داشته باشند؛ بهعنوان مثال يك قطعهي موسيقي با فرمت 256kbit ACC آيتونز بايد هويت يكساني با همان موسيقي در فرمت 256kbit MP3 آمازون يا 128kbit WMA مايكروسافت توليد كند، براي حل اين اشكال، الگوريتمهاي ايجاد هويت موسيقي از طيفنگارهي سيگنالهاي صوتي براي استخراج هويت آنها بهره ميبرند.
ايجاد طيفنگاره
همانطور كه پيشتر گفتيم، براي توليد طيفنگارهي يك صوت ديجيتال بايد تبديل سريع فوريه را روي آن اِعمال كنيم. در يك الگوريتم ايجاد هويت صوتي به وضوح فركانسي مناسبي نياز داريم (بهعنوان مثال ۱۰.۷ هرتز) تا بدين ترتيب نشت طيفي را كاهش دهيم و از نتهاي نواختهشده درون قطعهي موسيقي شناخت خوبي داشته باشيم. همچنين بايد زمان محاسبه را تا جايي كه ممكن است كاهش دهيم و اين موضوع مستلزم استفاده از پنجرهاي با ابعاد كوچك است. در مقالهي پژوهشي شزم توضيحي دربارهي چگونگي بهدست آوردن طيفنگاره نيامده است؛ اما احتمالا راهكار آنها بدين شكل باشد:
در سمت سرور (شزم)، صوت ۴۴.۱ كيلوهرتزي (از CD، MP3 يا هر فرمت صوتي ديگري) بايد از فيلتر مبدل استريو به مونو گذر كند؛ براي انجام اين كار ميتوان از اسپيكر سمت چپ و راست ميانگين گرفت. پيش از نمونهكاهي براي جلوگيري از وقوع پديدهي Aliasing، بايد فركانسهاي بالاتر از ۵ كيلوهرتز را فيلتر كرد، سپس صدا با نرخ ۱۱.۰۲۵ كيلوهرتز نمونهبرداري ميشود.
در سمت كلاينت (موبايل)، نرخ نمونهبرداري ميكروفوني كه صدا را ضبط ميكند، بايد ۱۱.۰۲۵ كيلوهرتز باشد. سپس در هر دو مورد، بايد تابعي پنجرهاي را روي سيگنال پياده كرد؛ بهعنوان مثال تابع ۱۰۲۴ نمونهاي همينگ، شما ميتوانيد دليل انتخاب چنين تابعي را در فصل توابع پنجرهاي بيابيد. در نهايت تبديل سريع فوريه روي تمام ۱۰۲۴ نمونه اِعمال ميشود. با انجام اين كار، هر كدام از تبديلهاي سريع فوريه، ۰.۱ ثانيه از موسيقي را آناليز ميكند و بدين ترتيب طيفنگارهاي ايجاد ميشود:
فيلترينگ
در اين مرحله طيفنگارهي موسيقي را در اختيار داريم. از آنجايي كه شزم بايد در برابر نويز مقاوم باشد، تنها بلندترين نتها حفظ ميشوند؛ اما به دلايل زير نميتوان صرفا در هر ۰.۱ ثانيه قدرتمندترين فركانسها را حفظ كرد:
در ادامه راهكار سادهاي را شرح ميدهيم كه به موجب آن ميتوان تنها فركانسهاي قدرتمند را انتخاب كرد و اشكالات پيشين را كاهش داد:
گام اول – براي هر نتيجهي تبديل سريع فوريه، ۵۱۲ بازه را درون ۶ باند لگاريتمي قرار ميدهيم:
گام دوم – براي هر باند، قدرتمندترين بازهي فركانسي را حفظ ميكنيم
گام سوم – مقدار ميانگين اين ۶ بازهي قدرتمند را محاسبه ميكنيم
گام چهارم – بازههايي را بالاتر از مقدار ميانگين هستند، حفظ ميكنيم
گام چهارم بسيار حائز اهميت است؛ چرا كه ممكن است:
داشته باشيم.
و نبايد فركانس ضعيفي را صرفا بهخاطر آن نگه داشت كه داخل باند خود، قويترين است؛ اما اين الگوريتم يك محدوديت دارد؛ در بسياري از قطعات موسيقي، برخي از بخشها بسيار آرام هستند (مانند ابتدا يا پايان يك قطعه)؛ چنانچه اين بخشها را آناليز كنيم، فركانسهاي بالاي كاذبي را بهدست خواهيم آورد؛ چرا كه مقدار ميانگين اين بخشها بسيار پايين است. براي جلوگيري از چنين مسالهاي، بهجاي محاسبهي ميانگين ۶ بازهي قدرتمند از تبديل سريع فوريهي فعلي (تبديلي كه ۰.۱ ثانيه از قطعهي موسيقي را نشان ميدهد)، ميتوان ميانگين قدرتمندترين بازههاي كل قطعهي موسيقي را محاسبه كرد.
بهصورت خلاصه، با پيادهسازي اين الگوريتم، طيفنگارهي موسيقي را فيلتر ميكنيم تا بدين ترتيب بالاترين سطح انرژي طيف را كه بلندترين نتها را نشان ميدهد، حفظ كنيم. براي آنكه بهصورت شهودي متوجه ماهيت فيلترينگ شويد، در تصوير زير ميتوانيد طيفنگارهي حقيقي يك قطعهي موسيقي ۱۴ ثانيهاي را مشاهده كنيد.
نمودار بالا در مقالهي پژوهشي شزم آمده است. در اين طيفنگاره ميتوانيد فركانسهايي را مشاهده كنيد كه بسيار قدرتمندتر از نمونههاي ديگر هستند. چنانچه الگوريتم پيشين را روي طيفنگاره پياده كنيد، به چنين تصويري خواهيد رسيد:
نمودار بالا نيز از مقالهي پژوهشي شزم است و طيفنگارهي فيلترشدهاي را نشان ميدهد. تنها قدرتمندترين فركانسها از نمودار پيشين حفظ شدهاند. برخي از بخشهاي موسيقي، مانند ثانيههاي بين ۴ تا ۴.۵ فركانسي ندارند.
تعداد فركانسهاي موجود در طيفنگارهي فيلترشده به ضريب استفادهشده در ميانگين گام چهارم بستگي دارد، اين موضوع به تعداد باندهاي مورد استفادهي شما نيز وابسته است. در اين نمودارها از ۶ باند استفاده شده است؛ اما اين عدد ميتوانست متفاوت باشد.
در اين مرحله، شدت فركانسها سودي به همراه ندارد؛ بنابراين اين طيفنگاره را ميتوان بهصورت يك جدول دو ستوني مدل كرد كه در آن:
طيفنگارهي فيلترشده هويت صوتي نيست؛ اما بخش عمدهاي از آن بهحساب ميآيد. براي كسب اطلاعات بيشتر، بخش بعدي را مطالعه كنيد.
يادداشت: در بخش قبلي، الگوريتم سادهاي را ارائه داديم كه با آن ميتوان طيفنگاره را فيلتر كرد؛ اما استفاده از يك تابع پنجرهي لگاريتمي لغزان (اسلايدينگ) و حفظ قدرتمندترين فركانسهاي بالاتر از مقدار ميانگين به اضافهي انحراف استاندارد (ضرب در يك ضريب) از بخش متحرك قطعهي موسيقي ميتواند راهكار بهتري باشد؛ اما اين راهكار بسيار دشوار است؛ از اين رو از تشريح آن صرفانديشه متخصصين ميكنيم.
ذخيرهسازي هويتهاي صوتي
در اين مرحله، طيفنگارهي فيلترشدهاي از موسيقي را در اختيار داريم؛ اما چگونه ميتوان آن را ذخيره كرد و بهصورت بهينهاي بهكار گرفت؟ اين بخش، نقطهي قوت شزم محسوب ميشود. براي درك مسئله، راهكار سادهاي را شرح ميدهيم كه در آن با استفادهي مستقيم از طيفنگارههاي فيلترشده به جستوجوي يك قطعهي موسيقي ميپردازيم.
راهكار سادهي جستوجو
پيشنياز: در ابتدا ديتابيسي از طيفنگارههاي فيلترشده را براي مجموعهاي از قطعات موسيقي محاسبه ميكنيم
گام اول: ۱۰ ثانيه از يك قطعهي موسيقي را ضبط ميكنيم
گام دوم: طيفنگارهي فيلترشدهي اين ۱۰ ثانيه را محاسبه ميكنيم
گام سوم: اين طيفنگارهي كوچك را با طيفنگارهي كامل تمام قطعات موسيقي مقايسه ميكنيم. چگونه ميتوان طيفنگارهي ۱۰ ثانيهاي را با طيفنگارهي ۱۸۰ قطعهي موسيقي مقايسه كرد؟ در ادامه اين مساله را بهصورت شهودي شرح ميدهيم:
به بيان ساده، بايد طيفنگارهي كوچك را با تمام بخشهاي طيفنگارهي كامل يك قطعهي موسيقي منطبق كرد تا متوجه شد كه آيا طيفنگارهي كوچكتر با بخشي از يك طيفنگارهي كامل مطابقت دارد يا خير.
اين فرآيند بايد براي تمام قطعات موسيقي موجود صورت بگيرد تا در نهايت بتوان موسيقي صحيح را پيدا كرد.
در اين مثال، بين فايل ضبطشده و قسمت انتهايي قطعهي موسيقي مطابقت وجود دارد؛ اگر چنين نبود، بايد فايل ضبطشده را با قطعهي ديگري مطابقت داد، اين فرآيند تا زماني ادامه مييابد كه قطعهي موسيقي صحيح پيدا شود. اگر بهترين گزينه پيدا نشد، ميتوان نزديكترين گزينه با نرخ تطابق بالاتر از حد آستانه را انتخاب كرد؛ بهعنوان مثال، اگر نزديكترين گزينه، نرخ تطابق ۹۰ درصدي داشتهباشد، ميتوان فرض كرد كه اين قطعهي موسيقي، گزينهي مورد انديشه متخصصين است؛ چرا كه بيشك تفاوت ۱۰ درصدي، ناشي از وجود نويزهاي خارجي است.
اگرچه اين راهكار، عملكرد مناسبي دارد؛ اما نيازمند زمان پردازش بسيار زيادي است. راهكار يادشده بايد تمام احتمالات مربوط به تطابق فايل ۱۰ ثانيهاي با هر قطعهي موسيقي را محاسبه كند. فرض كنيم كه بهطور متوسط، هر قطعهي موسيقي، در هر ۰.۱ ثانيه، ۳ فركانس بيشينه داشته باشد؛ بنابراين، فايل ۱۰ ثانيهاي ضبطشده، ۳۰۰ نقطهي زمان – فركانس دارد. در بدترين حالت، بايد ۳۰۰ در ۳۰۰ در ۳۰ در S محاسبه انجام داد كه در آن، S تعداد قطعات موسيقي موجود در كلكسيون شما است. اگر شما ۳۰ هزار فايل موسيقي داشته باشيد (۱۰۶ × ۷ ثانيه) زمان پردازش بسيار طولاني خواهد بود و شزم با داشتن كلكسيون ۴۰ ميليون قطعهي موسيقي، زماني فوقالعاده طولاني را براي انجام پردازش خواهد طلبيد.
بنابراين شزم فرآيند شناسايي موسيقي را چگونه بهصورت بهينه انجام ميدهد؟
مناطق هدف
بهجاي مقايسهي تكتك نقاط، ميتوان در آنِ واحد، بهدنبال چندين نقطه بود. در مقالهي شزم، به اين گروه از نقاط، منطقهي هدف گفته ميشود. در مقالهي يادشده چگونگي توليد اين مناطق هدف شرح داده نشده؛ اما احتمالا بدين شكل است: (با هدف درك بهتر، ابعاد مناطق هدف روي ۵ نقطهي زمان – فركانس تنظيم شده است)
براي حصول اطمينان از اينكه فايل ضبطشده و قطعهي كامل موسيقي، مناطق هدف يكساني را توليد ميكنند، به يك رابطهي ترتيبي بين نقاط زمان – فركانس در طيفنگارهي فيلترشده نياز داريم:
اگر اين قاعده را روي طيفنگارهي سادهشدهي پيشين پياده كنيم، به اين نتيجه خواهيم رسيد:
در اين نمودار، تمام نقاط زمان – فركانس با استفاده از اين رابطهي ترتيبي، علامتگذاري شدهاند؛ بهعنوان مثال:
حال كه ميتوان به داخل طيفنگاره ترتيب بخشيد، ميتوانيم با استفاده از اين قانون، مناطق هدف يكساني را در طيفنگارههاي مختلف ايجاد كنيم: «براي توليد مناطق هدف داخل يك طيفنگاره بايد براي هر نقطهي زمان – فركانس، گروهي شامل اين نقطه و چهار نقطه پس از آن ايجاد كنيم.» بدين ترتيب، تعداد مناطق هدف تقريبا با تعداد نقاط برابري خواهد كرد. اين توليد گروه براي قطعهي موسيقي يا فايل ضبطشده يكسان است.
در اين طيفنگارهي سادهشده، ميتوان مناطق هدف متفاوت ايجادشده توسط الگوريتم پيشين را مشاهده كرد. از آنجايي كه ابعاد هدف ۵ است، به غير از نقاط ابتدايي و انتهايي طيفنگاره، اغلب نقاط درون مناطقي با ۵ هدف جاي دارند.
يادداشت: شايد چرايي لاخبار تخصصي محاسبهي تعداد زيادي از مناطق هدف را متوجه نباشيد. ما ميتوانستيم مناطق هدف را با چنين قانوني توليد كنيم: «براي هر نقطه با برچسبي از حاصلضرب ۵، بايد گروهي شامل اين فركانس و ۴ فركانس پس از آن ايجاد كنيد». با اين قانون ۵ عدد از تعداد مناطق هدف و زمان مرود نياز براي جستوجو كاهش پيدا ميكرد؛ اما بايد خاطرنشان كنيم كه محاسبهي تمام مناطق هدف محتمل در فايل ضبطشده و قطعهي موسيقي، مقاومت در برابر نويز را بهمقدار زيادي افزايش ميدهد.
توليد آدرس
اكنون چندين منطقهي هدف داريم؛ اما گام بعدي چيست؟ بايد براي هر نقطه، آدرسي را برمبناي آن منطقههاي هدف ايجاد كنيم. براي ايجاد چنين آدرسهايي، بايد به ازاي هر منطقهي هدف، يك نقطهي لنگر (Anchor Point) نيز نياز داريم؛ اما در مقالهي شزم، چگونگي انجام اين كار نيز شرح داده نشده است. فرض ميكنيم كه نقطهي لنگر، سومين نقطه پيش از منطقهي هدف باشد. نقطهي لنگر ميتواند در هر نقطهاي باشد؛ بهشرط آنكه با همان روش ابتدايي، قابل توليد مجدد باشد و اين موضوع بهلطف رابطهي ترتيبي بهدست آمده است.
در اين تصوير، دو منطقهي هدف بههمراه نقطهي لنگر آنها ترسيم شدهاند. به منطقهي هدف بنفش توجه كنيد. رابطهي آدرس پيشنهادشده توسط شزم بدين شكل است:
{«اختلاف زماني بين لنگر و نقطه»؛ «فركانس نقطه»؛ «فركانس لنگر»}
براي منطقهي بنفش داريم:
هر دو نقطه در منطقهي قهوهاي نيز ظاهر شدهاند، آدرس آنها در اين منطقهي هدف عبارت از : {۲؛۳۰؛۱۰} براي نقطهي ۶ و {۳؛۲۰؛۱۰} براي نقطهي ۷ است.
خاطرنشان ميكنيم كه آدرسها با عاملي مرتبط هستند. در مورد قطعات كامل موسيقي (بنابراين تنها در سمت سرور)، اين آدرسها با {«ID موسيقي»؛ «زمان مطلق لنگر در موسيقي»} مرتبط هستند. در نمونهي ما براي دو نقطهي پيشين، نتايج بدين شكل هستند:
[10;30;1]–>[2;1][10;30;2]–>[2;1][10;30;2]–>[1;1][10;30;3]–>[1;1]
اگر اين منطق را روي تمام نقاط موجود در تمام مناطق هدف طيفنگارهي كل قطعات موسيقي پياده كنيد، جدول دو ستوني بسيار بزرگي را بهدست خواهيد آورد
اين جدول، ديتابيس هويت صوتي شزم محسوب ميشود. اگر بهصورت متوسط هر قطعهي موسيقي در هر ثانيه ۳۰ فركانس اوج داشته باشد و ابعاد منطقهي هدف را نيز ۵ در انديشه متخصصين بگيريم، ابعاد جدول ۵ در ۳۰ در S خواهد بود كه در آن S تعداد ثانيههاي كل كلكسيون موسيقي است.
اگر بهخاطر داشته باشيد، ما از تبديل سريع فوريهي ۱۰۲۴ نمونهاي استفاده كرديم؛ بدين مفهوم كه تنها ۵۱۲ مقدار محتمل فركانس وجود دارد. اين فركانسها ميتوانند در ۹ بيت (۵۱۲ = ۲۹) كُد شوند. اگر فرض كنيم دلتاي زمان (اختلاف زماني) در حد ميليثانيه باشد، هيچگاه بيشتر از ۱۶ ثانيه نخواهد بود؛ چرا كه مفهوم آن، يك قطعه با ۱۶ ثانيهي بدون موسيقي (يا صدايي بسيار پايين) است؛ بنابراين ميتوان دلتاي زمان را در ۱۴ بيت (۱۶۳۸۴ = ۲۱۴) كُد كرد. آدرس ميتواند در قالب عد صحيح (Integer) ۳۲ بيتي كُد شود.
با استفاده از همان منطق ميتوان، جفت («آيدي موسيقي»؛ «زمان لنگر») در قالب عدد صحيح ۶۴ بيتي كد كرد (۳۲ بيت براي هركدام).
جدول هويت صوتي را ميتوان در قالب آرايهي سادهاي از اعداد صحيح ۶۴ بيتي پيادهسازي كرد:
بهعبارت ديگر، جدول هويت صوتي را به يك پروسهي جستوجوي وارونه بدل كرديم كه امكان اجراي فرآيند جستوجو با زماني بسيار مؤثر يا (O(1 را ميدهد.
يادداشت: احتمالا متوجه شدهايد كه نقطهي لنگر موجود در داخل منطقهي هدف را انتخاب نكردهايم؛ بهعنوان مثال ميتوانستيم اولين نقطه از منطقهي هدف را انتخاب كنيم؛ اگر چنين ميكرديم، در اين حالت آدرسهاي بسياري به فُرم {۰؛ فركانس لنگر؛ فركانس لنگر} ايجاد ميشد؛ بنابراين جفتهاي («آيدي موسيقي»؛ «زمان لنگر») با آدرسي مانند {۰؛ Y؛ Y} بهوجود ميآمدند كه در آنها Y فركانسي بين صفر تا ۵۱۱ است.
جستوجو و يافتن هويت صوتي
اكنون در سمت سرور، ساختار دادهي بسيار خوبي داريم، اما چگونه ميتوان از آن استفاده كرد؟
جستوجو
براي انجام جستوجو، گام مربوط به ايجاد هويت صوتي روي فايل ضبطشده اجرا ميشود تا آدرس / ساختار مقداري توليد شود كه بهلحاظ مقداري، كمي متفاوت است:
{«دلتاي زماني بين لنگر و نقطه»؛ «فركانس نقطه»؛ «فركانس لنگر»} -> {«زمان مطلق لنگر در فايل ضبطشده»}
در مرحلهي بعد، اين داده به سمت سرور (شزم) ارسال ميشود. در اين مورد هم، همان فرض قبلي را در انديشه متخصصين ميگيريم (۳۰۰ نقطهي زمان – فركانس در طيفنگارهي فيلترشدهي فايل ۱۰ ثانيهاي ضبطشده و منطقهي هدف با ابعاد ۵)؛ بدين مفهوم كه تقريبا ۱۵۰۰ داده به شزم ارسال شده است.
هر آدرس از فايل ضبطشده براي جستوجو در ديتابيس هويت صوتي جفت مربوطه {«آيدي موسيقي»؛ «زمان مطلق لنگر در قطعهي موسيقي»} استفاده ميشود. بهلحاظ پيچيدگي زماني، با فرض اينكه ديتابيس هويت صوتي in-memory (نوعي از پايگاه داده كه عمدتا براي ذخيرهسازي داده به حافظهي اصلي اتكا دارد) است، در اين صورت، هزينهي جستوجو با تعداد آدرسهاي ارسالشده به شزم متناسب خواهد بود. اين جستوجو، تعداد بالايي از جفتها (فرض ميكنيم تعداد جفتها M باشد) را بازميگرداند.
اگرچه M تعداد بسيار بالايي محسوب ميشود؛ اما از تعداد نتهاي تمام قطعات موسيقي (نقاط زمان - فركانس) كمتر است. قدرت اصلي پروسهي جستوجو يادشده اين است كه بهجاي جستوجوي يك نت داخل موسيقي، وجود دو نت مجزا از دلتاي زماني چند ثانيهاي در داخل قطعهي موسيقي را مطالعه ميكند. در پايان اين بخش، توضيحات بيشتري دربارهي پيچيدگي زماني ارائه خواهد شد.
فيلتر نتيجه
اگرچه در مقالهي پژوهشي شزم اشارهاي به گام بعدي نشده است؛ اما حدس ميزنيم كه در مرحلهي بعد بايد، M نتيجهي حاصل از جستوجو را از طريق حفظ آن دسته از جفتهاي موجود در موسيقي كه تعداد كمينهاي مناطق هدف مشترك با فايل ضبطشده دارند، فيلتر كرد.
بهعنوان مثال، فرض كنيد نتيجهي جستوجو بدين شكل باشد:
فايل ۱۰ ثانيهاي ضبطشدهي ما تقريبا ۳۰۰ منطقهي هدف داشت؛ بنابراين در بهترين حالت داريم:
تنها قطعات شمارهي ۱۳ و ۲۵ را از نتايج حفظ خواهيم كرد. اگرچه قطعات شمارهي ۱، ۲، ۵ و ۸ چندين زوج مشترك با فايل ضبطشده دارند، هيچكدام حداقل يك منطقهي هدف ۵ نقطهاي مشترك با فايل ضبطشده شكل نميدهند. اين گام ميتواند چندين نتيجهي كاذب را فيلتر كند؛ زيرا ديتابيس هويت صوتي شزم، تعداد بسيار بالايي از جفتها با آدرس يكسان دارد و شما بهسادگي ميتوانيد به جفتهايي با آدرس يكسان برسيد كه به منطقهي هدف يكساني تعلق ندارند. اگر دليل اين موضوع را متوجه نميشويد، به تصوير پاياني از بخش پيشين توجه كنيد: آدرس {۲؛ ۳۰؛ ۱۰} توسط دو نقطهي زمان – فركانس استفاده ميشود كه به منطقهي هدف يكساني تعلق ندارند. اگر فايل ضبطشده نيز چنين آدرسي داشته باشد، حداقل يكي از دو جفت در نتايج فيلتر خواهد شد.
اين گام ميتواند در O(M) توسط يك جدول هش صورت بگيرد كه كليد آن {زمان مطلق لنگر در موسيقي؛ آيدي موسيقي} و تعداد دفعاتي است كه در نتيجه پديدار ميشود:
* هدف از اين كار، جستوجو براي منطقهي هدفي است كه توسط يك نقطهي لنگر در موسيقي ايجاد شده است. اين نقطهي لنگر را ميتوان با آيدي قطعهاي كه به آن تعلق دارد و زمان مطلقي كه در آن رخ ميدهد، تعريف كرد. ما تقريبي را صورت داديم؛ زيرا داخل يك موسيقي، ميتوان چندين نقطهي لنگر در آنِ واحد داشت. از آنجايي كه با يك طيفنگارهي فيلترشده سروكار داريم، در آنِ واحد، نقاط لنگر زيادي نخواهيم داشت؛ اما كليد {زمان مطلق لنگر در يك موسيقي؛ آيدي موسيقي} تمام مناطق هدف ايجادشده با اين نقاط هدف را گردآوري خواهد كرد.
يادداشت: ما در اين الگوريتم ۲ جدول هش استفاده كرديم. اگر با سازوكار آن آشنا نيستيد، اين روش را بهعنوان راهكار بسيار بهينهاي براي ذخيرهسازي و بهدستآوردن داده در انديشه متخصصين بگيريد. اگر تمايل داريد تا در اين باره اطلاعات بيشتري كسب كنيد، به اين لينك مراجعه كنيد.
همسازي زماني
در اين مرحله، تنها قطعاتي را در اختيار داريم كه بسيار نزديك به فايل ضبطشده هستند؛ اما كماكان بايد همسازي زماني بين نتهاي فايل ضبطشده و اين قطعات را مطالعه كنيم. در ادامه دليل اين موضوع را متوجه خواهيد شد:
در اين تصوير، دو منطقهي هدف را مشاهده ميكنيم كه به دو قطعهي موسيقي متفاوت تعلق دارند. اگر بهدنبال همسازي زماني نبوديم، مناطق هدف يادشده، امتياز تطابق بين اين دو قطعهي موسيقي را افزايش ميدادند؛ در حالي كه صداي مشابهي توليد نميكنند؛ زيرا نتهاي موجود در آن مناطق هدف با ترتيب يكساني نواخته نميشوند.
گام پاياني دربارهي ترتيب زماني است:
اكنون با سازوكار اين بخش آشنا شديد، حال بهسراغ فرآيند متخصص انجام آن ميرويم. در اين مرحله ليستي از آدرسها / مقادير را براي فايل ضبطشده در اختيار داريم:
{«زمان مطلق لنگر در فايل ضبطشده»} <- {«دلتاي زماني بين لنگر و نقطه»؛ «فركانس نقطه»؛ «فركانس لنگر»}
ما براي هر قطعهي موسيقي نيز ليستي از آدرس / مقادير داريم كه در جدول هش گام پيشين ذخيره شدهاند:
{«آيدي موسيقي»؛ «زمان مطلق لنگر در موسيقي»} <- {«دلتاي زماني بين لنگر و نقطه»؛ «فركانس نقطه»؛ «فركانس لنگر»}
روي قطعات موسيقي باقيمانده بايد فرآيندهاي زير پياده شوند:
از بين تمام قطعات موسيقي، قطعهاي را نگه ميداريم كه بيشترين تعداد نتهاي همساز را داشته باشد. چنانچه اين همسازي فراتر از «تعداد نتهاي داخل فايل ضبطشده» × «يك ضريب» باشد، پس قطعهي يادشده، همان موسيقي مورد انديشه متخصصين است.
حال بايد بهدنبال متاديتاي قطعهي مورد انديشه متخصصين («نام هنرمند»، «نام موسيقي»، «لينك موسيقي در آيتونز»، «لينك موسيقي در آمازون» و ...) باشيم و با آيدي موسيقي، نتيجه را به متخصص بازگردانيم.
حال نوبت به پيچيدگي ميرسد
اين جستوجو بسيار پيچيدهتر از نمونهي سادهاي است كه در ابتدا مشاهده كرديم، آيا اين فرآيند ارزش صرف وقت را دارد؟ فرآيند جستوجوي بهبوديافته، راهكار گامبهگامي است كه در هر گام از ميزان پيچيدگي ميكاهد.
براي درك بهتر، مجددا فرضيات ابتدايي را يادآوري ميكنيم و براي سادهسازي مساله، فرضيات بيشتري را در انديشه متخصصين ميگيريم:
جستوجو، گام نخست به تنها ۵ × ۳۰۰ جستوجوي واحد نياز دارد. ابعاد جستوجوي M با مجموع نتايج حاصل از ۵ × ۳۰۰ جستوجوي واحد برابر است.
M = (5 * 300)*(S * 30 * 5 * 300)/(512 * 512 * 2)
گام دوم، فيلتر نتايج را ميتوان در M عمليات انجام داد. در پايان اين مرحله، N نت توزيعشده در Z موسيقي وجود دارد. بدون آناليز آماري مجموعهي موسيقي، بهدست آوردن مقادير N و Z ممكن نيست. بهانديشه متخصصين ميرسد كه N بسيار پايينتر از M و Z است و حتي براي ديتابيسي مانند شزم با ۴۰ ميليون قطعه موسيقي، تنها چند موسيقي را به نمايش ميگذارد.
گام پاياني به آناليز همسازي زماني Z موسيقي مربوط ميشود. فرض ميكنيم كه هر قطعهي موسيقي بهصورت تقريبي تعداد نتهاي يكساني دارد: N/Z. در بدترين شرايط (فايل ضبطشده از يك قطعهي موسيقي كه تنها يك نت بهصورت مداوم در آن نواخته ميشود)، پيچيدگي يك آناليز (5*300) * (N/Z) خواهد بود؛ بدين ترتيب هزينهي محاسباتي Z قطعهي موسيقي N × ۳۰۰ × ۵ خواهد شد.
از آنجايي كه N بسيار كوچكتر از M است (N<
M = (300 * 300 * 30 * S)*(5 * 5)/(512 * 512 * 2)
اگر بهخاطر داشته باشيد، هزينهي انجام فرآيند جستوجوي ساده، ۳۰۰ × ۳۰۰ × ۳۰ × S بود. بنابراين فرآيند جستوجوي جديد ۲۰ هزار بار سريعتر است.
يادداشت: پيچيدگي حقيقي به توزيع فركانسها داخل كل قطعات موسيقي بستگي دارد؛ اما اين محاسبات ساده، ذهنيت مناسبي را از وضعيت واقعي در اختيارمان ميگذارد.
بهبودها
مقالهي شزم در سال ۲۰۰۳ منتشر شده؛ بنابراين ميتوان نتيجه گرفت كه پژوهشهاي مربوط به آن قديميتر هستند. در سال ۲۰۰۳ پردازندههاي ۶۴ بيتي بهصورت عمده وارد بازار شدند. بهجاي استفاده از يك نقطهي لنگر بهازاي هر منطقهي هدف مانند آنچه در مقالهي شزم پيشنهاد شده است (بهدليل ابعاد محدود اعداد صحيح ۳۲ بيتي)، ميتوان ۳ نقطهي لنگر (بهعنوان مثال ۳ نقطه پيش از منطقهي هدف) استفاده كرده و آدرس هر نقطه در منطقهي هدف را در عدد صحيح ۶۴ بيتي ذخيره كرد. اين تغيير ميتواند زمان جستوجو را بهميزان قابل توجهي كاهش دهد.
در حقيقت جستوجو ميتواند به يافتن ۴ نت داخل موسيقي با فاصلههاي زماني دلتاـتايم۱، دلتاـتايم۲ و دلتاـتايم۳ باشد؛ بدين مفهوم كه تعداد M نتايج ميتواند بسيار كمتر از آنچه باشد كه ما محاسبه كرديم. يكي از مزاياي عمدهي اين جستوجوي هويت صوتي در مقياسپذيري وسيع آن است:
مصالحه
يكي ديگر از مباحث به ميزان مقاومت الگوريتم در برابر نويز بازميگردد. اگرچه در خصوص اين موضوع ميتوان بهصورت مفصل صحبت كرد؛ اما بهصورت خلاصه، اگر دقت كرده باشيد، در طول اين مقالهي بلندبالا چندين و چند بار از آستانهها، ضرايب و مقادير ثابت استفاده كرديم (مانند نرخ نمونهبرداري، مدتزمان فايل ضبطشده و...).
همچنين چندين الگوريتم را براي فيلتر يا توليد طيفنگاره بهكار برديم. تمام اين مقادير ثابت، بر مقاومت در برابر نويز و پيچيدگي زماني تأثير ميگذارند. چالش حقيقي يافتن مقادير و مناسب و الگوريتمهايي است كه موارد زير را به بالاترين حد ممكن خود برسانند:
جمعبندي
اميدوارم كه در اين مرحله، با سازوكار شزم و چگونگي كاركرد آن آشنا شده باشيد. مقالهاي كه مطالعه كرديد، شما را به يك متخصص در زمينهي الگوريتمهاي تشخيص موسيقي بدل نميكند؛ اما اميدواريم كه اكنون تصوير واضحتري از آن در ذهن شما ايجاد شده باشد. به خاطر داشته باشيد كه شزم تنها يكي از چندين راهكار براي ايجاد هويت صوتي است.
شما اكنون ميتوانيد ابزاري را براي تشخيص قطعات موسيقي توسعه دهيد. براي انجام چنين كاري توصيه ميكنيم به اين مقاله مراجعه كنيد كه بر توسعهي نسخهاي سادهشده از شزم بهزبان جاوا تمركز دارد. نويسندهي مقالهي يادشده، در يكي از كنفرانسهاي جاوا صحبت كرده است كه اسلايدهاي آن در اين لينك در دسترس قرار دارد. شما ميتوانيد براي مشاهدهي نسخهي MATLAB/Octave شزم، به اين لينك نيز مراجعه كنيد. در نهايت اينكه به خود مقالهي پژوهشي شزم از بنيانگذار اين شركت نيز از اين لينك ميتوانيد دسترسي داشته باشيد.
دنياي محاسبات موسيقايي حوزهاي بسيار جذاب با الگوريتمهاي پيچيدهاي است كه همهروزه بدون اطلاع از سازوكارشان از آنها استفاده ميكنيم. اگرچه شزم ساده نيست؛ اما درك آن بسيار آسانتر از موارد زير است:
اگر به اين مباحث علاقهمند باشيد، رقابت سالانهاي بين پژوهشگران اين حوزه برگزار ميشود و الگوريتمهاي هركدام از شركتكنندگان در دسترس قرار دارد، شما ميتوانيد از طريق اين لينك به رقابت MIREX مراجعه كنيد.
هم انديشي ها