পাঠ ২০ · ৫৭-এর মধ্যে · মডিউল ৫
Home / Courses / Digital Signal Processing / ফ্রিকোয়েন্সি-ডোমেইন অ্যানালাইসিস

ডিসক্রিট-টাইম ফুরিয়ার ট্রান্সফর্ম (DTFT)

The discrete-time Fourier transform (DTFT)
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

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

  • DTFT-এর সংজ্ঞা এবং কীভাবে এটি Z-ট্রান্সফর্মের একটি বিশেষ রূপ
  • DTFT-এর সরাসরি সামেশন সূত্র ও তা কেন পর্যায়বৃত্ত (periodic in $\omega$)
  • Python-এ cmath দিয়ে DTFT সরাসরি গণনা করা — ম্যাগনিটিউড ও ফেজ স্পেকট্রাম
  • কেন DTFT কম্পিউটারে সরাসরি প্রয়োগযোগ্য নয়, আর DFT কেন দরকার হবে

১ · DTFT-এর সংজ্ঞা

একটি ডিসক্রিট সিগন্যাল $x[n]$-এর DTFTDiscrete-Time Fourier Transformএকটি ডিসক্রিট সিগন্যালকে একটি কন্টিনিউয়াস, পর্যায়বৃত্ত ফ্রিকোয়েন্সি ফাংশনে রূপান্তরকারী সামেশন সূত্র। সংজ্ঞায়িত হয়:

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

এটি ঠিক M১৪-এর Z-ট্রান্সফর্ম সূত্র $X(z) = \sum_n x[n] z^{-n}$-এরই একটি বিশেষ ক্ষেত্র, যেখানে $z = e^{j\omega}$ — অর্থাৎ কমপ্লেক্স $z$-প্লেনের ইউনিট সার্কেলের উপর মূল্যায়িত। ফলাফল $X(e^{j\omega})$ একটি কমপ্লেক্স সংখ্যা, যার ম্যাগনিটিউড $|X(e^{j\omega})|$ বলে দেয় সেই $\omega$ ফ্রিকোয়েন্সিতে সিগন্যালে কতটা "শক্তি" আছে, আর ফেজ $\angle X(e^{j\omega})$ বলে দেয় সেই ফ্রিকোয়েন্সি-কম্পোনেন্টের টাইম-শিফট।

পর্যায়বৃত্ত সূত্র
$e^{-j\omega n}$ পদটি $\omega$-তে $2\pi$ পিরিয়ডে পর্যায়বৃত্ত, তাই $X(e^{j(\omega+2\pi)}) = X(e^{j\omega})$ — DTFT সবসময় $2\pi$-পর্যায়বৃত্ত, তাই শুধু $\omega \in [0, 2\pi)$ বা $[-\pi, \pi)$ রেঞ্জ যথেষ্ট।
Z-ট্রান্সফর্মের সাথে সম্পর্ক
M১৪-M১৯-এ শেখা পোল-জিরো, ROC, স্টেবিলিটি — সবকিছু DTFT-তেও প্রযোজ্য, শুধু $z$-কে ইউনিট সার্কেলে বেঁধে দেওয়া হয়েছে।
কম্পিউটারে সীমাবদ্ধতা
সূত্রে $\omega$ একটি কন্টিনিউয়াস চলক এবং যোগফল অসীম পরিসরে — তাই কম্পিউটার শুধু নির্দিষ্ট কিছু $\omega$-স্যাম্পলে এবং সসীম-দৈর্ঘ্যের সিগন্যালে DTFT আনুমানিক/সরাসরি গণনা করতে পারে।

২ · সরাসরি গণনা — একটি সত্যিকারের Python ডেমো

একটি সসীম-দৈর্ঘ্যের সিগন্যালের জন্য ($n < 0$ বা $n \geq N$-এ $x[n]=0$ ধরলে) সামেশনটি সসীম হয়ে যায়, তাই নির্দিষ্ট কিছু $\omega$ মানে সরাসরি গণনা করা সম্ভব। নিচের কোডে একটি ৪-স্যাম্পলের টেস্ট সিগন্যাল $x = [1.0,\ 0.5,\ -0.5,\ 0.25]$-এর DTFT পাঁচটি $\omega$ মানে ($0$ থেকে $\pi$ পর্যন্ত) সরাসরি সূত্র দিয়ে গণনা করা হয়েছে — কোনো NumPy/SciPy নেই, শুধু Python-এর বিল্ট-ইন complex ও cmath।

Python
import cmath, math

x = [1.0, 0.5, -0.5, 0.25]  # ছোট টেস্ট সিগন্যাল, N=4

def dtft(x, omega):
    # সরাসরি সামেশন সূত্র: X(e^jw) = sum x[n] * e^(-j*w*n)
    return sum(x[n] * cmath.exp(-1j * omega * n) for n in range(len(x)))

freqs = [0, math.pi/4, math.pi/2, 3*math.pi/4, math.pi]

print(f"{'omega (rad)':>12} | {'Re':>9} | {'Im':>9} | {'|X(e^jw)|':>10} | {'phase(rad)':>11}")
for w in freqs:
    X = dtft(x, w)
    mag = abs(X)
    phase = cmath.phase(X)
    print(f"{w:12.4f} | {X.real:9.4f} | {X.imag:9.4f} | {mag:10.4f} | {phase:11.4f}")

    
রান করলে $\omega=0$-এ $X(e^{j0}) = 1.2500 + 0.0000j$ — লক্ষ্য করুন এটি ঠিক $\sum_n x[n] = 1.0+0.5-0.5+0.25 = 1.25$-এর সমান, কারণ $\omega=0$-এ $e^{-j0 \cdot n}=1$ সবসময়। $\omega=\pi/2$ ($90°$)-এ ম্যাগনিটিউড সবচেয়ে বেশি — $1.5207$ — অর্থাৎ এই সিগন্যালে সবচেয়ে বেশি "শক্তি" এই মধ্য-ফ্রিকোয়েন্সির কাছাকাছি। $\omega=\pi$ ($180°$, সর্বোচ্চ ডিসক্রিট ফ্রিকোয়েন্সি, নাইকুইস্ট সীমা)-এ ফলাফল বিশুদ্ধ বাস্তব সংখ্যা $-0.2500$ — এটি কাকতালীয় নয়: $e^{-j\pi n} = (-1)^n$ সবসময় বাস্তব, তাই $X(e^{j\pi})$ সবসময় বাস্তব-মূল্যবান সিগন্যালের জন্য বাস্তব সংখ্যা হয়।
মূল কথা · Key takeaway

DTFT হলো ফ্রিকোয়েন্সি-ডোমেইন অ্যানালাইসিসের তাত্ত্বিক ভিত্তি — সসীম-দৈর্ঘ্যের সিগন্যালের জন্য যেকোনো নির্দিষ্ট $\omega$-তে সরাসরি গণনাযোগ্য, যেমন উপরে দেখানো হলো। কিন্তু বাস্তব ব্যবহারে আমরা সবসময় একটি নির্দিষ্টসংখ্যক, সমান-ব্যবধানের ফ্রিকোয়েন্সিতে ফলাফল চাই — এটাই পরবর্তী পাঠে (L২২) DFT-এর জন্ম দেয়, যেখানে $\omega$-কে $N$টি সমান-ব্যবধানের মানে স্যাম্পল করা হয়।

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

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

প্র ০১ DTFT কেন সবসময় $\omega$-তে $2\pi$-পর্যায়বৃত্ত? উপরের কোডে $\omega=\pi/4$ আর $\omega=\pi/4+2\pi$-এ একই ফলাফল আসবে কি?

হ্যাঁ, একই ফলাফল আসবে। কারণ $e^{-j(\omega+2\pi)n} = e^{-j\omega n} \cdot e^{-j2\pi n}$, আর $n$ সবসময় পূর্ণসংখ্যা বলে $e^{-j2\pi n} = 1$ (ইউলারের সূত্র অনুযায়ী $\cos(2\pi n) + j\sin(2\pi n) = 1 + 0j$ পূর্ণসংখ্যা $n$-এর জন্য)। তাই সামেশনের প্রতিটি পদ অপরিবর্তিত থাকে, ফলে $X(e^{j(\omega+2\pi)}) = X(e^{j\omega})$ — এটাই ডিসক্রিট-টাইম সিগন্যালের ফ্রিকোয়েন্সি-ডোমেইন সবসময় $2\pi$-পর্যায়বৃত্ত হওয়ার কারণ (M৬-এ প্রমাণিত)।

প্র ০২ DTFT আর M১৪-M১৯-এর Z-ট্রান্সফর্মের মধ্যে সম্পর্ক ঠিক কী? এক থেকে অন্যটি কীভাবে পাওয়া যায়?

DTFT হলো Z-ট্রান্সফর্মকে ইউনিট সার্কেলের ($|z|=1$, অর্থাৎ $z=e^{j\omega}$) উপর মূল্যায়ন করা একটি বিশেষ ক্ষেত্র। এর মানে হলো, যদি একটি সিগন্যালের ROC (M১৬) ইউনিট সার্কেল অন্তর্ভুক্ত করে, তাহলে সেই সিগন্যালের DTFT অস্তিত্বশীল এবং Z-ট্রান্সফর্মে সরাসরি $z=e^{j\omega}$ বসিয়ে পাওয়া যায় — এটাই L২১-এ LTI সিস্টেমের ফ্রিকোয়েন্সি রেসপন্স বের করার মূল পদ্ধতি।

প্র ০৩ কম্পিউটারে DTFT সরাসরি প্রয়োগ করা যায় না কেন — উপরের কোডে আমরা কী "কৌশল" ব্যবহার করেছি এটি এড়াতে?

সূত্রে দুটি সমস্যা: (১) সামেশন সাধারণভাবে $-\infty$ থেকে $\infty$ পর্যন্ত, যা কম্পিউটার গণনা করতে পারে না, এবং (২) $\omega$ একটি কন্টিনিউয়াস চলক — অসীম সংখ্যক মান আছে। উপরের কোডে আমরা প্রথম সমস্যা এড়িয়েছি সসীম-দৈর্ঘ্যের ($N=4$) সিগন্যাল ব্যবহার করে (সীমার বাইরে $x[n]=0$ ধরে নিয়ে), আর দ্বিতীয় সমস্যাটি এড়িয়েছি শুধু নির্দিষ্ট কয়েকটি $\omega$ মানে গণনা করে। DFT (L২২) এই দ্বিতীয় সমাধানটিকেই একটি নির্দিষ্ট, সিস্টেমেটিক নিয়মে পরিণত করে — ঠিক $N$টি সমান-ব্যবধানের $\omega$ মানে।

অনুশীলন

  1. চিন্তা করুন: উপরের সিগন্যাল $x = [1.0, 0.5, -0.5, 0.25]$-এর জন্য $\omega=0$-এ $X(e^{j0})$-এর মান কত হবে বলে আপনার ধারণা, সূত্র $X(e^{j0}) = \sum_n x[n] \cdot 1$ ব্যবহার করে হাতে হিসেব করুন?

    $\omega=0$-এ $e^{-j0 \cdot n} = 1$ সব $n$-এর জন্য, তাই $X(e^{j0}) = 1.0 + 0.5 + (-0.5) + 0.25 = 1.25$। কোড রান করলে ঠিক এটাই দেখাবে: $\text{Re}=1.2500$, $\text{Im}=0.0000$।

  2. পরীক্ষা করুন: উপরের কোডে সিগন্যাল $x$-কে $[1.0, -1.0, 1.0, -1.0]$-এ বদলে (একটি দ্রুত-দোদুল্যমান সিগন্যাল) Run চাপুন। $\omega=\pi$-তে ম্যাগনিটিউড কি বাড়বে না কমবে বলে মনে হয়, আর কেন?

    রান করলে $\omega=\pi$-তে $X(e^{j\pi}) = 4.0000 + 0.0000j$ দেখাবে — সর্বোচ্চ সম্ভাব্য ম্যাগনিটিউড এই ৪-স্যাম্পল সিগন্যালের জন্য। কারণ $e^{-j\pi n} = (-1)^n$, আর সিগন্যাল $[1,-1,1,-1]$-ও ঠিক $(-1)^n$ প্যাটার্নে দোদুল্যমান — তাই প্রতিটি পদ $x[n] \cdot (-1)^n = 1$ হয়ে যায় এবং সবগুলো পদ গঠনমূলকভাবে (constructively) যোগ হয়ে $4$ দেয়। এটি দেখায়: একটি সিগন্যাল যে ফ্রিকোয়েন্সিতে সবচেয়ে বেশি "মিলে যায়" (correlate করে), সেখানেই DTFT-এর ম্যাগনিটিউড সর্বোচ্চ হয়।

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

আগের পাঠ
Z-ট্রান্সফর্ম দিয়ে ডিফারেন্স ইকুয়েশন সমাধান