পাঠ ১৪ · ৫৭-এর মধ্যে · মডিউল ৪
Home / Courses / Digital Signal Processing / Z-ট্রান্সফর্ম

Z-ট্রান্সফর্ম — সংজ্ঞা ও স্বজ্ঞা

The Z-transform — definition & intuition
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

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

  • Z-ট্রান্সফর্মের আনুষ্ঠানিক সংজ্ঞা এবং কেন এটিকে "z^-1-এর পলিনোমিয়াল" হিসেবে ভাবা যায়
  • ফিনিট-লেংথ সিগন্যালের জন্য কীভাবে Z-ট্রান্সফর্মের কোয়েফিসিয়েন্টগুলো সরাসরি সিগন্যালের নমুনা
  • কমপ্লেক্স z-মানে Z-ট্রান্সফর্মের মান হাতে-কলমে গণনা করা (Python complex দিয়ে)
  • Z-ট্রান্সফর্ম কেন M3-এর ডিফারেন্স ইকুয়েশন/কনভোলিউশন এবং M5-এর ফ্রিকোয়েন্সি-ডোমেইন অ্যানালাইসিসের মাঝে একটি সেতু

১ · Z-ট্রান্সফর্মের সংজ্ঞা

একটি ডিসক্রিট-টাইম সিগন্যাল x[n]-এর Z-ট্রান্সফর্মZ-transformএকটি ডিসক্রিট-টাইম সিগন্যালকে কমপ্লেক্স ভেরিয়েবল z-এর একটি ফাংশনে রূপান্তরকারী গাণিতিক টুল, যা সিগন্যাল ও সিস্টেম অ্যানালাইসিসকে বীজগণিতীয় করে তোলে। সংজ্ঞায়িত হয়:

$$X(z) = \sum_{n=-\infty}^{\infty} x[n]\, z^{-n}$$

এখানে z একটি কমপ্লেক্স সংখ্যা। এই সংজ্ঞাটি প্রথম দেখায় ভয়ংকর লাগতে পারে (অসীম সিরিজ, কমপ্লেক্স সংখ্যা), কিন্তু আসল ধারণা সহজ — প্রতিটি নমুনা x[n]-কে z^-n দিয়ে "ওজন" দিয়ে যোগ করা হচ্ছে। M3-এ যেমন কনভোলিউশনকে "শিফট-অ্যান্ড-মাল্টিপ্লাই-অ্যান্ড-সাম" হিসেবে দেখেছিলেন, এখানেও তেমনি — শুধু যোগফলটা এখন z-এর একটি ফাংশন হয়ে যাচ্ছে।

ফিনিট-লেংথ সিগন্যাল = পলিনোমিয়াল
যদি x[n] শুধু n = 0, 1, ..., N-1-এর জন্য নন-জিরো হয়, তাহলে X(z) = x[0] + x[1]z^-1 + ... + x[N-1]z^-(N-1) — একটি সাধারণ পলিনোমিয়াল, যার কোয়েফিসিয়েন্টগুলোই সিগন্যালের নমুনা।
ডিলে = z^-1 দিয়ে গুণ
একটি নমুনা এক ধাপ পিছিয়ে দিলে (M3/L12-এর x[n-1]) তার Z-ট্রান্সফর্ম z^-1 দিয়ে গুণ হয়ে যায় — এই সরল বীজগণিতীয় সম্পর্কই Z-ট্রান্সফর্মকে ডিফারেন্স ইকুয়েশন সমাধানের (L19) মূল হাতিয়ার বানায়।
DTFT-এর সাধারণীকরণ
z = e^{jω} বসালে (অর্থাৎ ইউনিট সার্কেলের উপর দিয়ে হাঁটলে) Z-ট্রান্সফর্ম হয়ে যায় DTFT (M5/L20) — Z-ট্রান্সফর্ম গোটা কমপ্লেক্স প্লেনে সংজ্ঞায়িত বলে বেশি সাধারণ ও শক্তিশালী।

২ · একটি সত্যিকারের ডেমো — ফিনিট সিকোয়েন্সের Z-ট্রান্সফর্ম

ধরা যাক আমাদের একটি ছোট ফিনিট-লেংথ সিগন্যাল আছে: x = [1, 2, 3, 4] (অর্থাৎ x[0]=1, x[1]=2, x[2]=3, x[3]=4, বাকি সব n-এ শূন্য)। এর Z-ট্রান্সফর্ম হবে $X(z) = 1 + 2z^{-1} + 3z^{-2} + 4z^{-3}$ — কোয়েফিসিয়েন্টগুলো লক্ষ্য করুন, এগুলো ঠিক সিগন্যালের নমুনার মতোই। নিচের কোডে এটি Python-এ বাস্তবায়ন করে কয়েকটি নির্দিষ্ট কমপ্লেক্স z-মানে মান গণনা করা হয়েছে।

Python
x = [1, 2, 3, 4]  # x[0]=1, x[1]=2, x[2]=3, x[3]=4  (কজাল, ফিনিট-লেংথ)

def X(z, coeffs=x):
    total = 0j
    for n, c in enumerate(coeffs):
        total += c * z**(-n)
    return total

print("x[n] সিরিজ:", x)
print("X(z) = " + " + ".join(f"{c}z^-{n}" if n else f"{c}" for n, c in enumerate(x)))
print()

test_points = [2+0j, 1j, 1+1j]
for z in test_points:
    val = X(z)
    print(f"z = {z}  ->  X(z) = {val}   |X(z)| = {abs(val):.6f}")

print()
# z = 2+0j -এ টার্ম-বাই-টার্ম গণনা
z = 2+0j
print(f"z = {z} এ টার্ম-বাই-টার্ম:")
running = 0j
for n, c in enumerate(x):
    term = c * z**(-n)
    running += term
    print(f"  n={n}: {c} * z^-{n} = {c} * {z**(-n)} = {term}   (আংশিক যোগফল = {running})")

    
Run চেপে দেখুন — z=2+0j-এ X(2) = 3.25 (বাস্তব সংখ্যা, কারণ z বাস্তব), z=1j-এ X(1j) = -2+2j (|X(1j)| ≈ 2.828427), আর z=1+1j-এ X(1+1j) = 1-3.5j (|X(1+1j)| ≈ 3.640055)। টার্ম-বাই-টার্ম অংশে z=2-এ আংশিক যোগফল ধাপে ধাপে 1 → 2 → 2.75 → 3.25-এ পৌঁছায় — প্রতিটি ধাপ স্রেফ পলিনোমিয়ালের একটি নতুন পদ যোগ করছে।

৩ · কেন এটি এত গুরুত্বপূর্ণ

M3-এ আপনি শিখেছেন যে দুটো সিগন্যালের কনভোলিউশন (L10) একটি সিস্টেমের আউটপুট গণনা করে, এবং একটি ডিফারেন্স ইকুয়েশন (L12) সেই সিস্টেমকে বর্ণনা করে। Z-ট্রান্সফর্মের সবচেয়ে বড় শক্তি হলো — টাইম-ডোমেইনে কনভোলিউশন, Z-ডোমেইনে হয়ে যায় সাধারণ গুণ ($Y(z) = X(z) \cdot H(z)$, বিস্তারিত L15-এ)। এর মানে জটিল কনভোলিউশন সাম না করে, শুধু দুটো পলিনোমিয়াল/ফাংশন গুণ করলেই আউটপুটের Z-ট্রান্সফর্ম পাওয়া যায় — এই বীজগণিতীয় সরলীকরণই L18-L19-এ ট্রান্সফার ফাংশন ও ডিফারেন্স ইকুয়েশন সমাধানকে সহজ করে তোলে।

মূল কথা · Key takeaway

Z-ট্রান্সফর্ম একটি সিগন্যালকে "সময়ের ক্রম" থেকে "z^-1-এর পলিনোমিয়াল কোয়েফিসিয়েন্ট"-এ রূপান্তর করে — এই দৃষ্টিভঙ্গি বদলটাই DSP-র সবচেয়ে শক্তিশালী গাণিতিক টুল তৈরি করে। পরবর্তী পাঠগুলোতে (L15-L19) আমরা এর বৈশিষ্ট্য, কনভারজেন্সের অঞ্চল, ইনভার্স, ট্রান্সফার ফাংশন ও ডিফারেন্স ইকুয়েশন সমাধানে এর প্রয়োগ দেখব।

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

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

প্র ০১ ফিনিট-লেংথ সিগন্যালের Z-ট্রান্সফর্মের কোয়েফিসিয়েন্টগুলো কেন সরাসরি সিগন্যালের নমুনার সমান?

কারণ সংজ্ঞা অনুযায়ী $X(z) = \sum x[n] z^{-n}$ — এটি $z^{-n}$-এর একটি ওয়েটেড যোগফল, যেখানে ওজনগুলোই x[n]। একটি সাধারণ পলিনোমিয়াল $a_0 + a_1 t + a_2 t^2$-এর সাথে তুলনা করলে $t = z^{-1}$ বসালে ঠিক এই একই রূপ পাওয়া যায়, আর কোয়েফিসিয়েন্ট $a_n$ গুলোই আসলে $x[n]$।

প্র ০২ উপরের ডেমোতে z=2+0j একটি বাস্তব সংখ্যা হলেও X(2)-এর ফলাফল 3.25+0j — একটি কমপ্লেক্স নাম্বার হিসেবে প্রিন্ট হলো কেন?

কারণ কোডে total = 0j দিয়ে শুরু করা হয়েছে — Python-এ একবার কোনো ভেরিয়েবল complex টাইপ হয়ে গেলে, তার সাথে যোগ/গুণ হওয়া সব ফলাফলও complex থাকে, এমনকি কাল্পনিক অংশ শূন্য হলেও। এটি ইচ্ছাকৃত — কারণ Z-ট্রান্সফর্ম সাধারণভাবে কমপ্লেক্স-মূল্যবান, তাই কোডে সবসময় complex ব্যবহার করাই নিরাপদ অভ্যাস।

প্র ০৩ যদি সিগন্যালটি অসীম-লেংথ হতো (যেমন x[n] = 0.5^n, সব n≥0-এর জন্য), তাহলে কি উপরের কোডের পদ্ধতিতে সরাসরি Z-ট্রান্সফর্ম গণনা করা যেত?

না, সরাসরি নয় — কারণ লুপটি ফিনিট বার চলে। অসীম-লেংথ সিগন্যালের জন্য Z-ট্রান্সফর্ম একটি অসীম সিরিজ, যা শুধুমাত্র নির্দিষ্ট z-মানে কনভার্জ (সীমিত মানে পৌঁছায়) করে — কোথায় কনভার্জ করে তা-ই "কনভারজেন্সের অঞ্চল" বা ROC, যা L16-এ বিস্তারিত আলোচনা করা হবে। তবে ট্রাংকেটেড (কেটে নেওয়া, ফিনিট পদ পর্যন্ত) যোগফল দিয়ে আনুমানিক মান বের করা সম্ভব, যেমনটা L17-এ দেখানো হবে।

অনুশীলন

  1. চিন্তা করুন: যদি সিগন্যাল x = [1, 2, 3, 4]-এর বদলে x = [4, 3, 2, 1] হতো (ক্রমটা উল্টে দিলে), তাহলে z = 2+0j-এ X(2)-এর মান কত হবে বলে আপনার ধারণা? হাতে হিসেব করার চেষ্টা করুন।

    $X(2) = 4 + 3(2)^{-1} + 2(2)^{-2} + 1(2)^{-3} = 4 + 1.5 + 0.5 + 0.125 = 6.125$। লক্ষ্য করুন এটি মূল ক্রমের X(2)=3.25-এর চেয়ে ভিন্ন — কারণ প্রতিটি কোয়েফিসিয়েন্ট এখন ভিন্ন ওজন (z^-n) পাচ্ছে।

  2. পরীক্ষা করুন: উপরের কোড সেলে x = [1, 2, 3, 4]-কে x = [4, 3, 2, 1]-এ পরিবর্তন করে Run চেপে আপনার হিসেব যাচাই করুন।

    রান করলে সত্যিই X(2) = 6.125+0j দেখাবে — আপনার হাতের হিসেবের সাথে মিলে যায়। এটি দেখায় Z-ট্রান্সফর্ম শুধু "কোন নমুনাগুলো আছে" তার উপর নির্ভর করে না, বরং কোন নমুনা কোন সময়ে (কোন কোয়েফিসিয়েন্টে) আছে তার উপরেও নির্ভর করে।

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

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ স্যাম্পলিং, কনভোলিউশন, Z-ট্রান্সফর্ম, DTFT/DFT, FFT, FIR/IIR ফিল্টার ডিজাইন, মাল্টিরেট প্রসেসিং, স্পেকট্রাল এস্টিমেশন, র‍্যান্ডম সিগন্যাল প্রসেসিং, বাস্তব প্রয়োগ ও ক্যাপস্টোন।
  • Math for AI & ML কোর্স সহোদর কোর্স কমপ্লেক্স সংখ্যা ও ট্রিগোনোমেট্রির ভিত্তি — এই পাঠে ব্যবহৃত complex/cmath গণিতের পটভূমি বুঝতে সহায়ক।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, Machine Learning, Deep Learning, System Design, Cybersecurity, Cloud Computing & DevOps, এবং আরও অনেক কোর্স — সব এক জায়গায়।
আগের পাঠ
কজালিটি, স্ট্যাবিলিটি ও BIBO স্ট্যাবিলিটি