AUDIO·DSP
الصوت · العقدة 00
↩ البوابة

الأرض الصلبةليش قبل كيف

ما هو الصوت أصلاً؟

الصوت تذبذبٌ في ضغط الهواء عبر الزمن — دالّة متّصلة. لكن الحاسوب لا يعرف إلا أعداداً منفصلة. هذه العقدة تثبّت كيف نحوّل الموجة المتّصلة إلى أرقام، وتكشف أخطر فخّ في كل معالجة الصوت: الـaliasing.

تريد تسجيل صوت أعلى ترددٍ فيه ٢٠٬٠٠٠ هرتز (حدّ سمع الإنسان). كم عيّنة في الثانية تحتاج؟

الحدس الساذج: "عيّنة لكل دورة → ٢٠ ألف عيّنة/ثانية". جرّبه ذهنياً: ارسم موجة جيبية وخذ عيّنة واحدة كل دورة — عند نفس الطور دائماً. ماذا ترى؟ خطّاً مسطّحاً! فقدت الموجة تماماً. كم عيّنة على الأقل تحتاج لكل دورة حتى لا تختفي الموجة أو — أسوأ — تتنكّر في هيئة موجة أبطأ لم تكن موجودة؟ ولماذا CD تحديداً ٤٤٬١٠٠ هرتز لا ٤٠٬٠٠٠؟

العمليتان: أخذ العيّنات والتكميم

تماماً كالصورة (تقطيع المكان والقيمة)، نقطّع الصوت مرّتين:

FIG 1 الموجة المتّصلة → عيّنات منتظمة → مستويات مكمَّمة
الجيب المتّصل (تركواز) · العيّنات المنتظمة (ذهبي) · الخطوط الأفقية = مستويات التكميم
كل عيّنة = قياس للسعة عند لحظة، مقرّبٌ لأقرب مستوى. الصوت الرقمي = هذه الأرقام فقط.

نظرية نايكوست-شانون — حلّ اللغز

الجواب الصادم: تحتاج أكثر من عيّنتين لكل دورة لأعلى تردد. أي:

Nyquist
fₛ > 2 · f_max ⇔ f_max < fₛ/2 (تردد نايكوست)

عيّنتان لكل دورة هما الحدّ النظري لتمييز موجة. أقلّ من ذلك، وتحدث الكارثة:

FIG 2 Aliasing — موجة سريعة تتنكّر في هيئة بطيئة
الموجة الحقيقية (سريعة، مرجاني) · العيّنات (ذهبي) · الموجة "الوهمية" المُدرَكة (تركواز)
حين تتجاوز الموجة fₛ/2، تقع العيّنات على نمطٍ يطابق موجةً أبطأ غير موجودة — هذا aliasing: تردد عالٍ "ينطوي" ويتنكّر كتردد منخفض. لا يمكن عكسه بعد حدوثه.
جذر الخطأ — لماذا 44.1kHz لا 40kHz

السمع حتى ٢٠kHz، فنايكوست يكفيه ٤٠kHz نظرياً. لكن "عيّنتين بالضبط" حدٌّ مثاليّ لا يُبلَغ عملياً، ونحتاج فلتر مانع-تنكّر (anti-aliasing) يقطع ما فوق ٢٠kHz قبل أخذ العيّنات — والفلاتر الحقيقية ليست حادّة تماماً، تحتاج "هامش انتقال" (transition band). الـ4.1kHz الزائدة هي ذلك الهامش. (ولأسباب تاريخية تتعلّق بتسجيل الصوت رقمياً على أشرطة فيديو PAL/NTSC في الثمانينات.)

ليش — ضجيج التكميم ليس عشوائياً

التكميم يقرّب كل عيّنة، فيضيف خطأً = ضجيج التكميم. كل بِت إضافي يضاعف عدد المستويات ويحسّن نسبة الإشارة/الضجيج بـ~6dB. هذا "تقطيع القيمة" من العقدة نفسها في الصور (banding) — لكن هنا يُسمَع كـhiss. تذكّره؛ سنخفيه ذكياً في الضغط (العقدة ٠٦) عبر "تشكيل الضجيج" حيث لا تسمعه الأذن.

  1. ولّد مصفوفة عيّنات لنغمة جيبية نقية بتردد f ومعدّل fₛ: x[n] = A·sin(2π·f·n/fₛ). اكتبها بصيغة WAV من الصفر (ترويسة RIFF بسيطة + عيّنات 16-bit). شغّلها واسمعها.
  2. أرِ الـaliasing بأذنك: ثبّت fₛ=8000، وولّد نغمات بـf = 500, 1000, ... , 7500. ابتداءً من f > 4000، النغمة "تنزل" بدل أن تصعد. سجّل التردد المسموع لكل f وتحقّق أنه |f − k·fₛ|.
  3. ضجيج التكميم: كمّم نفس النغمة إلى 8، 4، 2 بِت واسمع الـhiss يزداد. احسب نسبة الإشارة/الضجيج لكل عمق.

القيود: اكتب الـWAV بايتاً بايتاً، بلا مكتبة صوت. اسمع نتيجتك — سماع الـaliasing هو لحظة "آها".

الخلاصة

الصوت = أخذ عيّنات (تقطيع الزمن) + تكميم (تقطيع السعة). نايكوست يفرض fₛ > 2·f_max، وتجاوزه يسبّب aliasing لا رجعة فيه. لاحظنا أن قيمة العيّنة مجرّد سعة لحظية — لكنها لا تخبرنا "ما الترددات الموجودة". لمعرفة ذلك نحتاج منشوراً يفكّك الموجة. هذا فورييه.