مقدمه
در بخش اول این سری آموزشی در مورد نحوه نمایش و تفسیر اعداد اعشاری ممیز ثابت توضیحات کاملی بیان کردیم. در بخش دوم قصد داریم برخی از مهمترین پارامترهایی را که در محاسبات با دقت محدود مد نظر قرار داده میشوند، توضیح دهیم. محاسبات ممیز ثابت در برخی از کتب آموزشی تحت عنوان محاسبات با دقت محدود مخاطب قرار داده میشود. یعنی تحت هیچ شرایطی دقت محاسبات از مقدار مشخصی که از ابتدا نیز قابل محاسبه است، بیشتر نخواهد بود.
محاسبات با دقت محدود
مهمترین پارامترهایی که در محاسبات با دقت محدود وجود دارند، به شرح زیر هستند. مجدداً یادآوری میکنم که این پارامترها با توجه به فرمت ممیز ثابت انتخابی، تعیین میشوند.
دقت یا precision
در همین چند جملهای که تا به اینجا مطالعه کردید، چندین بار با واژه دقت روبرو شدهاید. این پارامتر نشان دهنده تعداد بیتی است که یک عدد ممیز ثابت با آن نمایش داده میشود. به عنوان مثال، عددی با فرمت (13,2)Q یا با فرمت (1,15)U، عددی ممیز ثابت، با دقت ۱۶ بیت است. پس دقت چیزی نیست جز تعداد بیت نمایش دهنده اعداد ممیز ثابت که بعضاً تحت عنوان طول کلمه یا عرض بیت نیز شناخته میشود. اگر فرض کنیم یک عدد ممیز ثابت دارای N بیت است، به این معناست دقت آن برابر با N بیت است. در حقیقت در نمایش ممیز ثابت، این N بیت بازه نمایش یک عدد را به2N-1 سطح قابل نمایش تقسیم میکند.
تفکیک پذیری یا resolution
کوچکترین عدد یا اندازه قابل نمایش در فرمت ممیز ثابت میزان تفکیک پذیری (رزولوشن) یا resolution فرمت انتخابی را مشخص میکند. میزان تفکیک پذیری برای عددی با فرمت (a,b)Q به صورت زیر محاسبه میشود.
$$R(x)= \frac{1}{2^{b}}$$
مثالهای زیر را در نظر بگیرید:
- یک عدد علامت دار با فرمت (13,2)Q دارای دقت ۱۶ بیت و تفکیک پذیری 0.25 است.
- عددی با فرمت (1,15)U هم دارای دقت ۱۶ بیت است، اما تفکیک پذیری آن 0.000030517578125 است و در نهایت
- اعداد صحیح دارای تفکیک پذیری یک هستند.
دامنه تغییرات یا range
دامنه تغییرات به بازه قابل نمایش اعداد در یک فرمت ممیز ثابت اطلاق میشود. در واقع دامنه تغییرات از تفاضل بزرگترین عدد قابل نمایش مثبت و کوچکترین یا منفی ترین عدد قابل نمایش بدست میآید.
$$X_{max+}-X_{max-}=X_R$$
به عنوان مثال، با استفاده از فرمت (13,2)Q میتوان اعدادی بین 8192- تا 8191.75+ را نمایش داد. بنابراین دامنه تغییرات فرمت (13,2)Q برابر 16383.75 است.
صحت یا accuracy
این پارامتر نشان دهنده اندازه حداکثر خطای بین عدد حقیقی و عدد نشان داده شده در فرمت ممیز ثابت است. در واقع صحت یک عدد در فرمت ممیز ثابت با نحوه تبدیل آن عدد تغییر میکند. یعنی یک عدد حقیقی میتواند به صورت بریدن و قطع کردن رشته بیت نمایش یا به عبارتی گرد کردن به پایین در فرمت مورد نظر قرار بگیرد. در این حالت عدد نمایش داده شده همواره کوچکتر یا مساوی عدد حقیقی اصلی است. به بیان دیگر در این حالت خطای نمایش عدد میتواند بین صفر تا اندازه تفکیک پذیری فرمت ممیز ثابت متغیر باشد. در این صورت حداکثر میزان خطای نمایش یا صحت عدد برابر مقدار تفکیک پذیری است.
$$A(x)=R(x)$$
در این رابطه (x)A معرف صحت و (x)R میزان تفکیک پذیری عدد فرضی x است.
Rounding Vs. Truncation
اگر با تفاوت دو اصطلاح بالا آشنا نیستید این چند جمله را با دقت بخوانید:
- بریدن، قطع کردن، گرد کردن به پایین یا ترانکیشن معادلهای فارسی اصطلاح Truncation هستند.
- گرد کردن یا رند کردن به نزدیکترین سطح قابل نمایش معادلهای فارسی اصطلاح Rounding هستند.
ترانکیشن یک عدد حقیقی و تبدیل آن به فرمت ممیز ثابت معادل دور ریختن بیتهای کم ارزش است. از نقطه نظر سخت افزاری، پیاده سازی عمل ترانکیشن در FPGA هیچ هزینهای ندارد. در نقطه مقابل برای رند کردن یک عدد به نزدیکترین سطح قابل نمایش نیاز به یک مقایسه کننده و جمع کننده داریم. چرا؟ به همین دلیل استفاده از ترانکیشن همواره بر رندکردن ارجحیت دارد. مگر آنکه به صحت بیشتری نیاز داشته باشیم.
از سوی دیگر اگر عدد حقیقی بعد ممیز ثابت شدن به نزدیکترین سطح قابل نمایش در آن فرمت گرد شود، در این حالت عدد ممیز ثابت میتواند بزرگتر و یا کوچکتر از عدد اصلی باشد و خطای نمایش عدد میتواند در بازه 2/(x)R+ تا 2/(x)R- باشد. بنابراین حداکثر خطای نمایش یا صحت عدد برابر نصف مقدار تفکیک پذیری است.
$$A(x)=R(x)/2$$
عدد فرضی x با فرمت (13,2)Q دارای صحت 0.125 است.
$$R(x)/2=1/8=0.125$$
دامنه دینامیکی یا dynamic range
نسبت ماکزیمم عدد قابل نمایش به کوچکترین عدد مثبت قابل نمایش را دامنه یا رِنج دینامیکی میگویند. دامنه دینامیکی به صورت dB نیز نمایش داده میشود.
$$D(x)=\frac{max \: value}{min \: value}$$
$$20\log_{10}\left(\frac{max \: value}{ min \: value}\right)$$
با توجه به رابطه فوق میتوانید بگویید هر بیت معادل چند dB است؟
دامنه دینامیکی یک عدد ممیز ثابت علامت دار با فرمت (a,b)Q برابر است با
$$\frac{2^a}{2^{-b}}=2^a+2^b=2^{N-1}$$
و دامنه دینامیکی یک عدد ممیز ثابت بدون علامت با فرمت (a,b)U برابر است با
$$\frac{2^a- 2^{-b} }{2^{-b}}=2^a+2^b-1=2^N-1$$
بنابراین این مشاهده میشود که برای اعداد ممیز ثابت دامنه دینامیکی فقط به تعداد بیت یا دقت عدد یعنی N وابسته است. در صورتی که N به اندازه کافی بزرگ باشد میتوان از ۱ در رابطه بالا صرف نظر کرد.
مقایسه پارامترها
در جدول زیر یک عدد علامت دار ۱۶ بیتی با فرمتهای مختلف نشان داده شده است. آیا خودتان میتوانید برای یک عدد ۱۶ بیتی بدون علامت چنین جدولی تهیه کنید؟
کوچکترین عدد دامنه | بزرگترین عدد دامنه | تفکیک پذیری | فرمت | دقت |
---|---|---|---|---|
1- | 0.999969482421875 | 0.00003051757813 | (0,15)Q | 16 |
2- | 1.99993896484375 | 0.00006103515625 | (1,14)Q | 16 |
4- | 3.9997779296875 | 0.00012207031250 | (2,13)Q | 16 |
8- | 7.999755859375 | 0.00024414062500 | (3,12)Q | 16 |
16- | 15.99951171875 | 0.00048828125000 | (4,11)Q | 16 |
32- | 31.9990234375 | 0.00097656250000 | (5,10)Q | 16 |
64- | 63.998046875 | 0.00195312500000 | (6,9)Q | 16 |
128- | 127.99609375 | 0.00390625000000 | (7,8)Q | 16 |
256- | 255.9921875 | 0.00781250000000 | (8,7)Q | 16 |
512- | 511.984375 | 0.01562500000000 | (9,6)Q | 16 |
1204- | 1023.96875 | 0.03125000000000 | (10,5)Q | 16 |
2048- | 2047.9375 | 0.06250000000000 | (11,4)Q | 16 |
4096- | 4095.875 | 0.12500000000000 | (12,3)Q | 16 |
8192- | 8191.75 | 0.25000000000000 | (13,2)Q | 16 |
16384- | 18383.5 | 0.50000000000000 | (4,11)Q | 16 |
32768- | 32767 | 1.00000000000000 | (15,0)Q | 16 |
جمع بندی
شاید برای شما این سوأل یش آمده باشد که آیا در زمان طراحی یک سیستم دیجیتال ممیز ثابت به تمام این پارامترها نیاز دارید یا خیر؟ در پاسخ به این سوأل باید گفت بستگی دارد!! در واقع انتخاب فرمت ممیز ثابت مناسب برای پیاده سازی یک الگوریتم کاملاً وابسته به تعریفی است که برای مسأله وجود دارد. اگر تعریف سخت گیرانه باشد و هدف دستیابی به دقیق ترین، صحیح ترین و تفکیک پذیرترین پاسخ ممکن باشد، در این صورت تک تک پارامترهای فوق باید محاسبه شوند و در هر گام از طراحی در صورت نیاز عرض بیتها بازنگری شوند.
در آخرین بخش از این آموزش در رابطه با نحوه انجام محاسبات ممیز ثابت و کنترل عرض بیت اعداد صحبت خواهیم کرد.
منبع: digitalsignallabs