ডিজিটাল সার্কিট/করডিক

testwiki থেকে
imported>SHEIKH কর্তৃক ১৮:১২, ১৬ জুন ২০২৪ তারিখে সংশোধিত সংস্করণ (বিট-সিরিয়াল)
(পরিবর্তন) ← পূর্বের সংস্করণ | সর্বশেষ সংস্করণ (পরিবর্তন) | পরবর্তী সংস্করণ → (পরিবর্তন)
পরিভ্রমণে চলুন অনুসন্ধানে চলুন

CORDIC (যার পূর্ণরূপ COordinate Rotation DIgital Computer) সার্কিটটি বিভিন্ন সাধারণ গাণিতিক ফাংশন গণনা করতে ব্যবহৃত হয়। যেমন, ত্রিকোণমিতিক, হাইপারবোলিক, লগারিদমিক এবং সূচকীয় ফাংশন।

প্রয়োগ

একটি CORDIC শুধুমাত্র অ্যাডার এবং বিটশিফট ব্যবহার করে ফলাফল গণনা করে। এর সুবিধা হল এটি তুলনামূলকভাবে সহজ হার্ডওয়্যার ব্যবহার করে বাস্তবায়ন করা যায়।

পাওয়ার সিরিজ বা টেবিল লুকআপের মতো পদ্ধতিগুলো সাধারণত গুণফল সম্পাদনের প্রয়োজন হয়। যদি একটি হার্ডওয়্যার মাল্টিপ্লায়ার উপলব্ধ না থাকে, তবে CORDIC সাধারণত দ্রুত হয়। তবে যদি একটি মাল্টিপ্লায়ার ব্যবহার করা যায়, অন্য পদ্ধতিগুলি দ্রুত হতে পারে।

CORDICs বিভিন্নভাবে বাস্তবায়িত হতে পারে, যেমন একটি একক-পর্যায়ের পুনরাবৃত্তিমূলক পদ্ধতি, যা মাল্টিপ্লায়ার সার্কিটগুলির তুলনায় খুব কম গেট প্রয়োজন। এছাড়াও, CORDICs অনেক ফাংশন একই হার্ডওয়্যার দিয়ে গণনা করতে পারে, তাই তারা সেই প্রয়োগগুলির জন্য আদর্শ যেখানে গতি নয় বরং খরচ কমানোর উপর গুরুত্ব দেওয়া হয় (যেমন, FPGAs-এ গেট সংখ্যা কমিয়ে)। এই অগ্রাধিকারের একটি উদাহরণ হল পকেট ক্যালকুলেটর, যেখানে CORDICs খুব ঘন ঘন ব্যবহার করা হয়।

ইতিহাস

CORDIC প্রথম আবিষ্কার করেন J.E. Volder 1959 সালে Convair-এর অ্যারোইলেকট্রনিক্স বিভাগে। এটি B-58 Hustler বোম্বারের নেভিগেশনাল কম্পিউটারের জন্য ডিজাইন করা হয়েছিল, যা ত্রিকোণমিতিক ফাংশন গণনা করা একটি এনালগ রেজলভার প্রতিস্থাপন করতে ব্যবহৃত হত (সার্কুলার CORDIC)।

1971 সালে, J.S. Walther, Hewlett-Packard-এ, এই পদ্ধতিটি বাড়িয়ে হাইপারবোলিক ফাংশন, প্রাকৃতিক লগারিদম, প্রাকৃতিক সূচকীয়, গুণফল, ভাগ এবং বর্গমূল (লিনিয়ার CORDIC এবং হাইপারবোলিক CORDIC) গণনা করার জন্য প্রসারিত করেন।

2019 সালে, হাইপারবোলিক CORDIC ভিত্তিক, Yuanyong Luo এবং তার সহযোগীরা একটি Generalized Hyperbolic CORDIC (GH CORDIC) প্রস্তাব করেন, যা নির্দিষ্ট যেকোনো বেসের লগারিদম এবং সূচকীয় সরাসরি গণনা করতে সক্ষম। তাত্ত্বিকভাবে, হাইপারবোলিক CORDIC হল GH CORDIC-এর একটি বিশেষ ক্ষেত্রে।

সাধারণ ধারণা

ভেক্টরের নিম্নলিখিত ঘূর্ণনগুলি বিবেচনা করুন:

  • (1, 0) থেকে শুরু করুন
  • θ দ্বারা ঘূর্ণন করুন
  • আমরা পাই (cosθ, sinθ)
  • (1, y) থেকে শুরু করুন
  • ঘুরান যতক্ষণ না y = 0 হয়
  • ঘূর্ণনটি হল tan−1y

যদি আমাদের একটি ভেক্টর ঘুরানোর জন্য একটি দক্ষ পদ্ধতি থাকে, আমরা সরাসরি sine, cosine এবং arctan ফাংশনগুলো নির্ণয় করতে পারি। তবে, একটি ইচ্ছেমত কোণ দ্বারা ঘূর্ণন করা সহজ নয় (তখন sine এবং cosine জানতেই হয়, যা ঠিক আমাদের কাছে নেই)। আমরা দুটি পদ্ধতি ব্যবহার করে এটিকে সহজ করি:

  • ঘূর্ণন করার পরিবর্তে, আমরা "ছদ্মঘূর্ণন" করি, যা গণনা করা সহজ।
  • নির্দিষ্ট কিছু কোণের αi যোগফল থেকে ইচ্ছাকৃত কোণ θ তৈরি করি:
θ=α1+α2++αm

নীচের চিত্রটি একটি ভেক্টর Ri এর একটি কোণ ai এর চারপাশে ঘূর্ণন এবং ছদ্মঘূর্ণন দেখায়:

উৎসের চারপাশে একটি ঘূর্ণন নিম্নলিখিত স্থানাঙ্ক তৈরি করে:

xi+1=xicosαiyisinαi
yi+1=yicosαi+xisinαi
θi+1=θi+αi

পরিচিতি পুনরাবৃত্ত করুন cosθ1/1+tan2θ.

xi+1=(xiyitanαi)/1+tan2αi
yi+1=(yi+xitanαi)/1+tan2αi

আমাদের কৌশল হবে 1/1+tan2αi ফ্যাক্টরটি বাদ দেওয়া এবং tanαi দ্বারা গুণফল অপসারণ করা। একটি ছদ্মঘূর্ণন একটি ভিন্ন দৈর্ঘ্যের সাথে একটি ঘূর্ণিত ভেক্টরের সমান কোণ উত্পন্ন করে। প্রকৃতপক্ষে, ছদ্মঘূর্ণন দৈর্ঘ্য পরিবর্তন করে:

Ri+1=Ricosαi=Ri1+tan2αi

এখন আমরা নিম্নলিখিত স্থানাঙ্কগুলি পাই একটি ছদ্মঘূর্ণনের পর:

xi+1=(xiyitanαi)
yi+1=(yi+xitanαi)
θi+1=θiαi

ছদ্মঘূর্ণন সফলভাবে আমাদের দৈর্ঘ্য-ফ্যাক্টর অপসারণ করেছে, যা ব্যয়বহুল ভাগ অপারেশন প্রয়োজন হত। তবে, ভেক্টর n ছদ্মঘূর্ণনের একটি ক্রমে K ফ্যাক্টরে বৃদ্ধি পাবে:

K=i=0n11+tan2αi

n ছদ্মঘূর্ণনের পরে স্থানাঙ্কগুলি হবে:

xn=K(xicosi=0n1αiyisini=0n1αi)
yn=K(yicosi=0n1αi+xisini=0n1αi)
θn=θii=0n1αi
প্রথম তিনটি ছদ্মঘূর্ণন। লক্ষ্য করুন কিভাবে আমরা সঠিক কোণের দিকে এগোচ্ছি, θ

যদি কোণগুলো সবসময় একই সেট হয়, তাহলে K স্থির থাকে এবং পরে এটি সমন্বয় করা যায়। আমরা এই কোণগুলো নিম্নলিখিত দুটি মানদণ্ড অনুসারে নির্বাচন করি:

  • আমাদের কোণগুলো এমনভাবে নির্বাচন করতে হবে যাতে যেকোনো কোণ তাদের যোগফল থেকে তৈরি করা যায়, যথাযথ চিহ্ন সহ।
  • আমরা সব tanαi কে 2-এর ঘাত করে নেই, যাতে গুণফলটি একটি সাধারণ লজিক্যাল শিফট দিয়ে করা যায়।

ট্যাঙ্গেন্ট ফাংশনের [0, π/2] পরিসরে একটি একচেটিয়া বৃদ্ধিকারক প্রবণতা রয়েছে, তাই প্রদত্ত কোণের ট্যাঙ্গেন্ট সর্বদা অর্ধেক কোণের ট্যাঙ্গেন্টের দ্বিগুণের চেয়ে কম। এর মানে হল যে যদি আমরা কোণগুলি αi=tan12i করি, তাহলে আমরা উভয় মানদণ্ড পূরণ করতে পারি। মনে রাখবেন ট্যাঙ্গেন্ট ফাংশনটি বিজোড়, এর মানে অন্য দিকে ছদ্মঘূর্ণন করতে হলে, আপনাকে কেবল কোণের ট্যাঙ্গেন্ট বিয়োগ করতে হবে, যোগ করার পরিবর্তে।

i αi = tan−1 (2−i)
ডিগ্রি রেডিয়ান
0 45.00 0.7854
1 26.57 0.4636
2 14.04 0.2450
3 7.13 0.1244
4 3.58 0.0624
5 1.79 0.0312
6 0.90 0.0160
7 0.45 0.0080
8 0.22 0.0040
9 0.11 0.0020

প্রক্রিয়ার i ধাপে, আমরা di2i দ্বারা ছদ্মঘূর্ণন করি, যেখানে di হল ঘূর্ণনের দিক (বা চিহ্ন), যা প্রতিটি ধাপে নির্বাচন করা হবে যাতে কোণটি চূড়ান্ত ঘূর্ণনের দিকে সংকোচন করতে পারে। উদাহরণস্বরূপ, 28° এর একটি ঘূর্ণন বিবেচনা করুন:

2845.026.57+14.047.13+3.581.79+0.900.45+0.22+0.11
2827.91

আমরা যত বেশি ধাপ নিই, ক্রমাগত ঘূর্ণন দ্বারা আমরা তত ভাল আনুমানিক করতে পারি। সুতরাং, আমাদের নিম্নলিখিত পুনরাবৃত্ত স্থানাঙ্ক গণনা আছে:

xi+1=xidiyi2i
yi+1=yi+dixi2i
θi+1=θidiαi

নির্দিষ্ট k বিটের নির্ভুলতা অর্জনের জন্য, k পুনরাবৃত্তির প্রয়োজন, কারণ tan12i2i, যা i বাড়ার সাথে সাথে সংকোচন

CORDIC ব্যবহারের পদ্ধতি

CORDIC বিভিন্ন ফাংশন গণনা করতে ব্যবহৃত হতে পারে। একটি CORDIC-এর তিনটি ইনপুট থাকে: x0, y0, এবং z0। CORDIC-এ ইনপুটের উপর ভিত্তি করে, আউটপুট xn, yn, এবং zn-এ বিভিন্ন ফলাফল তৈরি করা যায়। টেমপ্লেট:Clear

ঘূর্ণন মোডে CORDIC ব্যবহার

xi+1=xidiyi2i
yi+1=yi+dixi2i
zi+1=zidiαi

xn=K(x0cosz0y0sinz0)
yn=K(y0cosz0+x0sinz0)
zn=0

zn কে 0-তে সংকোচন করতে, di=sgn zi বেছে নিন।

যদি আমরা x0 = 1/K এবং y0=0 দিয়ে শুরু করি, প্রক্রিয়া শেষে, আমরা পাই xn=cos z0 এবং yn=sin z0

সঙ্কোচনের পরিসীমা হল 99.7<z0<99.7 কারণ 99.7° সব কোণের তালিকার যোগফল।

ভেক্টরিং মোডে CORDIC ব্যবহার

xi+1=xidiyi2i
yi+1=yi+dixi2i
zi+1=zidiαi

xn=Kx2+y2
yn=0
zn=z0+tan1(y0/x0)

yn কে 0-তে সংকোচন করতে, di=sgn (yi) বেছে নিন।

যদি আমরা x0 = 1 এবং z0 = 0 দিয়ে শুরু করি, আমরা পাই zn=tan−1y0

CORDIC এর বাস্তবায়ন

বিট-প্যারালেল, আনরোল্ড

বিট-প্যারালেল, ইটারেটিভ

যদি উচ্চ গতি প্রয়োজন না হয়, এটি একটি একক অ্যাডার এবং একটি একক শিফটার দিয়ে বাস্তবায়িত করা যেতে পারে।

বিট-সিরিয়াল

ইউনিভার্সাল কর্ডিক

একটি মূলক μ যোগ করে, আমরা লিনিয়ার এবং হাইপারবোলিক ফাংশনগুলির জন্য কর্ডিক ব্যবহার করতে পারি:

xi+1=xiμdiyi2i
yi+1=yi+dixi2i
zi+1=zidiαi

ইউনিভার্সাল কর্ডিক বিবৃতির সারাংশ

xi+1=xiμdiyi2i
yi+1=yi+dixi2i
zi+1=zidiαi
মোড ঘূর্ণন ভেক্টরিং
di=sgn (zi),z0 di=sgn (yi),y0
বৃত্তাকার

μ = 1
αi = tan−12−i

লিনিয়ার

μ = 0
αi = 2−i

হাইপারবোলিক

μ = -1
αi = tanh−12−i

  • হাইপারবোলিক মোডে, পুনরাবৃত্তি 4, 13, 40, 121, ..., j, 3j+1,... অবশ্যই পুনরাবৃত্তি করতে হবে। এর জন্য দেওয়া স্থিতিগুলি K' অনুযায়ী।
  • K = 1.646760258121...
  • 1/K = 0.607252935009...
  • K' = 0.8281593609602...
  • 1/K' = 1.207497067763...

সরাসরি গণনাযোগ্য ফাংশনসমূহ

sinz cosz
tan1z sinhz
coshz tanh1z
y/x xz
tan1(y/x) x2+y2
x2y2 ez=sinhz+coshz

প্রত্যাশিত গণনাযোগ্য ফাংশনসমূহ

উপরের ফাংশনগুলির পাশাপাশি, পূর্ববর্তী গণনার ফলাফল সংযোজনে অন্যান্য ফাংশনগুলি উত্পন্ন করা যেতে পারে:

tanz=sinzcosz cos1w=tan11w2w
tanhz=sinhzcoshz sin1w=tan1w1w2
lnw=2tanh1w1w+1 logbw=lnwlnb
wt=etlnw cosh1=ln(w+w21)
tan1(y/x) sinh1=ln(w+w2+1)
x2y2 w=(w+1/4)2(w1/4)2