من المستمر للمتقطع
العالم المادي تناظري بطبعه. موجات الصوت بتنتشر في الهوا كتغيّرات ناعمة ومتصلة في الضغط. ودرجة الحرارة بتطلع وتنزل بالراحة من غير انقطاع. والنور بيوصل في سيل متواصل من الفوتونات. بس الكمبيوترات اللي بتعالج الحاجات دي رقمية في الأساس — بتشتغل بأعداد محدودة تتعدّ ومتخزّنة في الـ memory. وإنك تعدّي الفجوة دي هو التحدي الأساسي في الـ Digital Signal Processing (معالجة الإشارات الرقمية)، ونظرية نايكويست-شانون للـ sampling (مبرهنة نايكويست-شانون لأخذ العينات) هي المفتاح الرياضي اللي بيخلّي ده ممكن.
النظرية بتقولّنا حاجة مدهشة: تقدر تلقط signal (إشارة) مستمرة وتبنيها تاني بعدين بالظبط من عدد محدود من الـ samples (العينات) المتقطعة — بس بشرط إنك تاخد الـ samples بسرعة كفاية. وإنك تفهم السرعة المطلوبة بالظبط قد إيه، وإيه اللي بيحصل لما متلتزمش بيها، هو موضوع الدرس ده.
الـ signal المستمرة المحدودة النطاق (band-limited) اللي مفيهاش مكوّنات frequency أعلى من fmax ممكن تتبني تاني بالظبط من samples متقطعة متاخدة بمعدّل fs ≥ 2 fmax. والمعدّل الأدنى ده اسمه الـ Nyquist rate (معدل نايكويست).
fs ≥ 2 · fmax — شرط نايكويستيعني إيه sampling؟
الـ sampling معناه إنك تقيس signal مستمرة كل فترة زمنية ثابتة وتسجّل كل قياس كرقم. كل قياس اسمه sample. وعدد الـ samples اللي بتتلقط في الثانية هو الـ sampling rate (معدل أخذ العينات) (أو الـ sampling frequency)، ورمزه fs وبيتقاس بالهرتز (Hz).
تخيّل sine wave بتتذبذب بـ frequency (تردد) 1 هرتز — دورة كاملة في الثانية. لو أخدت samples بمعدّل 10 هرتز، يبقى بتاخد 10 قياسات في كل دورة، وده كفاية تشوف شكل الموجة بوضوح. بس لو أخدت samples بمعدّل 1.5 هرتز بس — أقل من sampleين في الدورة — الـ samples مش هتقدر توصّل الـ frequency الأصلية. حاجة هتبوظ.
الـ Nyquist rate
هاري نايكويست (1928) وشانون (1949) حدّدوا بالظبط أقل sampling rate محتاجينه عشان نلقط signal محدودة النطاق من غير ما يضيع منها حاجة. النظرية بتقول: لو الـ signal مفيهاش مكوّنات frequency أعلى من fmax، يبقى أي sampling rate fs ≥ 2 fmax كفاية عشان تبنيها تاني بالظبط.
الكمية 2 fmax اسمها الـ Nyquist rate. ونص الـ sampling frequency — fs/2 — اسمه الـ Nyquist frequency (تردد نايكويست) أو الـ folding frequency (تردد الطي). وده أعلى frequency تقدر تمثّلها من غير أي لبس عند sampling rate معيّن.
ليه الضعف؟
عامل الاتنين ده ممكن تفهمه بالحدس. الـ sine wave اللي الـ frequency بتاعتها f بتخلّص دورة كاملة في 1/f ثانية. وعشان تحدد الدورة دي من غير لبس — وتفرّقها عن موجة تانية مختلفة خالص — محتاج sampleين على الأقل في كل دورة: واحدة تلقط الجزء الطالع وواحدة تلقط الجزء النازل. sample واحدة في الدورة بتسيب لبس؛ مش هتعرف الـ signal كانت طالعة ولا نازلة عند النقطة دي.
وبشكل أدق، الـ sampling بيعمل نسخ كتير من الـ spectrum (الطيف) بتاع الـ signal، المسافة بينهم fs في الـ frequency domain. لو fs ≥ 2 fmax، النسخ دي مش هتركب على بعض، وتقدر تعزل الـ spectrum الأصلي بـ low-pass filter (مرشح تمرير منخفض) بسيط. أما لو fs < 2 fmax، النسخ بتخبط في بعض وتتخلط، والنتيجة aliasing (الإيهام) — تشويه دايم مالوش رجوع.
الـ sampling بمعدّل fs بيعمل نسخ دورية من الـ spectrum بتاع الـ signal عند مضاعفات fs. وشرط نايكويست بيضمن إن النسخ دي متركبش على بعض، فكل المعلومات بتفضل محفوظة. ولو كسرته، الـ spectrum بيتداخل، وده اللي اسمه الـ aliasing.
الـ aliasing: لما الـ sampling يمشي غلط
لما الـ sampling rate يقل عن الـ Nyquist rate، المكوّنات اللي الـ frequency بتاعتها عالية في الـ signal بتظهر كمكوّنات frequency واطية مزيّفة في البيانات اللي اتاخدت. الظاهرة دي اسمها الـ aliasing. والاسم جاي من إن الـ signal العالية بتتنكّر في شكل “اسم مستعار” (alias) بـ frequency واطية.
الـ frequency بتاعة الـ alias بتتحدد بالقاعدة دي: لو signal الـ frequency بتاعتها f اتاخد منها samples بمعدّل fs وكانت f > fs/2، فهي بتتقلب لـ frequency قيمتها |f − k fs| لعدد صحيح k بيحط النتيجة تحت fs/2. بكلام أبسط، الـ frequency العالية بتتطوي على نفسها وتقع جوه النطاق اللي بنسمعه أو بنشوفه.
تأثير العجلة اللي بتلف هو أشهر مثال مرئي للـ aliasing. في أفلام الكاوبوي القديمة، عجلات العربيات ساعات بتبان كأنها بتلف لورا. الكاميرا بتسجّل 24 frame في الثانية، يعني الـ sampling rate fs = 24 هرتز والـ Nyquist frequency 12 هرتز. اختار سلك واحد من أسلاك العجلة وتابعه. لو العجلة لفّت 23 لفّة في الثانية — أعلى بكتير من 12 هرتز، وأقل بشوية من معدّل الـ frames — يبقى السلك ده بيتقدّم بين frame والتاني 23/24 من اللفّة، فبيقف قبل نقطة البداية بشوية. وعينك بتاخد أقصر طريق فبتقرا ده 1/24 من اللفّة لورا، فالعجلة بتبان كأنها بتزحف بالعكس بلفّة واحدة في الثانية. حركة اللف حصلها aliasing.
والاتجاه مش دايمًا لورا. لو خلّيت العجلة تلف 25 لفّة في الثانية بدل كده — يعني أعلى بشوية من معدّل الـ frames — السلك في كل frame بيعدّي مكانه اللي فات بـ 1/24 من اللفّة، والعجلة بتزحف بالراحة لقدّام بلفّة واحدة في الثانية. القاعدة اللي فوق بتدّي نفس المقدار، 1 هرتز، في الحالتين (|23 − 24| = |25 − 24| = 1)، لأنها بتاخد القيمة المطلقة؛ أما الاتجاه فبتحدده إشارة المقدار f − round(f/fs)·fs، اللي بتبقى سالبة عند 23 هرتز وموجبة عند 25 هرتز. وفي الحالتين الكاميرا متقدرش تفرّق بين 23 هرتز و25 هرتز و1 هرتز.
في الصوت، الـ aliasing بيطلّع نغمات وهمية بـ frequencies غلط، بتتسمع كطقطقة أو زنّ أو harmonics مشوّهة. وفي استوديو التسجيل، الـ aliasing كارثة لأنه بيلوّث الـ signal المتسجّلة بتشويهات متقدرش تفرّقها عن المحتوى الحقيقي.
الـ anti-aliasing filters
الدفاع المعتاد ضد الـ aliasing هو إنك تحدّ نطاق الـ signal قبل الـ sampling بـ low-pass filter — وعادةً بيتسمّى anti-aliasing filter (مرشح مكافحة الإيهام). الـ filter ده بيضعّف كل الـ frequencies اللي فوق fs/2، فبيضمن إن أي حاجة توصل لجهاز الـ sampling بتحقق شرط نايكويست.
أي analog-to-digital converter (ADC) في الأجهزة الاحترافية فيه filter زي ده. وعمليًا، الـ filters متقدرش يبقى عندها قطع حاد تمامًا، فالمصمّمين بيختاروا sampling rate أعلى شوية من الحد الأدنى بالظبط. وصوت الـ CD بيستخدم 44.1 كيلوهرتز جزئيًا لأن الـ anti-aliasing filter في الوقت ده كان بيشتغل بثبات لحد حوالي 20 كيلوهرتز بهامش كفاية.
الـ converters الحديثة غالبًا بتاخد samples بمعدّلات أعلى بكتير (oversampling، الإفراط في أخذ العينات) وبتستخدم filters رقمية عشان تقضي على الـ aliasing. الـ DAC اللي في موبايلك ممكن ياخد samples جوّاه بمعدّل 192 كيلوهرتز وبعدين ينزّلها رقميًا لـ 48 كيلوهرتز — الـ filter الرقمي الحاد أسهل بكتير في التنفيذ من filter تناظري مثالي.
إعادة البناء المظبوطة
نظرية الـ sampling مش بس كلام عن الالتقاط — هي كمان كلام عن إعادة البناء. لو عندك samples متاخدة بالـ Nyquist rate أو أعلى، تقدر ترجّع الـ signal المستمرة الأصلية بدقة تامة بعملية اسمها sinc interpolation (استيفاء sinc).
رياضيًا، الـ interpolation بيضرب كل sample في دالة sinc — منحنى sin(x)/x متمركز على مكان الـ sample دي في الزمن — وبعدين يجمع النتايج. ودالة sinc هي الـ impulse response (الاستجابة النبضية) بتاعة low-pass filter مثالي، فالـ interpolation ده هو هو بالظبط إنك تعدّي نبضات الـ samples على low-pass filter.
عمليًا، الـ sinc interpolation المثالي مكلّف حسابيًا لأن دالة sinc ممتدة في الزمن من غير نهاية. والأنظمة الحقيقية بتستخدم windowed sinc filters أو طرق interpolation تانية بالـ polynomials، بتتنازل عن حتة صغيرة من الدقة النظرية قصاد حسابات تقدر عليها.
التطبيقات العملية
نظرية الـ sampling بتحكم تقريبًا أي نظام رقمي بيتعامل مع العالم المادي. الصوت: مشغّلات الـ CD بتاخد samples بمعدّل 44.1 كيلوهرتز، فبتلقط كل الـ frequencies اللي الإنسان بيسمعها (لحد ~20 كيلوهرتز). والاستوديوهات الاحترافية بتستخدم 48 أو 96 كيلوهرتز عشان هامش زيادة. الاتصالات: الصوت على خطوط التليفون محدود لـ 3.4 كيلوهرتز وبيتاخد منه samples بمعدّل 8 كيلوهرتز — الضعف بالظبط تقريبًا. وبرامج ضغط الفيديو بتاخد samples من قنوات اللون والإضاءة بمعدّلات مناسبة لاستجابة الـ spatial frequency بتاعة النظر البشري.
التصوير الطبي: جهاز الرنين المغناطيسي بيجمع البيانات الخام في الـ frequency domain (فضاء k) ولازم ياخد samples كثيفة كفاية عشان يبني الدقة المكانية المطلوبة. وأجهزة الأشعة المقطعية بتلفّ مجموعة detectors حوالين المريض ولازم تاخد samples على زوايا قريبة كفاية. والاتنين تطبيقات مباشرة لنظرية الـ sampling في بعدين.
الاتصالات اللاسلكية: محطة 5G ممكن تستقبل signals ممتدة على نطاق frequency لحد 100 ميجاهرتز. فالـ ADC بتاعها لازم ياخد أكتر من 200 مليون sample في الثانية. ونظرية الـ sampling بتحدد أقل مواصفات للـ hardware — ومعاها تكلفة وطاقة كل محطة على كل برج.
- الـ sampling بيحوّل الـ signal المستمرة لسلسلة قيم متقطعة بإنه يقيس الـ signal كل فترة ثابتة Ts = 1/fs.
- نظرية نايكويست-شانون بتقول إن الـ signal المحدودة النطاق اللي أعلى frequency فيها fmax ممكن تتبني تاني بالظبط لو اتاخد منها samples بمعدّل fs ≥ 2 fmax.
- الـ sampling تحت الـ Nyquist rate بيعمل aliasing — بيطوي المحتوى العالي على frequencies أوطى وبيبوّظ الـ signal من غير رجوع.
- الـ anti-aliasing low-pass filters اللي بتتحط قبل الـ ADC بتمنع الـ aliasing لأنها بتضمن إن كل محتوى الـ signal بيحقق شرط نايكويست.
- إعادة البناء المظبوطة بتتعمل بالـ sinc interpolation، وده نفس إنك تعدّي سلسلة الـ samples على low-pass filter مثالي.