تبلیغات
باران الکترونیک - آشنایی با ریاضیات ممیز ثابت
جمعه 6 آذر 1394  12:25 ق.ظ
نوع مطلب: (DSP ،برنامه نوسی C ،) توسط: امیرحسین رستمی

نوآوری با پردازش سیگنال شروع می شود ...‏

در این مقاله ابتدا به بررسی تفاوت های پردازنده های ممیز ثابت و شناور می پردازیم، سپس با انجام ‏محاسبات ریاضی در پردازنده ممیز ثابت توضیح می دهیم.‏

Fixed-point‏ در مقابل ‏Floating-point

در پردازنده ‏DSP‏ ‏Floating-point‏ ضرب و جمع اعشاری در یک کلاک انجام می پذیرد ولی در ‏پردازنده ‏Fixed-point‏ برای ضرب یا جمع اعشاری تعداد زیادی کلاک لازم است.‏
پردازنده های ممیز شناور 32 بیتی و پردازنده های‎‏ ممیز ثابت‎ ‎‏16 بیتی می باشند.‏
در پردازنده های ممیز شناور زمان نوشتن برنامه سریع تر می باشد زیرا برنامه نویس نگران سرریز و ‏خطای گردن کردن نیست. در مقابل نوشتن برنامه برای پردازنده ممیز ثابت سخت تر است و برنامه ‏نویس باید برنامه بیش تری بنویسد تا از سریز جلوگیری کند.‏
پردازنده های ممیز شناور گران تر هستند و توان بیش تری مصرف می کنند اما پردازنده های ممیز ‏ثابت ارزان قیمت می باشند، توان مصرفی کمتری دارند و برای کارهای قابل حمل مناسب ترند.‏
مزیت اصلی که پردازنده ممیز شناور نسبت به ممیز ثابت دارد این است که نرخ سیگنال به نویز ‏‏(گرد کردن اعداد) در پردازنده ممیز شناور ‏ بسیار بالاتر از ممیز ثابت ‏است.‏

پردازنده ممیز ثابت
برای این که محاسبات اعشاری در ‏DSP‏ ممیز ثابت با سرعت بالا انجام شود، ابتدا اعداد اعشاری را بین 1- و ‏‏1+ نرمالیزه می کنند. سپس این اعداد را در ‏‎215 = 32768‎‏ ضرب می کنند. در انتها اعداد را گرد می کنند تا ‏بخش اعشاری حذف شود. به این فرمت نمایش ‏Q0.15‎‏ و یا به طور خلاصه ‏Q15‎‏ می گویند. یک بیت برای ‏علامت و 15 بیت برای قسمت صحیح می باشد که در مجموع 16 بیت می شود.‏
فرمت ‏Q3.12‎
در فرمت ‏Q15‎، 15 بیت اعشاری و صفر بیت صحیح می باشد. می توان ترکیبی از بیت های اعشاری و صحیح نیز داشت. برای ‏مثال 3 بیت صحیح و 12 بیت اعشاری برای نمایش اعداد بین ‏‎(-‎32768‎)   ⁄  2^12 ‎‏ تا ‏‎(+32768‎)   ⁄  2^12 ‎‏ یا 8- تا 9997/7 ‏داشت.‏
به عنوان یک مثال کاربردی بست تیلور سینوس را در نظر بگیرید:‏
sin(x) = c1*x + c2*x^2 + c3*x^3 + c4*x^4 + c5*x^5‎
c1 = 3.140625x
c2 = 0.02026367‎
c3 = − 5.3251‎
c4 = 0.5446778‎
c5 = 1.800293‎
همان که مشاهده می کنید ضرایب بین 5- تا 3 می باشند. به جای نرمالیزه کردن و نمایش اعداد به فرمت ‏Q15‎‏ می توان از فرمت ‏Q3.12‎‏ برای دقت به تر استفاده کرد. کافی است تا ضرایب را در 212‏‎ ‎‏ ضرب کنیم و نتیجه نهایی را گرد کنیم تا اعداد به فرمت ‏Q3.12‎‏ ‏نشان داده شوند.‏
(برای ادامه مطلب به ادامه مطلب بروید)

ضرب دو عدد با فرمت Q15

وقتی دو عدد 15 بیتی علامت دار را در هم ضرب می کنیم حاصل یک عدد 30 بیتی می باشد. که باعث ‏سرریز شدن رجیسترهای 16 بیتی می شود. برای رفع این مشکل در پردازنده های 16 بیتی ‏DSP‏ رجیستر ‏اصلی یعنی آکوملاتور 40 بیتی می باشد تا در انجام محاسبات میانی سرریز اتفاق نیافتد. برای ذخیره نهایی در ‏متغییر 16 بیتی باید 15 بیت کم ارزش را دور بریزیم. این کار در محاسبات اعشاری معادل گرد کردن است. ‏به این نکته توجه داشته باشید که داده های اولیه بین 1- و 1+ می باشند. با ضرب این دو عدد باز هم نتیجه ‏نهایی بین 1- و 1+ می باشد.‏
با یک مثال موضوع را به تر توضیح می دهیم‎:‎
دو عدد اعشاری ‏x1‎‏ و ‏x2‎‏ و معادل ممیز ثابت شان را در نظر بگیرید:‏
x1=0.25   →   x(1,fix)=0.25×215=8,192‎
x2=0.75   →   x(2_fix)=0.75‎×215=24,576
ضرب اعشاری به صورت زیر
x1×x2=0.1875‎
و ضرب ممیز ثابت نیز به صورت زیر
Q30=Q15 × Q15 :        x(1,fix) × x(2,fix)=201,326,592‎
می باشد که با شیفت 15 واحد به راست یا به طور معادل تقسیم بر 215 حاصل نهایی با فرمت ‏Q15‎‏ به دست می آید:
‎‎Q30≫15=Q15:  (‎201,326,592‎)/2^15 =6144‎
برای تبدیل حاصل ‏Q15‎‏ به فرمت اعشاری اولیه کافی است آن را بر 215 تقسیم کنیم:‏
‎‎(‎6144‎)/215 =0.1875‎
نکته دیگری که در مورد فرمت ‏Q15‎‏ وجود دارد این است که این فرمت را باید در بازه ‏‎[-32767, 32767]‎ و یا به طور معادل ‏‎[-0.9999xx, 0.9999xx]‎‏ به کار ببریم.‏

مثال ‏DSP‏ با زبان ‏C
در پردازنده های ‏DSP‏ سری 5000 شرکت ‏TI، فرمت ‏short‏ 16 بیتی و ‏long‏ 32 بیتی می باشد. برای ضرب ‏دو عدد ‏short‏ ابتدا باید این دو عدد را به فرمت ‏long‏ تبدیل کرد. سپس در هم ضرب نمود. 15 بیت کم ‏ارزش حاصل ضرب را دور ریخت تا نتیجه نهایی به دست بیاید. به عمل تبدیل فرمت ‏Casting‏ می گویند. ‏برنامه ‏C‏ که این کار را انجام می دهد در ادامه آمده است:‏
short x1,x2,y;‎                   
y = (short)(((int)x1 * (int)x2) >> 15);‎             
ضرب دو عدد با فرمت مختلف
وقتی دو عدد با فرمت مختلف را در هم ضرب می کنیم حاصل نهایی به صورت زیر می باشد:‏
Q_(x.y)×Q_(w.z)=Q_(x+y.w+z)‎
مثال:‏
Q_3.12×Q_3.12=Q_6.24‎

Q_3.12×Q_15=Q_3.28
حاصل ضرب 30 بیتی می باشد که با 15 واحد شیفت به چپ حاصل 15 بیتی می شود.‏
Q_6.24≫15=Q_6.9‎
Q_3.28≫15=Q_312‎




نظرات()   
   
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
آخرین پست ها