อ่าน 25 นาที
คอร์ดิค
CORDIC ซึ่งย่อมาจาก Coordinate Rotation Digital Computer เป็น อัลกอริทึมที่ เรียบง่ายและมีประสิทธิภาพในการคำนวณ ฟังก์ชันตรีโกณมิติ ฟังก์ชัน ไฮ เปอร์ โบลิก รากที่สอง การคูณ การ...
คอร์ดิค
| ตรีโกณมิติ |
|---|
|
| อ้างอิง |
| กฎและทฤษฎีบท |
| แคลคูลัส |
| นักคณิตศาสตร์ |
CORDICซึ่งย่อมาจากCoordinate Rotation Digital Computer เป็น อัลกอริทึมที่เรียบง่ายและมีประสิทธิภาพในการคำนวณฟังก์ชันตรีโกณมิติฟังก์ชันไฮเปอร์โบลิก รากที่สองการคูณ การหารเลขยกกำลังและลอการิทึมที่มีฐานใดๆ โดยทั่วไปจะลู่เข้าด้วยตัวเลข (หรือบิต) หนึ่งหลักต่อรอบการคำนวณ ดังนั้น CORDIC จึงเป็นตัวอย่างของอัลกอริทึมแบบทีละหลักระบบดั้งเดิมบางครั้งเรียกว่าอัลกอริทึมของโวลเดอร์
CORDIC และวิธีการที่เกี่ยวข้องอย่างใกล้ชิด เช่นการคูณเทียม การหารเทียมหรือการรวมตัวประกอบมักใช้เมื่อไม่มีตัวคูณฮาร์ดแวร์ (เช่น ในไมโครคอนโทรลเลอร์และฟิลด์โปรแกรมเมเบิลเกตอาร์เรย์หรือ FPGA) เนื่องจากต้องการเพียงการบวกการลบ การเลื่อนบิตและตารางค้นหา เท่านั้น ดังนั้น วิธีการเหล่านี้จึงจัดอยู่ในกลุ่มของอัลกอริทึมแบบเลื่อนและบวกในวิทยาการคอมพิวเตอร์ CORDIC มักใช้ในการคำนวณเลขทศนิยมเมื่อแพลตฟอร์มเป้าหมายไม่มีฮาร์ดแวร์สำหรับการคูณด้วยเหตุผลด้านต้นทุนหรือพื้นที่ ซึ่งเป็นกรณีของไมโครคอมพิวเตอร์ รุ่นแรกๆ ส่วนใหญ่ ที่ใช้โปรเซสเซอร์เช่นMOS 6502และZilog Z80
ตลอดหลายปีที่ผ่านมา มีแนวคิดที่หลากหลายเกิดขึ้นมากมาย รวมถึงCORDIC แบบวงกลม ( Jack E. Volder ) [ 1 ] [ 2 ] CORDIC แบบเส้นตรงCORDIC แบบไฮเปอร์โบลิก ( John Stephen Walther) [ 3 ] [ 4 ]และCORDIC แบบไฮเปอร์โบลิกทั่วไป ( GH CORDIC ) (Yuanyong Luo et al.) [ 5 ] [ 6 ]
แนวคิด
โดยสรุปแล้ว อัลกอริทึม CORDIC พื้นฐานเกี่ยวข้องกับการใช้การหมุนแบบปรับขนาดกับเวกเตอร์ ค่าตัวคูณขนาดและมุมการหมุนเป็นที่ทราบล่วงหน้า มีเพียงทิศทางการหมุนแต่ละครั้งเท่านั้นที่ขึ้นอยู่กับอินพุต ในโหมดการหมุน มุมการหมุนเป้าหมายจะถูกใช้เป็นอินพุต และทิศทางการหมุนจะถูกเลือกเพื่อให้มุมการหมุนสะสมเข้าใกล้เป้าหมาย ผลลัพธ์คือเวกเตอร์สุดท้าย ในโหมดการสร้างเวกเตอร์ เวกเตอร์จะถูกใช้เป็นอินพุต และทิศทางการหมุนจะถูกเลือกเพื่อให้ พิกัด yของเวกเตอร์เข้าใกล้ 0 ผลลัพธ์คือมุมการหมุนทั้งหมด ดูรายละเอียดเพิ่มเติมได้ใน หัวข้อ โหมดการทำงาน
ค่าตัวคูณมาตราส่วนและมุมการหมุนถูกเลือกเพื่อให้สามารถคำนวณการหมุนตามมาตราส่วนได้โดยใช้เพียงการบวก การลบ และการเลื่อนบิตเท่านั้น โดยจะค้นหามุมเหล่านี้จากตารางที่คำนวณไว้ล่วงหน้าแล้ว
ประวัติศาสตร์
เทคนิคทางคณิตศาสตร์ที่คล้ายกันนี้ได้รับการตีพิมพ์โดยHenry Briggsตั้งแต่ปี 1624 [ 7 ] [ 8 ]และ Robert Flower ในปี 1771 [ 9 ]แต่ CORDIC ได้รับการปรับให้เหมาะสมยิ่งขึ้นสำหรับ CPU สถานะจำกัดที่มีความซับซ้อนต่ำ
CORDIC ได้รับการคิดค้นขึ้นในปี พ.ศ. 2499 [ 10 ] [ 11 ]โดยJack E. Volderที่ แผนก อิเล็กทรอนิกส์การบินของConvairเนื่องจากความจำเป็นในการแทนที่ตัวแปลงสัญญาณอนาล็อกใน คอมพิวเตอร์นำทางของ เครื่องบินทิ้งระเบิด B-58ด้วยโซลูชันดิจิทัลแบบเรียลไทม์ที่แม่นยำและรวดเร็วกว่า[ 11 ]ดังนั้น CORDIC จึงถูกเรียกว่าตัวแปลงสัญญาณดิจิทัล ในบาง ครั้ง[ 12 ] [ 13 ]
ในการวิจัยของเขา Volder ได้รับแรงบันดาลใจจากสูตรในCRC Handbook of Chemistry and Physics ฉบับปี 1946 : [ 11 ]
โดยที่และเป็นเช่นนั้น
งานวิจัยของเขานำไปสู่รายงานทางเทคนิคภายในที่เสนออัลกอริทึม CORDIC เพื่อแก้ ปัญหาฟังก์ชัน ไซน์และโคไซน์และคอมพิวเตอร์ต้นแบบที่นำไปใช้[ 10 ] [ 11 ]รายงานยังกล่าวถึงความเป็นไปได้ในการคำนวณการหมุนพิกัดไฮเปอร์ โบ ลิกลอการิทึมและฟังก์ชันเลขชี้กำลังด้วยอัลกอริทึม CORDIC ที่ได้รับการดัดแปลง[ 10 ] [ 11 ]การใช้ CORDIC สำหรับการคูณและการหารก็ได้รับการพิจารณาในเวลานั้นเช่นกัน[ 11 ]จากหลักการของ CORDIC แดน เอช. แด็กเก็ตต์ เพื่อนร่วมงานของโวลเดอร์ที่คอนแวร์ ได้พัฒนาอัลกอริทึมการแปลงระหว่างเลขฐานสองและเลขฐานสิบแบบเข้ารหัสไบนารี (BCD) [ 11 ] [ 14 ]
ในปี พ.ศ. 2491 Convair เริ่มสร้างระบบสาธิตเพื่อแก้ปัญหาการตรวจจับเรดาร์ ที่เรียกว่า CORDIC Iซึ่งเสร็จสมบูรณ์ในปี พ.ศ. 2503 โดยไม่มี Volder ซึ่งออกจากบริษัทไปแล้ว[ 1 ] [ 11 ] Daggett และ Harry Schuss ได้สร้างและทดสอบCORDIC IIรุ่นA (แบบอยู่กับที่) และB (แบบลอยฟ้า) ที่ใช้งานได้หลากหลายกว่า ในปี พ.ศ. 2505 [ 11 ] [ 15 ]
อัลกอริทึม CORDIC ของ Volder ได้รับการอธิบายต่อสาธารณะเป็นครั้งแรกในปี พ.ศ. 2492 [ 1 ] [ 2 ] [ 11 ] [ 13 ] [ 16 ]ซึ่งทำให้บริษัทต่างๆ เช่นMartin-Orlando , Computer Control , Litton , Kearfott , Lear-Siegler , Sperry , RaytheonและCollins Radioนำ ไปรวมไว้ในคอมพิวเตอร์นำทาง [ 11 ]
Volder ร่วมมือกับ Malcolm McMillan เพื่อสร้างAthenaซึ่งเป็นเครื่องคิดเลขตั้งโต๊ะแบบจุดคงที่ ที่ใช้อัลกอริทึม CORDIC แบบไบนารีของเขา[ 17 ]การออกแบบนี้ถูกนำเสนอต่อHewlett-Packardในเดือนมิถุนายน พ.ศ. 2508 แต่ไม่ได้รับการยอมรับ[ 17 ]อย่างไรก็ตาม McMillan ได้แนะนำ อัลกอริทึมของ Volder ให้กับ David S. Cochran (HP) และเมื่อ Cochran ได้พบกับ Volder ในภายหลัง เขาได้แนะนำวิธีการที่คล้ายกันซึ่งJohn E. Meggitt (IBM [ 18 ] ) ได้เสนอไว้เป็นการคูณเทียมและการหารเทียมในปี พ.ศ. 2504 [ 18 ] [ 19 ]วิธีการของ Meggitt ยังแนะนำให้ใช้ฐาน 10 [ 18 ]แทนฐาน 2ดังที่ CORDIC ของ Volder ใช้มาจนถึงปัจจุบัน ความพยายามเหล่านี้ส่งผลให้เกิด การนำตรรกะ ROMableมาใช้ในเครื่องต้นแบบ CORDIC ทศนิยมภายใน Hewlett-Packard ในปี 1966 [ 20 ] [ 19 ]ซึ่งสร้างขึ้นโดยและพัฒนาแนวคิดมาจากเครื่อง Green Machineต้นแบบของThomas E. Osborne ซึ่งเป็นเครื่องคิดเลขตั้งโต๊ะ แบบจุดลอยตัวสี่ฟังก์ชันที่เขาทำเสร็จในตรรกะDTL [ 17 ]ในเดือนธันวาคม 1964 [ 21 ]โครงการนี้ส่งผลให้มีการสาธิตเครื่องคิดเลขตั้งโต๊ะเครื่องแรกของ Hewlett-Packard ที่มีฟังก์ชันทางวิทยาศาสตร์ คือHP 9100Aในเดือนมีนาคม 1968 โดยเริ่มการผลิตจำนวนมากในปลายปีนั้น[ 17 ] [ 21 ] [ 22 ] [ 23 ]
เมื่อWang Laboratoriesพบว่า HP 9100A ใช้แนวทางที่คล้ายกับ วิธีการ รวมปัจจัยในเครื่องคิดเลขแบบตั้งโต๊ะ LOCI-1 [ 24 ] (กันยายน 1964) และ LOCI-2 (มกราคม 1965) [ 25 ] [ 26 ] รุ่นก่อนหน้า[ 27 ] พวกเขาจึงกล่าวหาHewlett - Packardว่าละเมิดสิทธิบัตรของAn Wangในปี 1968 แต่ไม่สำเร็จ[ 19 ] [ 28 ] [ 29 ] [ 30 ]
John Stephen Waltherที่ Hewlett-Packard ได้ขยายอัลกอริทึมนี้ให้เป็น อัลกอริทึม Unified CORDICในปี 1971 ทำให้สามารถคำนวณฟังก์ชันไฮเปอร์โบลิกเลขชี้กำลังธรรมชาติลอการิทึมธรรมชาติ การคูณการหารและรากที่สองได้[ 31 ] [ 3 ] [ 4 ] [ 32 ]รูทีนย่อย CORDIC สำหรับฟังก์ชันตรีโกณมิติและไฮเปอร์โบลิกสามารถใช้โค้ดร่วมกันได้เกือบทั้งหมด[ 28 ]การพัฒนานี้ส่งผลให้เกิดเครื่องคิดเลขวิทยาศาสตร์ แบบพกพาเครื่องแรก คือHP-35ในปี 1972 [ 28 ] [ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ]โดยอิงจาก CORDIC ไฮเปอร์โบลิกYuanyong Luoและคณะ นอกจากนี้ ยังมีการเสนอ Generalized Hyperbolic CORDIC (GH CORDIC) เพื่อคำนวณลอการิทึมและเลขชี้กำลังโดยตรงด้วยฐานคงที่ใดๆ ในปี 2019 [ 5 ] [ 6 ] [ 38 ] [ 39 ] [ 40 ]ในทางทฤษฎี Hyperbolic CORDIC เป็นกรณีพิเศษของ GH CORDIC [ 5 ]
เดิมที CORDIC ถูกนำไปใช้โดยใช้ระบบเลขฐานสอง เท่านั้น และแม้ว่า Meggitt จะแนะนำให้ใช้ระบบเลขฐานสิบสำหรับวิธีการคูณเทียมของเขา แต่ CORDIC ในระบบเลขฐานสิบก็ยังคงไม่เป็นที่รู้จักมากนักอีกหลายปี จนกระทั่งHermann Schmidและ Anthony Bogacki ยังคงเสนอแนะว่าเป็นนวัตกรรมใหม่ในปี 1973 [ 16 ] [ 13 ] [ 41 ] [ 42 ] [ 43 ]และต่อมาจึงพบว่า Hewlett-Packard ได้นำไปใช้แล้วในปี 1966 [ 11 ] [ 13 ] [ 20 ] [ 28 ]
CORDIC ใน รูป แบบทศนิยมได้รับความนิยมอย่างแพร่หลายในเครื่องคิดเลขพกพา [ 13 ]ซึ่งส่วนใหญ่ทำงานในรูปแบบเลขฐานสิบแบบเข้ารหัสไบนารี (BCD) แทนที่จะเป็นเลขฐานสอง การเปลี่ยนแปลงรูปแบบการป้อนข้อมูลและการส่งออกนี้ไม่ได้เปลี่ยนแปลงอัลกอริธึมการคำนวณหลักของ CORDIC CORDIC เหมาะอย่างยิ่งสำหรับเครื่องคิดเลขพกพา ซึ่งต้นทุนต่ำ – และด้วยเหตุนี้จำนวนเกตชิปจึงต่ำ – จึงมีความสำคัญมากกว่าความเร็ว
CORDIC ได้รับการนำไปใช้ในSTM32G4 ที่ใช้ ARM , Intel 8087 , [ 43 ] [ 44 ] [ 45 ] [ 46 ] [ 47 ] 80287 , [ 47 ] [ 48 ] 80387 [ 47 ] [ 48 ]จนถึง ซีรี่ส์โคโปรเซสเซอร์ 80486 [ 43 ]รวมถึงในMotorola 68881 [ 43 ] [ 44 ]และ68882สำหรับคำสั่งจุดลอยตัวบางประเภท โดยส่วนใหญ่เป็นวิธีลดจำนวนเกต (และความซับซ้อน) ของระบบย่อย FPU
แอปพลิเคชัน
CORDIC ใช้การดำเนินการเลื่อนบวกแบบง่ายสำหรับงานคำนวณหลายอย่าง เช่น การคำนวณฟังก์ชันตรีโกณมิติ ไฮเปอร์โบลิก และลอการิทึม การคูณจำนวนจริงและจำนวนเชิงซ้อน การหาร การคำนวณรากที่สอง การแก้ระบบสมการเชิงเส้น การประมาณค่าลักษณะเฉพาะ การแยกส่วนค่าเอกลักษณ์ การแยกตัวประกอบQRและอื่น ๆ อีกมากมาย ด้วยเหตุนี้ CORDIC จึงถูกนำไปใช้ในแอปพลิ เคชันในหลากหลายสาขา เช่นการ ประมวล ผลสัญญาณและภาพระบบสื่อสารหุ่นยนต์และกราฟิก 3 มิตินอกเหนือจากการคำนวณทางวิทยาศาสตร์และเทคนิคทั่วไป[ 49 ] [ 50 ]
ฮาร์ดแวร์
อัลกอริทึมนี้ถูกใช้ในระบบนำทางของยานสำรวจดวงจันทร์ของโครงการอพอลโลเพื่อคำนวณทิศทางและระยะทาง หรือระยะห่างจาก โมดูล ลง จอด บนดวงจันทร์[ 51 ] [ 52 ] CORDIC ถูกนำมาใช้ในการใช้งาน ตัวประมวลผลร่วมทางคณิตศาสตร์ Intel 8087ในปี 1980 ซึ่งช่วยหลีกเลี่ยงความจำเป็นในการใช้งานการคูณด้วยฮาร์ดแวร์[ 53 ]
โดยทั่วไป CORDIC จะเร็วกว่าวิธีการอื่นๆ เมื่อไม่มีตัวคูณฮาร์ดแวร์ (เช่น ไมโครคอนโทรลเลอร์) หรือเมื่อต้องการลดจำนวนเกตที่จำเป็นในการใช้งานฟังก์ชันที่รองรับ (เช่น ใน FPGA หรือASIC ) อันที่จริง CORDIC เป็น IPมาตรฐานที่สามารถใช้งาน ได้ทันที ในแอปพลิเคชันการพัฒนา FPGA เช่น Vivado ของ Xilinx ในขณะที่การใช้งานแบบอนุกรมกำลังไม่สามารถใช้งานได้เนื่องจากความเฉพาะเจาะจงของ IP ดังกล่าว กล่าวคือ CORDIC สามารถคำนวณฟังก์ชันต่างๆ ได้มากมาย (ใช้งานทั่วไป) ในขณะที่ตัวคูณฮาร์ดแวร์ที่กำหนดค่าให้ทำงานแบบอนุกรมกำลังสามารถคำนวณได้เฉพาะฟังก์ชันที่ออกแบบไว้เท่านั้น
ในทางกลับกัน เมื่อมีตัวคูณฮาร์ดแวร์ ( เช่นใน ไมโครโปรเซสเซอร์ DSP ) วิธีการค้นหาในตารางและอนุกรมกำลังโดยทั่วไปจะเร็วกว่า CORDIC ในช่วงไม่กี่ปีที่ผ่านมา อัลกอริทึม CORDIC ได้ถูกนำมาใช้อย่างกว้างขวางในแอปพลิเคชันทางการแพทย์ต่างๆ โดยเฉพาะอย่างยิ่งในการใช้งาน FPGA
ไมโครคอนโทรลเลอร์ตระกูล STM32G4 , STM32U5และSTM32H5 รวม ถึงบาง ตระกูล STM32H7ใช้โมดูล CORDIC เพื่อเร่งการคำนวณในแอปพลิเคชันสัญญาณผสมต่างๆ เช่น กราฟิกสำหรับอินเทอร์เฟซระหว่างมนุษย์กับเครื่องจักรและการควบคุมมอเตอร์แบบ Field Oriented Controlแม้ว่าจะไม่เร็วเท่ากับการประมาณค่าอนุกรมกำลัง แต่ CORDIC ก็เร็วกว่าการใช้งานแบบตารางการแทรกสอด เช่น ที่มีอยู่ในไลบรารีมาตรฐาน ARM CMSIS และ C [ 54 ]แม้ว่าผลลัพธ์อาจมีความแม่นยำน้อยลงเล็กน้อย เนื่องจากโมดูล CORDIC ที่ให้มานั้นมีความแม่นยำเพียง 20 บิตเท่านั้น ตัวอย่างเช่น ความแตกต่างของประสิทธิภาพส่วนใหญ่เมื่อเทียบกับการใช้งาน ARM นั้นเกิดจากค่าใช้จ่ายของอัลกอริทึมการแทรกสอด ซึ่งมีความแม่นยำแบบจุดลอยตัวเต็มรูปแบบ (24 บิต) และอาจทำให้เกิดข้อผิดพลาดสัมพัทธ์กับความแม่นยำนั้นได้[ 55 ]ข้อดีอีกประการหนึ่งคือ โมดูล CORDIC เป็นโคโปรเซสเซอร์และสามารถทำงานแบบขนานกับงาน CPU อื่นๆ ได้
ปัญหาของการใช้ชุดอนุกรมเทย์เลอร์คือ แม้ว่าจะให้ค่าความคลาดเคลื่อนสัมบูรณ์น้อย แต่ก็ไม่แสดงค่าความคลาดเคลื่อนสัมพัทธ์ที่ดี[ 56 ]วิธีการประมาณพหุนามอื่นๆ เช่น การเพิ่มประสิทธิภาพ แบบมินิแม็กซ์ อาจใช้เพื่อควบคุมความคลาดเคลื่อนทั้งสองประเภท
ซอฟต์แวร์
ระบบเก่าๆ หลายระบบที่มีซีพียูแบบจำนวนเต็มเท่านั้น ได้นำ CORDIC มาใช้งานในระดับต่างๆ กัน โดยเป็นส่วนหนึ่งของ ไลบรารี เลขทศนิยมของ IEEEเนื่องจากซีพียูอเนกประสงค์สมัยใหม่ส่วนใหญ่มีรีจิสเตอร์เลขทศนิยมที่มีการดำเนินการทั่วไป เช่น การบวก การลบ การคูณ การหาร ไซน์ โคไซน์ รากที่สอง ล็อก10และล็อกธรรมชาติ จึงแทบไม่มีความจำเป็นต้องนำ CORDIC มาใช้งานด้วยซอฟต์แวร์ มีเพียงไมโครคอนโทรลเลอร์ หรือแอปพลิเคชันซอฟต์แวร์พิเศษที่ต้องการความปลอดภัยและข้อจำกัดด้านเวลาเท่านั้นที่จะต้องพิจารณาใช้ CORDIC
โหมดการทำงาน
โหมดการหมุน
CORDIC สามารถใช้คำนวณฟังก์ชันต่างๆ ได้หลายฟังก์ชัน คำอธิบายนี้แสดงวิธีการใช้ CORDIC ในโหมดการหมุนเพื่อคำนวณค่าไซน์และโคไซน์ของมุม โดยสมมติว่ามุมที่ต้องการระบุเป็นเรเดียน และแสดงในรูปแบบจุดคงที่ ในการหาค่าไซน์หรือโคไซน์ ของมุม ต้องหา พิกัดyหรือxของจุดบนวงกลมหน่วยที่สอดคล้องกับมุมที่ต้องการ ในการใช้ CORDIC เราจะเริ่มต้นด้วยเวกเตอร์:

ในการวนซ้ำครั้งแรก เวกเตอร์นี้จะถูกหมุนทวนเข็มนาฬิกา 45° เพื่อให้ได้เวกเตอร์ การวนซ้ำครั้งต่อๆ ไปจะหมุนเวกเตอร์ไปในทิศทางใดทิศทางหนึ่งโดยลดขนาดลงเรื่อย ๆ จนกว่าจะได้มุมที่ต้องการ มุมในแต่ละขั้นตอนคือสำหรับ
กล่าวอย่างเป็นทางการมากขึ้น ในแต่ละรอบการคำนวณจะมีการหมุนเกิดขึ้น ซึ่งทำได้โดยการคูณเวกเตอร์กับเมทริกซ์การหมุน :
เมทริกซ์การหมุนกำหนดโดย
โดยใช้เอกลักษณ์ตรีโกณมิติ :
สามารถดึงค่าโคไซน์ออกมาได้ดังนี้:
ดังนั้น สูตรสำหรับเวกเตอร์ที่หมุนแล้วจึงเป็นดังนี้:
โดยที่และคือส่วนประกอบของการกำหนดมุมสำหรับการวนซ้ำแต่ละครั้งเพื่อให้ยังคงได้อนุกรมที่ลู่เข้าสู่ค่าเอาต์พุตที่เป็นไปได้ทุกค่า ดังนั้นการคูณด้วยแทนเจนต์จึงสามารถแทนที่ด้วยการหารด้วยกำลังของสอง ซึ่งทำได้อย่างมีประสิทธิภาพในฮาร์ดแวร์คอมพิวเตอร์ดิจิทัลโดยใช้การเลื่อนบิตนิพจน์จึงกลายเป็น:
ซึ่งเป็นตัวกำหนดทิศทางการหมุน ถ้ามุมการหมุนเป็นบวก ค่าจะเป็น +1 มิฉะนั้นค่าจะเป็น −1
สามารถใช้เอกลักษณ์ตรีโกณมิติต่อไปนี้แทนค่าโคไซน์ได้:
- ,
โดยกำหนดตัวคูณนี้สำหรับแต่ละรอบ:
จากนั้นจึงสามารถนำปัจจัย เหล่านั้นออกจากกระบวนการวนซ้ำและนำไปใช้ทั้งหมดในครั้งเดียวในภายหลังโดยใช้ตัวคูณปรับขนาด:
ซึ่งคำนวณล่วงหน้าและเก็บไว้ในตารางหรือเป็นค่าคงที่เดียว หากจำนวนรอบการทำซ้ำคงที่ การแก้ไขนี้สามารถทำได้ล่วงหน้าเช่นกัน โดยการปรับขนาดและประหยัดการคูณ นอกจากนี้ ยังสามารถสังเกตได้ว่า[ 43 ]
เพื่อให้สามารถลดความซับซ้อนของอัลกอริทึมลงได้อีก แอปพลิเคชันบางอย่างอาจหลีกเลี่ยงการแก้ไขโดยสิ้นเชิง ส่งผลให้ได้ประสิทธิภาพการประมวลผลเพิ่มขึ้น: [ 57 ]
หลังจากจำนวนรอบการคำนวณที่เพียงพอ มุมของเวกเตอร์จะเข้าใกล้ค่ามุมที่ต้องการสำหรับการใช้งานทั่วไปส่วนใหญ่ การทำซ้ำ 40 ครั้ง ( n = 40) ก็เพียงพอที่จะได้ผลลัพธ์ที่ถูกต้องถึงทศนิยมตำแหน่งที่ 10
ขั้นตอนเดียวที่เหลืออยู่คือการพิจารณาว่าการหมุนควรเป็นตามเข็มนาฬิกาหรือทวนเข็มนาฬิกาในแต่ละรอบ (โดยการเลือกค่าของ) ทำได้โดยการติดตามว่ามุมหมุนไปเท่าใดในแต่ละรอบ แล้วลบค่าที่ได้ออกจากมุมที่ต้องการ จากนั้นเพื่อให้ได้มุมที่ใกล้เคียงกับมุมที่ต้องการมากขึ้นถ้ามีค่าเป็นบวก การหมุนจะเป็นตามเข็มนาฬิกา มิฉะนั้นถ้าเป็นลบ การหมุนจะเป็นทวนเข็มนาฬิกา:
ค่าของจะต้องคำนวณและจัดเก็บไว้ล่วงหน้าด้วย สำหรับมุมเล็กๆ สามารถประมาณค่าด้วยเพื่อลดขนาดตารางได้
ดังที่แสดงในภาพประกอบด้านบน ค่าไซน์ของมุมจะเป็น พิกัด yของเวกเตอร์สุดท้ายในขณะที่ค่าโคไซน์จะเป็นพิกัด x
โหมดเวกเตอร์
อัลกอริทึมโหมดการหมุนที่อธิบายไว้ข้างต้นสามารถหมุนเวกเตอร์ใดๆ (ไม่เฉพาะเวกเตอร์หน่วยที่วางตัวตาม แกน xเท่านั้น) ด้วยมุมระหว่าง −90° ถึง +90° การตัดสินใจเกี่ยวกับทิศทางการหมุนขึ้นอยู่กับค่าบวกหรือลบ
โหมดการทำงานแบบเวกเตอร์ต้องมีการปรับเปลี่ยนอัลกอริธึมเล็กน้อย โดยเริ่มต้นด้วยเวกเตอร์ที่มี พิกัด xเป็นบวก ในขณะที่ พิกัด yเป็นค่าใดๆ การหมุนต่อเนื่องกันมีเป้าหมายเพื่อหมุนเวกเตอร์ให้เข้าหา แกน x (และลด พิกัด yให้เป็นศูนย์) ในแต่ละขั้นตอน ค่าของyจะกำหนดทิศทางการหมุน ค่าสุดท้ายของ y จะมีค่าเท่ากับมุมการหมุนทั้งหมด ค่าสุดท้ายของxจะเป็นขนาดของเวกเตอร์เดิมที่ปรับสเกลด้วยKดังนั้น การใช้งานที่เห็นได้ชัดของโหมดเวกเตอร์คือการแปลงจากพิกัดสี่เหลี่ยมเป็นพิกัดเชิงขั้ว
การดำเนินการ
ใน Java คลาส Math มีscalb(double x, int scale)เมธอดสำหรับทำการเลื่อนดังกล่าว[ 58 ] C มีฟังก์ชันldexp [ 59 ]และโปรเซสเซอร์คลาส x86 มีfscaleการดำเนินการจุดลอยตัว[ 60 ]
ตัวอย่างซอฟต์แวร์ (Python)
จากโมดูล math นำเข้าatan2 , sqrt , sin , cos , radiansITERS = 16theta_table = [ atan2 ( 1 , 2 ** i ) for i in range ( ITERS )]def compute_K ( n ):""" คำนวณ K(n) สำหรับ n = ITERS นอกจากนี้ยังสามารถเขียนได้ดังนี้ จัดเก็บเป็นค่าคงที่แบบระบุชัดเจน หากค่า ITERS ด้านบนถูกกำหนดไว้แล้ว """k = 1.0สำหรับi ในช่วง( n ):k *= 1 / sqrt ( 1 + 2 ** ( - 2 * i ))ส่งคืนkdef cordic ( alpha : float , n : int ) -> tuple [ float , float ]:ยืนยันว่าn <= ITERSK_n = คำนวณ K ( n )ธีตา= 0.0x = 1.0y = 0.0P2i = 1 # ค่านี้จะเป็น 2**(-i) ในลูปด้านล่างสำหรับarc_tangent ในtheta_table [: n ]:ซิกมา= + 1 ถ้าทีต้า< อัลฟามิฉะนั้น- 1ทีต้า+= ซิกมา* อาร์คแทงเจนต์x , y = x - ซิกมา* y * P2i , ซิกมา* P2i * x + yP2i /= 2ส่งคืนค่าx * K_n , y * K_nถ้า__name__ == "__main__" :# พิมพ์ตารางค่าไซน์และโคไซน์ที่คำนวณได้ ตั้งแต่ -90° ถึง +90° โดยเพิ่มขึ้นทีละ 15°# เปรียบเทียบกับรูทีนทางคณิตศาสตร์ที่มีอยู่พิมพ์( " x sin(x) diff. sine cos(x) diff. cosine " )สำหรับx ในช่วง( - 90 , 91 , 15 ):cos_x , sin_x = cordic ( เรเดียน( x ), ITERS )พิมพ์(f " { x : +05.1f } ° { sin_x : +.8f } ( { sin_x - sin ( เรเดียน( x )) : +.8f } ) { cos_x : +.8f } ( { cos_x - cos ( เรเดียน( x )) : +.8f } )")เอาต์พุต
$ python cordic.py x sin(x) diff. sine cos(x) diff. โคไซน์-90.0° -1.00000000 (+0.00000000) -0.00001759 (-0.00001759) -75.0° -0.96592181 (+0.00000402) +0.25883404 (+0.00001499) -60.0° -0.86601812 (+0.00000729) +0.50001262 (+0.00001262) -45.0° -0.70711776 (-0.00001098) +0.70709580 (-0.00001098) -30.0° -0.50001262 (-0.00001262) +0.86601812 (-0.00000729) -15.0° -0.25883404 (-0.00001499) +0.96592181 (-0.00000402) +00.0° +0.00001759 (+0.00001759) +1.00000000 (-0.00000000) +15.0° +0.25883404 (+0.00001499) +0.96592181 (-0.00000402) +30.0° +0.50001262 (+0.00001262) +0.86601812 (-0.00000729) +45.0° +0.70709580 (-0.00001098) +0.70711776 (+0.00001098) +60.0° +0.86601812 (-0.00000729) +0.50001262 (+0.00001262) +75.0° +0.96592181 (-0.00000402) +0.25883404 (+0.00001499) +90.0° +1.00000000 (-0.00000000) -0.00001759 (-0.00001759)ตัวอย่างฮาร์ดแวร์
จำนวนเกตตรรกะสำหรับการสร้างวงจร CORDIC นั้นใกล้เคียงกับจำนวนเกตตรรกะที่จำเป็นสำหรับตัวคูณ เนื่องจากทั้งสองอย่างต้องใช้การเลื่อนบิตและการบวกผสมกัน การเลือกใช้ตัวคูณหรือวงจร CORDIC นั้นขึ้นอยู่กับบริบท ตัวอย่างเช่น การคูณจำนวนเชิงซ้อนสองจำนวนที่แสดงด้วยส่วนจริงและส่วนจินตนาการ (พิกัดสี่เหลี่ยม) ต้องใช้การคูณ 4 ครั้ง แต่สามารถทำได้โดยใช้ CORDIC เพียงตัวเดียวที่ทำงานกับจำนวนเชิงซ้อนที่แสดงด้วยพิกัดเชิงขั้ว โดยเฉพาะอย่างยิ่งหากขนาดของตัวเลขไม่สำคัญ (การคูณเวกเตอร์เชิงซ้อนกับเวกเตอร์บนวงกลมหน่วยนั้นเทียบเท่ากับการหมุน) วงจร CORDIC มักใช้ในวงจรสำหรับการสื่อสารโทรคมนาคม เช่นตัวแปลงสัญญาณดิจิทัลลง (digital down converter )
การวนซ้ำสองครั้ง CORDIC
ในเอกสารสองฉบับของ Vladimir Baykov [ 61 ] [ 62 ]ได้เสนอให้ใช้ วิธี การวนซ้ำสองครั้งสำหรับการใช้งานฟังก์ชันต่างๆ เช่น arcsine, arccosine, ลอการิทึมธรรมชาติ, ฟังก์ชันเลขชี้กำลัง รวมถึงการคำนวณฟังก์ชันไฮเปอร์โบลิก วิธีการวนซ้ำสองครั้งนั้นแตกต่างจากวิธีการ CORDIC แบบคลาสสิกตรงที่ค่าขั้นตอนการวนซ้ำจะเปลี่ยนแปลงทุกครั้ง กล่าวคือในแต่ละรอบการวนซ้ำ แต่ในวิธีการวนซ้ำสองครั้ง ค่าขั้นตอนการวนซ้ำจะถูกทำซ้ำสองครั้งและเปลี่ยนแปลงเพียงครั้งเดียวเท่านั้น ในขณะเดียวกัน เมื่อค่าของ i ไม่เปลี่ยนแปลง เครื่องหมาย (ทิศทาง) ของการวนซ้ำ กล่าวคือ + หรือ - (ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา) จะขึ้นอยู่กับเครื่องหมายของตัวแปรที่ลดลงเหลือศูนย์ ดังนั้นจึงมีการกำหนดตัวบ่งชี้ระดับสำหรับการวนซ้ำสองครั้งว่า. ในขณะที่การวนซ้ำแบบธรรมดา: . วิธีการวนซ้ำสองครั้งรับประกันการลู่เข้าของวิธีการตลอดช่วงการเปลี่ยนแปลงอาร์กิวเมนต์ที่ถูกต้อง
การสรุปปัญหาการลู่เข้าของ CORDIC สำหรับระบบตัวเลขตำแหน่งใดๆ ที่มีฐานแสดงให้เห็น[ 63 ]ว่าสำหรับฟังก์ชันไซน์ โคไซน์ และอาร์คแทงเจนต์ เพียงพอที่จะทำการวนซ้ำสำหรับแต่ละค่าของ i (i = 0 หรือ 1 ถึง n โดยที่ n คือจำนวนหลัก) กล่าวคือสำหรับแต่ละหลักของผลลัพธ์ สำหรับลอการิทึมธรรมชาติ เลขชี้กำลัง ไซน์ไฮเปอร์โบลิก โคไซน์ และอาร์คแทงเจนต์ ควรทำการวนซ้ำสำหรับแต่ละค่า สำหรับฟังก์ชันอาร์คไซน์และอาร์คโคไซน์ ควรทำการวนซ้ำสอง ครั้งสำหรับแต่ละหลักของตัวเลข กล่าวคือสำหรับแต่ละค่า ของ[ 63 ]
สำหรับฟังก์ชันผกผันของไฮเปอร์โบลิกไซน์และอาร์โคไซน์ จำนวนการวนซ้ำจะเป็นสำหรับแต่ละค่านั่นคือสำหรับแต่ละหลักของผลลัพธ์
อัลกอริทึมที่เกี่ยวข้อง
CORDIC เป็นส่วนหนึ่งของกลุ่มอัลกอริทึมแบบ "เลื่อนและบวก"เช่นเดียวกับอัลกอริทึมลอการิทึมและเลขชี้กำลังที่ได้มาจากงานของเฮนรี บริกส์ อัลกอริทึมแบบเลื่อนและบวกอีกตัวหนึ่งที่สามารถใช้คำนวณฟังก์ชันพื้นฐานหลายอย่างได้คืออัลกอริทึม BKMซึ่งเป็นการขยายอัลกอริทึมลอการิทึมและเลขชี้กำลังไปยังระนาบเชิงซ้อน ตัวอย่างเช่น BKM สามารถใช้คำนวณค่าไซน์และโคไซน์ของมุมจริง(ในหน่วยเรเดียน) โดยการคำนวณเลขชี้กำลังของซึ่งก็คือ อัลก อริทึม BKM มีความซับซ้อนกว่า CORDIC เล็กน้อย แต่มีข้อดีคือไม่จำเป็นต้องใช้ตัวประกอบการปรับขนาด ( K )
ดูเพิ่มเติม
- วิธีการคำนวณรากที่สอง
- อีไออี 754
- หน่วยประมวลผลจุดลอยตัว
- วงจรดิจิทัล/CORDICใน Wikibooks
อ่านเพิ่มเติม
- Parini, Joseph A. (5 กันยายน 1966). "DIVIC ให้คำตอบสำหรับคำถามการนำทางที่ซับซ้อน" อิเล็กทรอนิกส์ : 105– 111. ISSN 0013-5070 .(หมายเหตุ: DIVICย่อมาจากDigital Variable Increments Computerบางแหล่งข้อมูลระบุผิดพลาดว่าเป็นผลงานของJM Parini )
- Anderson, Stanley F.; Earle, John G.; Goldschmidt, Robert Elliott; Powers, Don M. (1 พฤศจิกายน 1965). "หน่วยประมวลผลจุดลอยตัวของ IBM System/360 รุ่น 91" (PDF) . วารสารวิจัยและพัฒนาของ IBM . 11 (1). ริเวอร์ตัน, นิวเจอร์ซีย์, สหรัฐอเมริกา (เผยแพร่ มกราคม 1967): 34– 53. doi : 10.1147/rd.111.0034 . เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 5 มีนาคม 2016. สืบค้นเมื่อ2 มกราคม 2016 .
- Liccardo, Michael A. (กันยายน 1968). โปรเซสเซอร์เชื่อมต่อที่เน้นการทำงานในโหมด CORDIC (วิทยานิพนธ์ปริญญาโท). เบิร์กลีย์, แคลิฟอร์เนีย, สหรัฐอเมริกา: มหาวิทยาลัยแคลิฟอร์เนีย เบิร์กลีย์ , ภาควิชาวิศวกรรมไฟฟ้า. OCLC 500565168 .
- สิทธิบัตรของสหรัฐอเมริกา 3576983A , Cochran, David S., "ระบบเครื่องคิดเลขดิจิทัลสำหรับการคำนวณรากที่สอง", เผยแพร่เมื่อ 1971-05-04, ออกให้เมื่อ 1971-05-04, มอบให้แก่Hewlett-Packard Co. ( [14] )
- Chen, Tien Chi (กรกฎาคม 2515). "การคำนวณเลขยกกำลัง ลอการิทึม อัตราส่วน และรากที่สองโดยอัตโนมัติ" (PDF) . IBM Journal of Research and Development . 16 (4): 380– 388. doi : 10.1147/rd.164.0380 . ISSN 0018-8646 . เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2016-08-12 . สืบค้นเมื่อ2016-01-02 .
- Egbert, William E. (พฤษภาคม 1977). "อัลกอริทึมเครื่องคิดเลขส่วนบุคคล I: รากที่สอง" (PDF) . วารสาร Hewlett-Packard . 28 (9). พาโลอัลโต รัฐแคลิฟอร์เนีย สหรัฐอเมริกา: Hewlett-Packard : 22– 24. เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2015-12-18 . สืบค้นเมื่อ2016-01-02 .( [15] )
- Egbert, William E. (มิถุนายน 1977). "อัลกอริทึมเครื่องคิดเลขส่วนบุคคล II: ฟังก์ชันตรีโกณมิติ" (PDF) . วารสาร Hewlett-Packard . 28 (10). พาโลอัลโต, แคลิฟอร์เนีย, สหรัฐอเมริกา: Hewlett-Packard : 17– 20. เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2016-03-04 . สืบค้นเมื่อ2016-01-02 .( [16] )
- Egbert, William E. (พฤศจิกายน 1977). "อัลกอริทึมเครื่องคิดเลขส่วนบุคคล III: ฟังก์ชันตรีโกณมิติผกผัน" (PDF) . วารสาร Hewlett-Packard . 29 (3). พาโลอัลโต รัฐแคลิฟอร์เนีย สหรัฐอเมริกา: Hewlett-Packard : 22– 23. เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2016-03-04 . สืบค้นเมื่อ2016-01-02 .( [17] )
- Egbert, William E. (เมษายน 1978). "อัลกอริทึมเครื่องคิดเลขส่วนบุคคล IV: ฟังก์ชันลอการิทึม" (PDF) . วารสาร Hewlett-Packard . 29 (8). พาโลอัลโต, แคลิฟอร์เนีย, สหรัฐอเมริกา: Hewlett-Packard : 29– 32. เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2016-03-04 . สืบค้นเมื่อ2016-01-02 .( [18] )
- Senzig, Don (1975). "Calculator Algorithms". IEEE Compcon Reader Digest . IEEE : 139– 141. IEEE Catalog No. 75 CH 0920-9C.
- บายคอฟ, วลาดิมีร์ ดี. (1972),Вопросы исследования вычисления элементарных функций по методу «цифра за цифрой»[ ปัญหาการประเมินค่าฟังก์ชันพื้นฐานโดยใช้เทคนิคการคำนวณทีละหลัก (CORDIC) ] (วิทยานิพนธ์ปริญญาเอก) (ภาษารัสเซีย) มหาวิทยาลัยวิศวกรรมไฟฟ้าแห่งรัฐเลนินกราด
- เบย์คอฟ, วลาดิมีร์ ดี.; สโมลอฟ, วลาดิมีร์ บี. (1975) Apparturnaja realizatsija elementarnikh funktsij กับ CVMАпаратурная реализация элементарных функций в цВМ[ การนำฟังก์ชันพื้นฐานไปใช้ในฮาร์ดแวร์ของคอมพิวเตอร์ ] (เป็นภาษารัสเซีย) มหาวิทยาลัยแห่งรัฐเลนินกราด เก็บถาวรจากต้นฉบับเมื่อ 2 มีนาคม 2019 เรียกดูเมื่อ2 มีนาคม 2019
- เบย์คอฟ, วลาดิมีร์ ดี.; เซลจูติน, SA (1982) Вычисление элементарных функций в ЭКВМ.[ การประเมินฟังก์ชันเบื้องต้นในไมโครเครื่องคิดเลข ] (ภาษารัสเซีย) มอสโก: Radio i svjaz (Радио и связь)
- เบย์คอฟ, วลาดิมีร์ ดี.; สโมลอฟ, วลาดิมีร์ บี. (1985)Специализированные процессоры: иterационные alгоритмы и структуры[ โปรเซสเซอร์วัตถุประสงค์พิเศษ: อัลกอริธึมและโครงสร้างซ้ำ ] (ในภาษารัสเซีย) มอสโก: Radio i svjaz (Радио и связь)
- Coppens, Thomas, บรรณาธิการ (มกราคม 1980). "ค่าคงที่ CORDIC ใน ROM TI 58/59". จดหมายข่าว Texas Instruments Software Exchange . 2 (2). Kapellen, เบลเยียม: TISOFT.
- Coppens, Thomas, บรรณาธิการ (เมษายน–มิถุนายน 1980). "แผนการคำนวณลอการิทึมธรรมชาติ / แผนการคำนวณ e x / แผนการคำนวณ 1/x". จดหมายข่าว Texas Instruments Software Exchange . 2 (3). Kapellen, เบลเยียม: TISOFT.(เกี่ยวกับ CORDIC ในTI-58 / TI-59 )
- ทีมผลิตภัณฑ์กราฟิก TI (1995) [1993]. "อัลกอริทึมฟังก์ชันทรานสเซนเดนทัล"ดัลลัส รัฐเท็กซัส สหรัฐอเมริกา: Texas Instruments , ผลิตภัณฑ์สำหรับผู้บริโภคเก็บถาวรจากต้นฉบับเมื่อ 2016-03-17 สืบค้นเมื่อ2019-03-02
- ยอร์เก้, กุนเตอร์; แลมเป้, แบร์นฮาร์ด; เวนเกล, นอร์เบิร์ต (1989) Arithmetische Algorithmen der Mikrorechentechnik (ภาษาเยอรมัน) (ฉบับแก้ไขครั้งที่ 1) เบอร์ลิน เยอรมนี: VEB Verlag Technik หน้า 219, 261, 271– 296. ISBN 3341005153EAN 9783341005156 . MPN 5539165. ใบอนุญาต 201.370/4/89 . เรียกดูเมื่อ2015-12-01 .
- เซคไมสเตอร์, ม. (2021) "การแก้สมการของเค ปเลอร์ด้วยการวนซ้ำสองครั้งแบบ CORDIC" ประกาศรายเดือนของ Royal Astronomical Society 500 (1) เกิตทิงเก นเยอรมนี: Institut für Astrophysik, Georg-August-Universität: 109– 117. arXiv : 2008.02894ดอย : 10.1093/mnras/staa2441 .
- เฟรคกิ้ง, มาร์วิน อี. (1994). การประมวลผลสัญญาณดิจิทัลในระบบสื่อสาร (ฉบับที่ 1)
- Kantabutra, Vitit (1996). "เกี่ยวกับฮาร์ดแวร์สำหรับการคำนวณฟังก์ชันเลขชี้กำลังและตรีโกณมิติ". IEEE Transactions on Computers . 45 (3): 328– 339. Bibcode : 1996ITCmp..45..328K . doi : 10.1109/12.485571 .
- Johansson, Kenny (2008). "6.5 ฟังก์ชันไซน์และโคไซน์" การคำนวณแบบ Shift-and-Add ที่ใช้พลังงานต่ำและมีความซับซ้อนต่ำ (PDF) (วิทยานิพนธ์). การศึกษาด้านวิทยาศาสตร์และเทคโนโลยีแห่งลิงเคอปิง (ฉบับที่ 1). ลิงเคอปิง ประเทศสวีเดน: ภาควิชาวิศวกรรมไฟฟ้ามหาวิทยาลัยลิงเคอปิง หน้า 244–250 . ISBN 978-91-7393-836-5ISSN 0345-7524 ฉบับ ที่ 1201 เก็บถาวร(PDF)จากต้นฉบับเมื่อ 13 สิงหาคม 2017 เรียกดูเมื่อ23 สิงหาคม 2021(x+268 หน้า)
- Banerjee, Ayan (2001). "การสร้างโปรเซสเซอร์ FFT ที่ใช้ CORDIC บน FPGA สำหรับการประมวลผลสัญญาณชีวการแพทย์" ไมโครโปรเซสเซอร์และไมโครซิสเต็ม 25 ( 3). คารากปุระ, เวสต์เบงกอล, อินเดีย: 131– 142. doi : 10.1016/S0141-9331(01)00106-5 .
- Kahan, William Morton (2002-05-20). "อัลกอริทึมการหารเทียมสำหรับลอการิทึมและเลขชี้กำลังแบบจุดลอยตัว" (PDF) . เบิร์กลีย์, แคลิฟอร์เนีย, สหรัฐอเมริกา: มหาวิทยาลัยแคลิฟอร์เนีย . เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2015-12-25 . เรียกดูเมื่อ2016-01-15 .
- ค็อกครัม, คริส เค. (ฤดูใบไม้ร่วง 2551). "การนำอัลกอริทึม CORDIC ไปใช้ในตัวแปลงสัญญาณดิจิทัลลงความถี่" (PDF )
- Lakshmi, Boppana; Dhar, Anindya Sundar (6 ตุลาคม 2552). "สถาปัตยกรรม CORDIC: การสำรวจ" . การออกแบบ VLSI . 2010 . คารากปุระ, รัฐเวสต์เบงกอล, อินเดีย: ภาควิชาวิศวกรรมอิเล็กทรอนิกส์และการสื่อสารไฟฟ้า, สถาบันเทคโนโลยีแห่งอินเดีย (เผยแพร่ 10 ตุลาคม 2553): 1– 19. doi : 10.1155/2010/794891 . 794891.
- Savard, John JG (2018) [2006]. "เทคนิคเลขคณิตขั้นสูง" . quadibloc . เก็บถาวรจากต้นฉบับเมื่อ 2018-07-03 . สืบค้นเมื่อ 2018-07-16 .
ลิงก์ภายนอก
- Wang, Shaoyun (กรกฎาคม 2011), เว็บไซต์บรรณานุกรม CORDIC , เก็บถาวรจากต้นฉบับเมื่อ 17 ตุลาคม 2000 – ผ่านทาง Chandra ภาควิชาวิศวกรรมไฟฟ้าและคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ Cockrell มหาวิทยาลัยเท็กซัส ออสติน
- ซอฟต์แวร์ CORDIC IP (โค้ด Verilog HDL)
- เว็บไซต์บรรณานุกรม CORDIC
- การใช้งานคณิตศาสตร์ CORDIC สำหรับแสตมป์พื้นฐาน
- การใช้งาน CORDIC ในภาษา Verilog
- การกำหนดเวกเตอร์ CORDIC ด้วยค่าเป้าหมายที่กำหนดเอง
- การใช้งาน CORDIC ในภาษา Python ถูกเก็บถาวรไว้เมื่อวันที่ 17 มีนาคม 2017 ที่Wayback Machine
- โค้ด C อย่างง่ายสำหรับ CORDIC แบบจุดคงที่
- บทช่วยสอนและตัวอย่างการใช้งาน MATLAB – การใช้ CORDIC เพื่อประมาณค่าเฟสของจำนวนเชิงซ้อน (archive.org)
- คำอธิบายฮาร์ดแวร์ CORDIC ใน Arx พร้อมด้วย testbench ในภาษา C++ และ VHDL
- บทนำเกี่ยวกับอัลกอริทึม CORDIC
- การนำอัลกอริทึม CORDIC ไปใช้ในตัวแปลงสัญญาณดิจิทัลลดความถี่
- การนำอัลกอริทึม CORDIC ไปใช้งาน: โค้ด C แบบจุดคงที่สำหรับฟังก์ชันตรีโกณมิติและไฮเปอร์โบลิกโค้ดC สำหรับการทดสอบและการตรวจสอบประสิทธิภาพ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ คอร์ดิค
CORDIC ซึ่งย่อมาจาก Coordinate Rotation Digital Computer เป็น อัลกอริทึมที่ เรียบง่ายและมีประสิทธิภาพในการคำนวณ ฟังก์ชันตรีโกณมิติ ฟังก์ชัน ไฮ เปอร์ โบลิก รากที่สอง การคูณ การ...
แนวคิด
โดยสรุปแล้ว อัลกอริทึม CORDIC พื้นฐานเกี่ยวข้องกับการใช้การหมุนแบบปรับขนาดกับเวกเตอร์ ค่าตัวคูณขนาดและมุมการหมุนเป็นที่ทราบล่วงหน้า มีเพียงทิศทางการหมุนแต่ละครั้งเท่านั้นที่ขึ้นอยู่กับอินพุต ในโหมดการหมุน มุมการหมุนเป้าหมายจะถูกใช้เป็นอินพุต...
ประวัติศาสตร์
เทคนิคทางคณิตศาสตร์ที่คล้ายกันนี้ได้รับการตีพิมพ์โดย Henry Briggs ตั้งแต่ปี 1624 [ 7 ] [ 8 ] และ Robert Flower ในปี 1771 [ 9 ] แต่ CORDIC ได้รับการปรับให้เหมาะสมยิ่งขึ้นสำหรับ CPU สถานะจำกัดที่มีความซับซ้อนต่ำ
แอปพลิเคชัน
CORDIC ใช้การดำเนินการเลื่อนบวกแบบง่ายสำหรับงานคำนวณหลายอย่าง เช่น การคำนวณฟังก์ชันตรีโกณมิติ ไฮเปอร์โบลิก และลอการิทึม การคูณจำนวนจริงและจำนวนเชิงซ้อน การหาร การคำนวณรากที่สอง การแก้ระบบสมการเชิงเส้น การประมาณ ค่าลักษณะเฉพาะ การแยกส่วนค่าเอกลักษณ์ การแยก...