পাঠ ০৫ · ৫৭-এর মধ্যে · মডিউল ২
Home / Courses / Digital Signal Processing / স্যাম্পলিং থিওরেম

স্যাম্পলিং থিওরেম (নাইকুইস্ট-শ্যানন)

The sampling theorem (Nyquist-Shannon)
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • নাইকুইস্ট-শ্যানন স্যাম্পলিং থিওরেমের সঠিক গাণিতিক বক্তব্য
  • নাইকুইস্ট ফ্রিকোয়েন্সি ($f_s/2$) বনাম নাইকুইস্ট রেট ($2f_{max}$) — পার্থক্য স্পষ্টভাবে বলতে পারা
  • সত্যিকারের কোড দিয়ে যাচাই — শর্ত মানা হলে কোনো ফোল্ডিং হয় না, শর্ত ভাঙলে ফোল্ডিং সংখ্যাগতভাবে ঘটে
  • কেন এই থিওরেম ADC ডিজাইন ও anti-aliasing ফিল্টারের প্রয়োজনীয়তার মূল কারণ

১ · থিওরেমের বক্তব্য

একটি ব্যান্ড-লিমিটেড কন্টিনিউয়াস সিগন্যাল — অর্থাৎ যার মধ্যে $f_{max}$-এর বেশি কোনো ফ্রিকোয়েন্সি উপাদান নেই — যদি স্যাম্পল রেট $f_s$-এ স্যাম্পল করা হয়, তাহলে সেই স্যাম্পলগুলো থেকে মূল সিগন্যালটি নিখুঁতভাবে পুনর্গঠন করা সম্ভব, শুধুমাত্র যদি:

$$f_s > 2 f_{max}$$

এটাই নাইকুইস্ট-শ্যানন স্যাম্পলিং থিওরেমNyquist-Shannon Sampling Theoremএকটি ব্যান্ড-লিমিটেড সিগন্যালকে তথ্য না হারিয়ে সম্পূর্ণরূপে পুনর্গঠনযোগ্য স্যাম্পল-সিরিজে রূপান্তর করতে হলে স্যাম্পল রেট সিগন্যালের সর্বোচ্চ ফ্রিকোয়েন্সির দ্বিগুণের বেশি হতে হবে। — একটি প্রতিষ্ঠিত, সুপরিচিত DSP উপপাদ্য (Harry Nyquist ও Claude Shannon-এর কাজের উপর ভিত্তি করে)। দুটো গুরুত্বপূর্ণ টার্ম এখান থেকেই আসে:

নাইকুইস্ট ফ্রিকোয়েন্সি
$f_s/2$ — একটি নির্দিষ্ট স্যাম্পল রেট $f_s$-এ, যে সর্বোচ্চ ফ্রিকোয়েন্সি পর্যন্ত অ্যালিয়াসিং ছাড়াই প্রতিনিধিত্ব করা সম্ভব।
নাইকুইস্ট রেট
$2f_{max}$ — একটি নির্দিষ্ট সিগন্যালের জন্য, সর্বনিম্ন স্যাম্পল রেট যা নিরাপদে ব্যবহার করা যায় (এর বেশি রাখতে হবে, ঠিক সমান নয়)।

লক্ষ্য করুন শর্তটি কঠোরভাবে "বেশি" ($>$), "সমান বা বেশি" নয় — ঠিক $f_s = 2f_{max}$-এ তাত্ত্বিকভাবে সমস্যা থাকতে পারে (যেমন সিগন্যাল ঠিক শূন্য-ক্রসিং-এই স্যাম্পল হয়ে যাওয়া), তাই বাস্তব ডিজাইনে সবসময় $f_s$ $2f_{max}$-এর স্পষ্টভাবে বেশি রাখা হয়।

২ · সত্যিকারের ডেমো — শর্ত মানা বনাম ভাঙা

L01-এ আমরা দেখেছিলাম ৪৫ Hz সিগন্যাল ৫০ Hz-এ স্যাম্পল করলে অ্যালিয়াসিং ঘটে। এখানে একটি নতুন উদাহরণ — ৩০ Hz সিগন্যাল — নিয়ে একই কোড সেলে দুটো কেস পাশাপাশি পরীক্ষা করা হচ্ছে: একবার ১০০ Hz-এ (নাইকুইস্ট রেট $2×30=60$ Hz-এর অনেক উপরে, তাই নিরাপদ), আর একবার ৪০ Hz-এ (৬০ Hz-এর নিচে, তাই নাইকুইস্ট ভাঙা হচ্ছে)। উভয় কেসেই আমরা "ফোল্ডিং সূত্র" ($k=\text{round}(f_{true}/f_s)$, $f_{alias}=f_{true}-k f_s$, L01-এর মতোই) দিয়ে গণনা করা ফ্রিকোয়েন্সিতে নতুন করে স্যাম্পল নিয়ে মূল স্যাম্পলের সাথে তুলনা করব।

Python
import math

f_true = 30.0   # প্রকৃত সিগন্যাল ফ্রিকোয়েন্সি (Hz) -- L01-এর 45 Hz থেকে ভিন্ন
N = 10

def alias_check(fs, f_true=f_true, N=N):
    nyq = fs / 2
    k = round(f_true / fs)
    f_alias = f_true - k * fs
    samples_true = [math.sin(2 * math.pi * f_true * n / fs) for n in range(N)]
    samples_alias = [math.sin(2 * math.pi * f_alias * n / fs) for n in range(N)]
    max_diff = max(abs(a - b) for a, b in zip(samples_true, samples_alias))
    return nyq, k, f_alias, samples_true, samples_alias, max_diff

for label, fs in [("A: fs = 100 Hz  (নাইকুইস্ট মানা হয়েছে, 100 > 60)", 100.0),
                   ("B: fs = 40 Hz   (নাইকুইস্ট ভাঙা হয়েছে, 40 < 60)", 40.0)]:
    nyq, k, f_alias, s_true, s_alias, max_diff = alias_check(fs)
    print(f"--- {label} ---")
    print(f"fs={fs} Hz, নাইকুইস্ট ফ্রিকোয়েন্সি fs/2={nyq} Hz, f_true={f_true} Hz")
    print(f"ফোল্ডিং সূত্র থেকে: k={k}, f_alias={f_alias} Hz")
    print(f"{'n':>3} | {'true':>10} | {'alias-eq':>10} | {'diff':>10}")
    for n in range(N):
        diff = abs(s_true[n] - s_alias[n])
        print(f"{n:>3} | {s_true[n]:>10.6f} | {s_alias[n]:>10.6f} | {diff:>10.2e}")
    print(f"সর্বোচ্চ পার্থক্য: {max_diff:.3e}")
    print()

    
কেস A-তে $f_s=100$ Hz হওয়ায় $k=\text{round}(30/100)=0$ — অর্থাৎ ফোল্ডিং সূত্র নিজেই বলছে কোনো ফোল্ডিং হয়নি ($f_{alias}=f_{true}=30$ Hz), তাই সর্বোচ্চ পার্থক্য ঠিক ০। কেস B-তে $f_s=40$ Hz হওয়ায় $k=1$, $f_{alias}=30-40=-10$ Hz — অর্থাৎ ৩০ Hz সিগন্যালের স্যাম্পল একটি −১০ Hz সিগন্যালের স্যাম্পলের সাথে সর্বোচ্চ মাত্র ৫.০২২ × ১০⁻¹⁵ পার্থক্যে (ফ্লোটিং-পয়েন্ট নির্ভুলতার সীমা, বাস্তবে শূন্য) মিলে যায়। এটাই থিওরেমের সরাসরি প্রমাণ — শর্ত মানা হলে সিগন্যাল তার নিজস্ব ফ্রিকোয়েন্সিতেই থাকে, ভাঙলে অন্য একটি ফ্রিকোয়েন্সির সাথে সংখ্যাগতভাবে অভিন্ন হয়ে যায়।

৩ · কেন এই সীমা — সংক্ষিপ্ত স্বজ্ঞা

প্রতি চক্রে অন্তত দুটো স্যাম্পল না পড়লে, একটি ডিসক্রিট স্যাম্পল-সিরিজ থেকে বলা সম্ভব নয় সিগন্যালটি আসলে কত দ্রুত কম্পিত হচ্ছিল — কারণ একাধিক ভিন্ন ফ্রিকোয়েন্সির সাইন-তরঙ্গ ঠিক একই বিন্দুগুলো দিয়ে যেতে পারে (উপরের কোড সেলের কেস B ঠিক এটাই দেখাচ্ছে)। $f_s > 2f_{max}$ শর্তটি নিশ্চিত করে প্রতিটি ফ্রিকোয়েন্সির জন্য একটি "নিজস্ব" স্যাম্পল-প্যাটার্ন থাকে, যা অন্য কোনো নিম্ন ফ্রিকোয়েন্সির সাথে গুলিয়ে যায় না।

মূল কথা · Key takeaway

নাইকুইস্ট-শ্যানন থিওরেম শুধু একটি সূত্র নয় — এটি একটি হার্ড সীমা। $f_s > 2f_{max}$ মানলে তথ্য নিরাপদ, ভাঙলে তথ্য স্থায়ীভাবে ধ্বংস হয়ে যায় (L01-এর "একবার হারিয়ে গেলে আর ফিরে আসে না" কথাটির গাণিতিক ভিত্তি এটাই)। L06 এই একই ঘটনার আরও গভীর প্যাটার্ন — "ফোল্ডিং" — দেখাবে, আর L08 দেখাবে বাস্তব ADC/DAC-এ এই থিওরেম ঠিক কোথায় প্রয়োগ হয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের ডেমোতে কেস A-তে সর্বোচ্চ পার্থক্য ঠিক ০ এসেছে, কিন্তু কেস B-তে ০ না হয়ে ৫.০২২×১০⁻¹⁵ এসেছে — সম্পূর্ণ ০ নয় কেন?

কেস A-তে $f_{alias}$ ঠিক $f_{true}$-এর সমান (৩০ = ৩০), তাই দুটো স্যাম্পল-লিস্ট একই সূত্র দিয়ে তৈরি — বিটওয়াইজ অভিন্ন, পার্থক্য প্রকৃতপক্ষেই ০। কেস B-তে $f_{alias}=-10$ Hz, যা $f_{true}=30$ Hz থেকে ভিন্ন — এই দুটো সাইন-তরঙ্গ গাণিতিকভাবে সমান (কারণ $\sin(2\pi \cdot 30 \cdot n/40)$ এবং $\sin(-2\pi \cdot 10 \cdot n/40)$ প্রতিটি পূর্ণসংখ্যা $n$-এ একই মান দেয়, যেহেতু $30=40-10$), কিন্তু math.sin-এর ভেতরের ফ্লোটিং-পয়েন্ট গণনা দুটো ভিন্ন ইনপুট আর্গুমেন্ট (একটি $2\pi \cdot 30 \cdot n/40$, অন্যটি $-2\pi \cdot 10 \cdot n/40$) থেকে আসছে, তাই রাউন্ডিং-অফ ত্রুটির কারণে সর্বশেষ কয়েক বিটে সামান্য পার্থক্য থেকে যায় — এটা DSP-এর সমস্যা নয়, IEEE 754 ফ্লোটিং-পয়েন্ট গাণিতিকের স্বাভাবিক সীমা।

প্র ০২ নাইকুইস্ট ফ্রিকোয়েন্সি ও নাইকুইস্ট রেট — এই দুটো টার্মের মধ্যে ঠিক পার্থক্য কী?

নাইকুইস্ট ফ্রিকোয়েন্সি ($f_s/2$) একটি নির্দিষ্ট স্যাম্পল রেট-এর ওপর নির্ভর করে — এটি বলে দেয় সেই রেটে সর্বোচ্চ কত ফ্রিকোয়েন্সি নিরাপদে ধরা যায়। নাইকুইস্ট রেট ($2f_{max}$) একটি নির্দিষ্ট সিগন্যালের ওপর নির্ভর করে — এটি বলে দেয় সেই সিগন্যালের জন্য ন্যূনতম কত স্যাম্পল রেট দরকার। উপরের ডেমোতে সিগন্যাল ($f_{true}=30$ Hz)-এর নাইকুইস্ট রেট ৬০ Hz; কেস A-এর স্যাম্পল রেট (১০০ Hz)-এর নাইকুইস্ট ফ্রিকোয়েন্সি ৫০ Hz।

প্র ০৩ যদি একটি সিগন্যালে একাধিক ফ্রিকোয়েন্সি উপাদান থাকে (যেমন ২০ Hz আর ৩০ Hz একসাথে), তাহলে থিওরেম প্রয়োগ করতে $f_{max}$ হিসেবে কোনটা নেওয়া উচিত?

সিগন্যালের সর্বোচ্চ ফ্রিকোয়েন্সি উপাদান — এই উদাহরণে ৩০ Hz, ২০ Hz নয়। কারণ নিরাপদ স্যাম্পলিং-এর জন্য সিগন্যালের সবচেয়ে দ্রুত পরিবর্তনশীল অংশটিকেও প্রতি চক্রে অন্তত দুইবার ধরতে হবে; নিম্ন ফ্রিকোয়েন্সি উপাদান স্বয়ংক্রিয়ভাবে নিরাপদ থাকে যদি সর্বোচ্চটি নিরাপদ থাকে। এই কারণেই বাস্তব সিস্টেমে ADC-এর আগে একটি anti-aliasing ফিল্টার বসিয়ে $f_{max}$-এর বাইরের সব উচ্চ ফ্রিকোয়েন্সি আগেই কেটে ফেলা হয় (L06-L08-এ বিস্তারিত)।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে f_true = 30.0-কে f_true = 55.0-এ বদলালে (কেস B-এর fs = 40.0 অপরিবর্তিত রেখে) অ্যালিয়াসড ফ্রিকোয়েন্সি $f_{alias}$ কত হবে বলে আপনার ধারণা? সূত্র ব্যবহার করে নিজে হিসেব করুন।

    $k=\text{round}(55/40)=\text{round}(1.375)=1$, তাই $f_{alias}=55-1×40=15$ Hz। অর্থাৎ ৫৫ Hz সিগন্যালটি ১৫ Hz সিগন্যালের মতো দেখতে হয়ে যাবে।

  2. পরীক্ষা করুন: উপরের কোড সেলে f_true = 30.0-কে f_true = 55.0-এ পরিবর্তন করে Run চেপে আপনার হিসেব যাচাই করুন। কেস A (fs=100 Hz)-এও কী পরিবর্তন হয় লক্ষ করুন।

    কেস B-তে সত্যিই $f_{alias}=15.0$ Hz দেখাবে এবং সর্বোচ্চ পার্থক্য আবার ফ্লোটিং-পয়েন্ট সীমায় (প্রায় ৬.৩৩ × ১০⁻¹⁵) থাকবে। কেস A-তেও এখন সমস্যা দেখা দেবে, কারণ $55 > 100/2=50$ — অর্থাৎ ৫৫ Hz সিগন্যাল এখন ১০০ Hz স্যাম্পল রেটের নাইকুইস্ট ফ্রিকোয়েন্সিও ছাড়িয়ে গেছে, তাই কেস A-ও আর "নিরাপদ" থাকবে না — এটা প্রমাণ করে নিরাপত্তা নির্ভর করে $f_s$ আর $f_{true}$-এর অনুপাতের উপর, শুধু $f_s$-এর মান কত বড় তার উপর নয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • পরবর্তী পাঠ — অ্যালিয়াসিং: কারণ ও প্রতিরোধ L06 এই পাঠের ফোল্ডিং সূত্রটিকে আরও গভীরভাবে দেখা হবে — একটি টেবিলে দেখানো হবে ক্রমবর্ধমান ফ্রিকোয়েন্সিতে "ফোল্ডিং" প্যাটার্ন কীভাবে তৈরি হয়।
  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ স্যাম্পলিং, কনভোলিউশন, Z-ট্রান্সফর্ম, DTFT/DFT, FFT, FIR/IIR ফিল্টার ডিজাইন, মাল্টিরেট প্রসেসিং, স্পেকট্রাল এস্টিমেশন, র‍্যান্ডম সিগন্যাল প্রসেসিং, বাস্তব প্রয়োগ ও ক্যাপস্টোন।
  • Numerical Methods কোর্স সহোদর কোর্স সাধারণ সংখ্যাগত অ্যালগরিদম ও ফ্লোটিং-পয়েন্ট নির্ভুলতার গভীর কভারেজ — উপরের ডেমোতে দেখা ফ্লোটিং-পয়েন্ট রাউন্ডিং-এর মূল কারণ সেখানে বিস্তারিত ব্যাখ্যা করা আছে।
আগের পাঠ
সিস্টেম — লিনিয়ারিটি, টাইম-ইনভ্যারিয়েন্স ও LTI সিস্টেম