ما هو الصوت أصلاً؟
الصوت تذبذبٌ في ضغط الهواء عبر الزمن — دالّة متّصلة. لكن الحاسوب لا يعرف إلا أعداداً منفصلة. هذه العقدة تثبّت كيف نحوّل الموجة المتّصلة إلى أرقام، وتكشف أخطر فخّ في كل معالجة الصوت: الـaliasing.
تريد تسجيل صوت أعلى ترددٍ فيه ٢٠٬٠٠٠ هرتز (حدّ سمع الإنسان). كم عيّنة في الثانية تحتاج؟
الحدس الساذج: "عيّنة لكل دورة → ٢٠ ألف عيّنة/ثانية". جرّبه ذهنياً: ارسم موجة جيبية وخذ عيّنة واحدة كل دورة — عند نفس الطور دائماً. ماذا ترى؟ خطّاً مسطّحاً! فقدت الموجة تماماً. كم عيّنة على الأقل تحتاج لكل دورة حتى لا تختفي الموجة أو — أسوأ — تتنكّر في هيئة موجة أبطأ لم تكن موجودة؟ ولماذا CD تحديداً ٤٤٬١٠٠ هرتز لا ٤٠٬٠٠٠؟
العمليتان: أخذ العيّنات والتكميم
تماماً كالصورة (تقطيع المكان والقيمة)، نقطّع الصوت مرّتين:
- أخذ العيّنات (Sampling): نقيس السعة (amplitude) على فترات زمنية منتظمة. عددها/الثانية = معدّل العيّنات
fₛ(مثلاً 44100 Hz). تقطيعٌ للـزمن. - التكميم (Quantization): كل عيّنة قيمة حقيقية نقرّبها لأحد مستويات محدودة = عمق البِت (16-bit → 65536 مستوى). تقطيعٌ للـقيمة.
نظرية نايكوست-شانون — حلّ اللغز
الجواب الصادم: تحتاج أكثر من عيّنتين لكل دورة لأعلى تردد. أي:
Nyquistfₛ > 2 · f_max ⇔ f_max < fₛ/2 (تردد نايكوست)
عيّنتان لكل دورة هما الحدّ النظري لتمييز موجة. أقلّ من ذلك، وتحدث الكارثة:
fₛ/2، تقع العيّنات على نمطٍ يطابق موجةً أبطأ غير موجودة — هذا aliasing: تردد عالٍ "ينطوي" ويتنكّر كتردد منخفض. لا يمكن عكسه بعد حدوثه.السمع حتى ٢٠kHz، فنايكوست يكفيه ٤٠kHz نظرياً. لكن "عيّنتين بالضبط" حدٌّ مثاليّ لا يُبلَغ عملياً، ونحتاج فلتر مانع-تنكّر (anti-aliasing) يقطع ما فوق ٢٠kHz قبل أخذ العيّنات — والفلاتر الحقيقية ليست حادّة تماماً، تحتاج "هامش انتقال" (transition band). الـ4.1kHz الزائدة هي ذلك الهامش. (ولأسباب تاريخية تتعلّق بتسجيل الصوت رقمياً على أشرطة فيديو PAL/NTSC في الثمانينات.)
التكميم يقرّب كل عيّنة، فيضيف خطأً = ضجيج التكميم. كل بِت إضافي يضاعف عدد المستويات ويحسّن نسبة الإشارة/الضجيج بـ~6dB. هذا "تقطيع القيمة" من العقدة نفسها في الصور (banding) — لكن هنا يُسمَع كـhiss. تذكّره؛ سنخفيه ذكياً في الضغط (العقدة ٠٦) عبر "تشكيل الضجيج" حيث لا تسمعه الأذن.
- ولّد مصفوفة عيّنات لنغمة جيبية نقية بتردد
fومعدّلfₛ:x[n] = A·sin(2π·f·n/fₛ). اكتبها بصيغة WAV من الصفر (ترويسة RIFF بسيطة + عيّنات 16-bit). شغّلها واسمعها. - أرِ الـaliasing بأذنك: ثبّت
fₛ=8000، وولّد نغمات بـf = 500, 1000, ... , 7500. ابتداءً منf > 4000، النغمة "تنزل" بدل أن تصعد. سجّل التردد المسموع لكل f وتحقّق أنه|f − k·fₛ|. - ضجيج التكميم: كمّم نفس النغمة إلى 8، 4، 2 بِت واسمع الـhiss يزداد. احسب نسبة الإشارة/الضجيج لكل عمق.
القيود: اكتب الـWAV بايتاً بايتاً، بلا مكتبة صوت. اسمع نتيجتك — سماع الـaliasing هو لحظة "آها".
الصوت = أخذ عيّنات (تقطيع الزمن) + تكميم (تقطيع السعة). نايكوست
يفرض fₛ > 2·f_max، وتجاوزه يسبّب aliasing لا
رجعة فيه. لاحظنا أن قيمة العيّنة مجرّد سعة لحظية — لكنها لا تخبرنا "ما الترددات
الموجودة". لمعرفة ذلك نحتاج منشوراً يفكّك الموجة. هذا فورييه.