ADC রেজোলিউশন এবং LSB ক্যালকুলেটর
অ্যানালগ-টু-ডিজিটাল কনভার্টার (ADC) হলো অ্যানালগ সিগন্যাল প্রসেসিং এবং ডিজিটাল সিস্টেমের মধ্যকার সেতু। একটি ADC-এর কার্যক্ষমতা মূলত তার রেজোলিউশন এবং রেফারেন্স ভোল্টেজের উপর নির্ভর করে। এই ক্যালকুলেটরটি একটি আদর্শ কনভার্টারের Least Significant Bit (LSB) ধাপের আকার, কোয়ান্টাইজেশন ত্রুটি এবং তাত্ত্বিক সিগন্যাল-টু-নয়েজ রেশিও (SNR) হিসাব করতে সাহায্য করে। ব্যবহারকারীরা ইউনিপোলার এবং বাইপোলার উভয় ধরনের ইনপুট রেঞ্জ মূল্যায়ন করতে পারেন, ইনপুট ভোল্টেজ এবং ডিজিটাল কোডের মধ্যে পারস্পরিক রূপান্তর করতে পারেন এবং একটি নির্দিষ্ট ভোল্টেজ পরিবর্তন সনাক্ত করতে কত বিট রেজোলিউশন প্রয়োজন তা নির্ধারণ করতে পারেন।
এই টুলের মাধ্যমে করা প্রতিটি হিসাবের গাণিতিক প্রতিস্থাপন নিচে বিস্তারিতভাবে দেখানো হয়, যা তাত্ত্বিক সীমা এবং সূত্রগুলো যাচাই করতে সাহায্য করে। আপনার দেওয়া প্রতিটি সংখ্যা এই ব্রাউজারেই থাকে — কোনো কিছুই আপলোড করা হয় না। সমস্ত হিসাব সম্পূর্ণ স্থানীয়ভাবে আপনার ডিভাইসে সম্পন্ন হয়।
ইনপুট এবং কনফিগারেশন
ক্যালকুলেটরটি সঠিকভাবে ব্যবহার করার জন্য নিম্নলিখিত ইনপুটগুলো প্রদান করতে হবে:
- রেজোলিউশন N (বিট): ১ থেকে ৩২ পর্যন্ত একটি পূর্ণসংখ্যা — কনভার্টারের নামমাত্র বিট প্রস্থ।
- রেফারেন্স ভোল্টেজ: একটি পজিটিভ সংখ্যা যা কনভার্টারের রেফারেন্স ভোল্টেজ নির্দেশ করে।
- রেফারেন্স ইউনিট: রেফারেন্স ভোল্টেজের পরিমাপের একক (যেমন V, mV, µV)।
- ইনপুট রেঞ্জ: "ইউনিপোলার · ০ থেকে Vref" অথবা "বাইপোলার · −Vref থেকে +Vref" এর মধ্যে একটি নির্বাচন।
- প্রদর্শিত দশমিক স্থান: ফলাফলে দশমিকের পর কত ঘর পর্যন্ত দেখতে চান তা নির্ধারণের সংখ্যা।
- রূপান্তর করুন (ঐচ্ছিক পরিমাপ বিন্দু): "ভোল্টেজ → কোড" অথবা "কোড → ভোল্টেজ" মোড নির্বাচনের টগল।
- ইনপুট ভোল্টেজ (ঐচ্ছিক): ডিজিটাল কোডে রূপান্তর করার জন্য কাঙ্ক্ষিত ভোল্টেজ মান। পরিমাপ এড়াতে এটি খালি রাখা যেতে পারে।
- কোড (কাউন্ট) (ঐচ্ছিক): ০ থেকে সর্বোচ্চ কোডের মধ্যে একটি পূর্ণসংখ্যা যা ভোল্টেজে রূপান্তর করা হবে। এটিও খালি রাখা সম্ভব।
- ভোল্টেজ ইউনিট: ইনপুট ভোল্টেজ বা কোড ভোল্টেজের পরিমাপের একক।
- সমাধান করার জন্য ক্ষুদ্রতম পরিবর্তন (ঐচ্ছিক): একটি নির্দিষ্ট টার্গেট ভোল্টেজ ধাপ যা সমাধান করতে প্রয়োজনীয় ন্যূনতম বিট রেজোলিউশন নির্ধারণে ব্যবহৃত হয়।
- ধাপের ইউনিট: ক্ষুদ্রতম পরিবর্তন পরিমাপের একক।
ইন্টারফেসে থাকা "উদাহরণ লোড করুন" বাটনে ক্লিক করে দ্রুত নমুনা মান লোড করা যায় এবং "মুছে ফেলুন" বাটনের সাহায্যে সমস্ত ইনপুট রিসেট করা যায়।
আউটপুট এবং ফলাফলের ব্যাখ্যা
ক্যালকুলেটরটি হিসাব সম্পন্ন করার পর নিম্নলিখিত আউটপুটগুলো প্রদর্শন করে:
ধাপের আকার এবং নয়েজ
- LSB ধাপের আকার: এটি হলো Least Significant Bit-এর ভোল্টেজ মান। এর সাব-লেবেলে এই ধাপটিকে ফুল স্কেলের শতকরা (%) এবং ppm (parts per million) হিসেবে দেখানো হয়।
- কোয়ান্টাইজেশন লেভেল: কনভার্টারের মোট পৃথক স্তরের সংখ্যা (2^N)।
- সর্বোচ্চ কোড: কনভার্টারের সর্বোচ্চ ডিজিটাল আউটপুট কোড (2^N - 1)।
- ফুল-স্কেল রেঞ্জ: কনভার্টারের মোট ভোল্টেজ স্প্যান (FSR)।
- সর্বোচ্চ কোয়ান্টাইজেশন ত্রুটি (±½ LSB): তাত্ত্বিক সর্বোচ্চ কোয়ান্টাইজেশন ত্রুটি।
- কোয়ান্টাইজেশন নয়েজ (rms): রুট-মিন-স্কয়ার কোয়ান্টাইজেশন নয়েজ ভোল্টেজ।
- আদর্শ SNR (ফুল-স্কেল সাইন): ডেসিবেল (dB) এককে তাত্ত্বিক সিগন্যাল-টু-নয়েজ রেশিওর সর্বোচ্চ সীমা।
- ডাইনামিক রেঞ্জ: ডেসিবেল এককে তাত্ত্বিক ডাইনামিক রেঞ্জ।
পরিমাপ বিন্দুতে
- আউটপুট কোড: ভোল্টেজ-টু-কোড রূপান্তরের ফলে প্রাপ্ত ডিজিটাল কোড।
- বাইনারি: আউটপুট কোডের বাইনারি উপস্থাপনা।
- হেক্সাডেসিমেল: আউটপুট কোডের হেক্সাডেসিমেল উপস্থাপনা।
- কোড ভোল্টেজ: একটি নির্দিষ্ট ডিজিটাল কোডের সাথে সম্পর্কিত সুনির্দিষ্ট ভোল্টেজ।
- কোয়ান্টাইজেশন ত্রুটি: প্রকৃত ইনপুট ভোল্টেজ এবং প্রাপ্ত কোড দ্বারা উপস্থাপিত ভোল্টেজের মধ্যকার পার্থক্য।
- এই কোডের জন্য ইনপুট উইন্ডো: ইনপুট ভোল্টেজের সেই পরিসীমা যা এই নির্দিষ্ট ডিজিটাল কোডে ম্যাপ করে।
সাইজিং স্ট্যাটাস
যখন সমাধান করার জন্য একটি ক্ষুদ্রতম পরিবর্তন ইনপুট দেওয়া হয়, তখন টুলটি জানায় যে এই ধাপটি সমাধান করতে কত বিট প্রয়োজন এবং বর্তমানে নির্বাচিত বিট প্রস্থ তা কভার করতে পারছে কিনা। যদি না পারে, তবে বর্তমান কনভার্টারটি আসলে কতটুকু ধাপ সমাধান করতে সক্ষম তা উল্লেখ করা হয়।
গাণিতিক সূত্র এবং মান প্রতিস্থাপন
টুলটি প্রতিটি হিসাবের জন্য প্রতীকী সূত্র এবং ব্যবহারকারীর দেওয়া মান প্রতিস্থাপনের মাধ্যমে সম্পূর্ণ সমাধান প্রদর্শন করে:
- LSB ধাপের আকার: LSB = FSR ÷ 2^N
- সর্বোচ্চ কোয়ান্টাইজেশন ত্রুটি: ±LSB ÷ 2
- কোয়ান্টাইজেশন নয়েজ (rms): LSB ÷ √12
- আদর্শ SNR (ফুল-স্কেল সাইন): SNR = 6.02 × N + 1.76 dB
- ডাইনামিক রেঞ্জ: 6.02 × N dB
- ইউনিপোলার কোড: code = round(Vin ÷ LSB)
- বাইপোলার কোড: code = round((Vin + Vref) ÷ LSB)
- ইউনিপোলার ভোল্টেজ: V = code × LSB
- বাইপোলার ভোল্টেজ: V = code × LSB − Vref
- পরিমাপ বিন্দুতে কোয়ান্টাইজেশন ত্রুটি: code voltage − input voltage
- রেজোলিউশন সাইজিং: N ≥ log₂(FSR ÷ step), যা পরবর্তী পূর্ণসংখ্যায় রাউন্ড আপ করা হয়।
উদাহরণ হিসাব (১২-বিট কনভার্টার)
"উদাহরণ লোড করুন" বাটনের মানগুলো ব্যবহার করে হিসাবের একটি নমুনা নিচে দেওয়া হলো:
- ইনপুট: ১২ বিট রেজোলিউশন, ৩.৩ V রেফারেন্স, ইউনিপোলার রেঞ্জ।
- ফলাফল:
- কোয়ান্টাইজেশন লেভেল = 2¹² = 4,096
- সর্বোচ্চ কোড = 4,095
- LSB = 3.3 V ÷ 4,096 ≈ 805.6641 µV
- সর্বোচ্চ কোয়ান্টাইজেশন ত্রুটি = ±402.832 µV
- কোয়ান্টাইজেশন নয়েজ ≈ 232.5752 µV rms
- আদর্শ SNR ≈ 74.01 dB
- ডাইনামিক রেঞ্জ ≈ 72.25 dB
- যদি ১.৬৫ V ইনপুট দেওয়া হয় (যা ঠিক মিড-স্কেল), তবে এটি কোড ২,০৪৮ (বাইনারি
1000 0000 0000, হেক্সাডেসিমেল0x800) এ ম্যাপ হবে এবং কোয়ান্টাইজেশন ত্রুটি হবে ০।
নিয়ম এবং বিশেষ পরিস্থিতি (Edge Cases)
- কোয়ান্টাইজেশন মডেল: এই টুলটি একটি আদর্শ কোয়ান্টাইজার মডেল অনুসরণ করে যেখানে প্রথম কোড ট্রানজিশনটি অর্ধেক ধাপে (1 / 2 LSB) ঘটে এবং LSB-কে FSR ÷ 2^N হিসেবে সংজ্ঞায়িত করা হয়।
- সীমাবদ্ধতা: এখানে প্রদর্শিত প্রতিটি হিসাব একটি আদর্শ কনভার্টারের জন্য প্রযোজ্য। একটি বাস্তব ADC-তে অফসেট, গেইন, INL/DNL এবং রেফারেন্স ত্রুটি থাকে। তাই আদর্শ SNR, ডাইনামিক রেঞ্জ এবং ±½ LSB সীমা হলো তাত্ত্বিক সর্বোচ্চ মান, বাস্তব পরিমাপ নয়। কনভার্টারের রেজোলিউশন (বিট সংখ্যা) এবং এর নির্ভুলতা (accuracy) দুটি ভিন্ন বিষয়।
- ইউনিপোলার রেঞ্জ: ফুল-স্কেল রেঞ্জ (FSR) হলো Vᵣef। ইনপুট পরিসীমা 0 থেকে Vᵣef পর্যন্ত বিস্তৃত।
- বাইপোলার রেঞ্জ: ফুল-স্কেল রেঞ্জ (FSR) হলো 2 × Vᵣef। ইনপুট পরিসীমা -Vᵣef থেকে +Vᵣef পর্যন্ত বিস্তৃত। কোড 0 ম্যাপ করে -Vᵣef এ, মিড-স্কেল কোড 2^(N-1) ম্যাপ করে 0 V এ, এবং সর্বোচ্চ কোডটি +Vᵣef এর এক ধাপ নিচে থাকে।
- হাই রেল ক্লিপিং: ইনপুট ভোল্টেজ যদি হাই রেলের উপরে থাকে, তবে আউটপুট সর্বোচ্চ কোডে (2^N - 1) স্যাচুরেট হয়। এই ক্ষেত্রে টুলটি সতর্কবার্তা দেখায়: "ইনপুটটি হাই রেলের উপরে রয়েছে: আউটপুট সর্বোচ্চ কোডে স্যাচুরেট হয় এবং প্রদর্শিত ত্রুটিটি হলো প্রকৃত অবশিষ্ট ত্রুটি — ±½ LSB সীমাটি আর প্রযোজ্য নয়।"
- লো রেল ক্লিপিং: ইনপুট ভোল্টেজ যদি লো রেলের নিচে থাকে, তবে আউটপুট কোড 0-তে স্যাচুরেট হয়। এই ক্ষেত্রে সতর্কবার্তা প্রদর্শিত হয়: "ইনপুটটি লো রেলের নিচে রয়েছে: আউটপুট কোড ০-এ স্যাচুরেট হয় এবং প্রদর্শিত ত্রুটিটি হলো প্রকৃত অবশিষ্ট ত্রুটি — ±½ LSB সীমাটি আর প্রযোজ্য নয়।"
- মিড-স্কেল ইনপুট: ইনপুট ভোল্টেজ ঠিক মিড-স্কেলে থাকলে টুলটি উল্লেখ করে যে স্প্যানের অর্ধেক অংশ শূন্য কোয়ান্টাইজেশন ত্রুটি সহ মিড-স্কেল কোডে ম্যাপ করে।
ত্রুটি বার্তা (Error Messages)
ভুল ইনপুট এড়াতে ক্যালকুলেটরটি নিম্নলিখিত ত্রুটি বার্তাগুলো প্রদর্শন করে:
- অ-সংখ্যাসূচক ইনপুটের ক্ষেত্রে:
"‹field›: “‹token›” কোনো সংখ্যা নয়।" - রেজোলিউশন সীমার বাইরে হলে:
"রেজোলিউশন অবশ্যই 1 থেকে 32 এর মধ্যে একটি পূর্ণসংখ্যা বিট হতে হবে।" - রেফারেন্স ভোল্টেজ শূন্য বা নেগেটিভ হলে:
"রেফারেন্স ভোল্টেজ অবশ্যই শূন্যের চেয়ে বেশি হতে হবে।" - কোড পূর্ণসংখ্যা না হলে:
"কোড অবশ্যই একটি পূর্ণসংখ্যা কাউন্ট হতে হবে।" - কোড সীমার বাইরে হলে:
"একটি ‹bits›-বিট কনভার্টারের জন্য কোড অবশ্যই ০ থেকে ‹max›-এর মধ্যে হতে হবে।" - টার্গেট ধাপ শূন্য বা নেগেটিভ হলে:
"সমাধান করার জন্য ক্ষুদ্রতম পরিবর্তনটি অবশ্যই শূন্যের চেয়ে বেশি হতে হবে।" - গাণিতিক সীমা অতিক্রম করলে:
"একটি মান বা মধ্যবর্তী ফলাফল সমর্থিত সংখ্যার সীমা অতিক্রম করেছে।"
প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
১২-বিট রেজোলিউশন মানেই কি ১২-বিট নির্ভুলতা?
না। রেজোলিউশন হলো কেবল কোডের প্রস্থ — অর্থাৎ রেঞ্জটিকে কত সূক্ষ্মভাবে ভাগ করা হয়েছে। নির্ভুলতা কনভার্টারের INL এবং অফসেট/গেইন ত্রুটি, রেফারেন্সের টলারেন্স ও নয়েজ এবং এর চারপাশের সার্কিট দ্বারা সীমাবদ্ধ থাকে। এই কারণেই ডেটাশিটে ENOB উল্লেখ করা হয়: একটি ১২-বিট SAR সাধারণত ১০–১১ কার্যকরী বিট প্রদান করে। এখানে প্রদর্শিত ৭৪ dB আদর্শ SNR হলো একটি তাত্ত্বিক সর্বোচ্চ সীমা যা কোনো বাস্তব ১২-বিট কনভার্টার স্পর্শ করতে পারে না।
একটি ±Vref ইনপুট কীভাবে হিসাব পরিবর্তন করে?
এতে স্প্যান দ্বিগুণ হয়ে ২ × Vref হয়, তাই একই কনভার্টার দ্বিগুণ চওড়া ধাপ সমাধান করে: LSB = ২ × Vref ÷ 2^N। কোডগুলো নেগেটিভ রেল থেকে পজিটিভ রেল পর্যন্ত চলে — কোড ০ হলো −Vref, মধ্যবর্তী কোড 2^(N−1) হলো ০ V, এবং সর্বোচ্চ কোডটি +Vref-এর এক ধাপ নিচে থাকে। উপরে বাইপোলার রেঞ্জ নির্বাচন করলে শূন্য ভোল্ট ঠিক মধ্যবর্তী কোডে পড়বে।
কেন কিছু সোর্সে 2^N দিয়ে এবং অন্যগুলোতে 2^N − 1 দিয়ে ভাগ করা হয়?
এগুলো একই কনভার্টারের দুটি ভিন্ন মডেল। ডেটাশিট এবং ক্লাসিক কোয়ান্টাইজেশন তত্ত্ব অনুযায়ী LSB = FSR ÷ 2^N সংজ্ঞায়িত করা হয়, যেখানে প্রথম কোড ট্রানজিশনটি অর্ধেক ধাপে ঘটে — এই পেজে সেই মডেলটিই ব্যবহার করা হয়েছে। অন্যদিকে Vref ÷ (2^N − 1) রূপটি সর্বোচ্চ কোডটিকে ঠিক Vref-এর সাথে মেলানোর মাধ্যমে আসে, যা মাইক্রোকন্ট্রোলার টিউটোরিয়ালে সাধারণ। ১২ বিটে এই দুটির মধ্যে পার্থক্য প্রায় ০.০২%, যা যেকোনো বাস্তব রেফারেন্সের টলারেন্সের চেয়ে অনেক কম; বিভিন্ন সোর্স থেকে সংখ্যা যাচাই করার সময় কেবল এই দুটি মডেলকে গুলিয়ে ফেলবেন না।
ধাপের আকার খুব বেশি বড় হলে আমি কী করতে পারি?
যখন সিগন্যালে সামান্য নয়েজ থাকে, তখন ওভারস্যাম্পলিং এবং অ্যাভারেজিং রেজোলিউশন বাড়াতে সাহায্য করে: ৪× বেশি স্যাম্পল অ্যাভারেজ করলে প্রায় ১টি কার্যকরী বিট পাওয়া যায়, এবং ১৬× করলে ২টি পাওয়া যায়, যদি নয়েজটি হোয়াইট এবং আনকোরিলেটেড হয় — একটি সম্পূর্ণ পরিষ্কার ও স্থির সিগন্যাল কেবল একই কোডের পুনরাবৃত্তি করে। এর বাইরে যেতে হলে আরও বেশি বিটের কনভার্টার ব্যবহার করুন অথবা একটি প্রোগ্রামেবল-গেইন স্টেজ যোগ করুন যাতে সিগন্যালটি রেঞ্জের আরও বেশি অংশ জুড়ে থাকে।