แนะนํา

โพรเซสแบบดิจิทัล (DPP) เป็นแกนหลักของระบบสมัยใหม่ เปิดใช้งานเสียง, วีดีโอ, การสื่อสารแบบเรียลไทม์, และปฏิบัติการสื่อสารแบบเรียลไทม์ได้จริง การเขียนรหัส C สําหรับงานที่มี ประสิทธิภาพสําหรับระบบส่งผลกระทบโดยตรงต่อระบบผ่านระบบ entering, การใช้พลังงาน, และความเร็วต่ํา ต่างกับรหัสทั่วไปของ DPS อัลกอริทึมจะต้องดําเนินการภายในเวลาที่เข้มงวดที่สุด ในขณะที่มีการจํากัดการใช้งานหน่วยความจําและประมวลผลอย่างเข้มงวด ทิศทางนี้ จะขยายการใช้งานหลัก และทําการใช้เทคนิคการประมวลผลของโปรแกรมที่มีประสิทธิภาพสําหรับโปรแกรมที่ผลิตได้ สําหรับโปรแกรมที่เติมข้อมูลแบบดีพีเอสพีเอส, จากการกําหนดค่าต่าง ๆ ที่คงที่มาจนถึงการจัดองค์ประกอบฮาร์ดแวร์

การ เข้าใจ พื้น ฐาน ของ DPP ใน C

DPP มีการดําเนินการทางคณิตศาสตร์ เช่น การกรอง, การแปรรูป, การสังเคราะห์สัญญาณ, และการวิเคราะห์สเปกตรัมบนสัญญาณตัวอย่าง

คุณลักษณะสําคัญของรหัส DPP:

  • [FLT: 0]. สืบค้นใหม่: วนรอบด้วยเครื่องหมายคูณ-dadd แกน (E.g., FIR ตัวกรอง).
  • [FLT: 0] เงื่อนไขเรียลไทม์: แต่ละตัวอย่างต้องดําเนินการภายในระยะเวลาตัวอย่าง
  • [FLT: 0] Data rooting: การนําเข้า/การออกเสียงอย่างต่อเนื่อง ต้องการการบัฟเฟอร์ที่มีประสิทธิภาพ และการคัดลอกน้อยที่สุด
  • [FLT: 0]. เมโมรีแบนด์วิดท์ ผูกพัน: อัลกอริทึม DPS จํานวนมากถูกจํากัดโดยวิธีที่ข้อมูลสามารถย้ายได้รวดเร็ว, ไม่ใช่จากการดําเนินการเลขคณิต

สําหรับอ้างอิงพื้นฐาน ดู [FLT: 0] อุปกรณ์ Analog 'DP เบสส์.

สี่เหลี่ยมด้านรูปด้านฟัน: พรีซิชันโดยไม่มีแผ่นฟลอริท-โพน์ท์

โพรเซสหลายตัวขาดฮาร์ดแวร์แบบลอย (FPUs) หรือมี FPUs ช้าลง. เลขคณิตความกว้างใช้ปฏิบัติการจํานวนเต็ม โดยมีจุดพิกัดโดยนัย คือ การแสดงผลแบบ detriminical [FTIF] การบริโภคพลังงานต่ํา. ส่วนมากคือ Q:[FLT: 0] m (FLT: 1/0]. [FT: 2t: 3] โดย [FT] [FT] ⁇ (FTT] imet [FT] [FT] [FTF] [FTF]]] party bits [FTIFLS] เป็นส่วนจํานวนเต็ม (FLOLTIFSIFS].

การเพิ่มความสามารถในปฏิบัติการแบบตรงต่อตรงใน C

การบวกจุดคงที่นั้นตรงไปตรงมา (ถ้าใส่จํานวนเต็มเข้าไป) แต่การคูณต้องใช้ค่า x ที่ปรับจุดไกล ๆ สําหรับค่าคูณ Q15 ผลคูณของ Q15 สองตัว ต้องได้ผลลัพธ์แบบกลาง 32 บิต จากนั้นคุณขวาเลื่อนไป 15 บิต เพื่อกลับไปที่ Q15 ตัวอย่าง:

typedef int16_t q15_t;
q15_t q15_mul(q15_t a, q15_t b) {
 int32_t temp = (int32_t)a * (int32_t)b;
 return (q15_t)(temp >> 15);
}

เมื่อการรวมภาพเกิดขึ้น (เช่น ในตัวกรอง), ป้องกันบิตการไหลของยาม ให้ใช้ฟังก์ชัน accultive หรือแม้กระทั่ง 64 บิต และซาตูรีต ผลห้องสมุดแบบ [FLT: 0] arm CMMPH-D (FLT: 1) การตั้งค่าฟังก์ชันคงที่รวมทั้งการแปลง, และการดําเนินการเมทริกซ์

เมื่อใช้กระดาษคํานวณสีความกว้างคงที่

โปรแกรมประมวลผลสมัยใหม่กับ FPUs (เช่น Cortex-M4/M7) สามารถประมวลผลได้โดยเร็วที่สุดเมื่อ:

  • ช่วงของ Algoritham แบบไดนามิคมีสูง (เช่น,, ตัวกรองการปรับตัว)
  • การรักษารหัสเป็นความสําคัญ (การวิเคราะห์การปรับขนาดแบบไร้ขีดเขียน)
  • ฮาร์ดแวร์ของ FPU ในปัจจุบัน และท่อส่งแก๊สสามารถทับกัน เพิ่มและเพิ่มจํานวนได้มากขึ้น

บนอุปกรณ์ที่ต้องใช้แรงงานสูงโดยไม่มี FPUs การตั้งค่าไว้คงมาตรฐานสําหรับโปรแกรมที่ไวต่อต้นทุน

ปรับแก้ค่าความจุหน่วยความจําให้กับ DPP

อัลกอริทึม DPP มักจะมีลําดับข้อมูลขนาดใหญ่ที่เรียงตามตัวอักษร แคชเชียร์เสียและแผงรถบัสสามารถฆ่าการแสดงได้

  • [FLT: 0]. เข้าถึงข้อมูลแบบก้าวผ่าน: การเดินขบวนลําดับแบบต่อเนื่อง (ส่วนหลักใน C). หลีกเลี่ยงการเข้าใช้แบบก้าวหน้า ยกเว้นว่าต้องใช้อัลกอริทึม (เช่น FFFT บิต-RELF).
  • [FLT: 0] การจัดวาง: เพื่อให้แน่ใจว่าอาร์เรย์จัดเรียงตามขอบเขตแคช-ไลน์ ใช้คุณสมบัติของคอมโพเนนท์เช่น [FLT: 1) หรือส่วนหน่วยความจําพิเศษ
  • [FLT: 0]. สืบค้น: ใช้บัฟเฟอร์คู่ซ้อนเพื่อทําการโอน DMA ซ้อนด้วยกระบวนการประมวลผล CPU ในขณะที่ CPU ทํางานบนบัฟเฟอร์หนึ่งบัฟเฟอร์ บล็อกตัวอย่างถัดไปจะถูกโหลด
  • [FLT: 0]. สืบค้นคําสําคัญ: ใช้ C99 บนตัวชี้เพื่อแจ้งให้ผู้รวบรวมทราบว่าตัวชี้ไม่ระบุชื่อ, เปิดใช้งานการตั้งศูนย์และจัดกําหนดการสอนที่ดีกว่า.

ตัวอย่างเช่น ฟังก์ชันตัวกรอง FIR เรียบง่าย ควรจะถูกเขียนด้วย 'จํากัด' เมื่อค่านําเข้าและค่าบัฟเฟอร์ที่ส่งออกมาแยก:

void fir_lowpass(const int16_t * restrict x, int16_t * restrict y,
 const int16_t * restrict coeffs, int len, int order) {
 for (int i = 0; i < len; i++) {
 int32_t acc = 0;
 for (int j = 0; j < order; j++) {
 acc += (int32_t)x[i + j] * coeffs[j];
 }
 y[i] = (int16_t)(acc >> 15);
 }
}

เลือกอัลกอริลและเติมน้ํา

ความซับซ้อนของอัลกอริธมิค โดยตรงในการแปลเวลาและอํานาจในการดําเนินการ เลือกอัลกอริทึมที่มีประสิทธิภาพมากที่สุดสําหรับงาน:

  • [FLT: 0] Fast Fourier Tread (FTT):[FLT: 1) ใช้ Cooley-Tukey Radix-2 หรือแบ่ง radix for change-fority-formal. หลีกเลี่ยง boomy DFTTIFT (N2). Prepte Twide gency and stredge in Rock.
  • [FLT: 0] ตัวกรอง FIR: ใช้โพลีเฟซย่อยสําหรับ bolicpulation/interpolation; ใช้ประโยชน์จากความสมมาตรสําหรับตัวกรองแบบเชิงเส้น-phace เพื่อเพิ่มจํานวนการคูณ (helve value).
  • [FLT: 0] กรอง: ใช้รูปแบบโดยตรง ITH แทนเสถียรภาพทางตัวเลขที่ดีกว่า ใช้ส่วนแบบ biquated (ลําดับที่ 2) เพื่อลดความไวต่อความเสมอภาคของสัมประสิทธิ์
  • [FLT: 0]COVOV: สําหรับลําดับยาวๆ ใช้วิธีทับซ้อนแบบ FFT หรือแบบทับซ้อน มากกว่าการ convolution โดยตรง

Reference [FLT: 0] ห้องสมุด FFTW [FLT: 1) สําหรับอ้างอิงเทคนิค FTF ปัจจุบัน (แม้จะไม่ใช่ใน C แต่หลักเกณฑ์ของหอนี้ก็ถูกคัดลอกอย่างกว้างขวางในไลบรารี DPP).

คุณสมบัติ ของ เครื่อง มือ ที่ ใช้ การ ได้: การ ใช้ เครื่อง มือซิม และ DP

เกือบทั้งหมดในปัจจุบันควบคุมไมโครรวม SyxD (การสอนหลาย ๆ ข้อมูล) หรือคําแนะนํา DPP enhanted ตัวอย่าง:

  • ARMCRex-M4/M7: SMD (SADD, SMUAAD เป็นต้น), การดําเนินการแบบเต็มขนาดและสัดส่วน (QADD, QSUB). ใช้ฟังก์ชัน CMMP ST ในภาควิชาชีพ (PDF).
  • TI C6000 DPP: 8 ยูนิตคูณ, MAC คู่ และ sportlining ซอฟต์แวร์ ไกด์ [FLT: 0] คู่มือ DEPPOPOPI ให้เทคนิครายละเอียด
  • ISC-V กับ P-extensions: แกนอนาคตจะมีคําสั่ง DP

เพื่อใช้คุณสมบัติเหล่านี้ใน C, เขียนโค้ดที่ตัวคอมไพล์สามารถกําหนดอัตโนมัติ (เช่น ห่วงแบบง่าย ๆ ที่ไม่มีการขึ้นต่อกัน) หรือใช้ฟังก์ชัน intristrenter แบบรวม (in) ตัวอย่าง โดยใช้ ARM CMMPPP สําหรับตัวกรอง FIR:

#include "arm_math.h"
arm_fir_instance_f32 S;
float32_t firState[128];
arm_fir_init_f32(&S, numTaps, coeffs, firState, blockSize);
arm_fir_f32(&S, input, output, blockSize);

ไลบรารีดังกล่าวถูกจัดการใช้งานด้วยมือ เพื่อแสดงผลงานสูงสุด โดยจะมีโพรไฟล์ก่อนและหลังการเปลี่ยนจากฟังก์ชัน C ไปเป็นฟังก์ชันของไลบรารี

ทิศทางการหมุน

เพราะอัลกอริทึมของ DPP คือ การวนวนวนวน, การจัดอันดับที่เหมาะสมในระดับลูป จ่ายเงินชดเชยได้มาก:

  • [FLT: 0] Loop un Rolling: ด้วยตนเอง หรือกับ pragmas (''#pragma Unling N') เพื่อลดวงลูปและเพิ่มระดับความคล้ายคลึงระหว่างครูกับระดับ
  • [FLT: 0]. software Plupleing: วงจรการจัดโครงสร้างเพื่อให้มีการย้ายรุ่นแบบหลาย ๆ ตัวพร้อมกัน. ผู้จัดจําหน่ายบางรายทํานี้โดยอัตโนมัติ; ใช้ as as uss-O3-O3-sign-gent สถาปัตยกรรม.
  • [FLT: 0]. reduces founding: ทดแทนเงื่อนไขด้วยเลขคณิต (เช่น min/max ใช้ Ternary), หรือใช้ตารางการค้นหาสําหรับฟังก์ชันที่ไม่ใช่เชิงเส้น (in/max).
  • [FLT: 0] ใช้ตัวแปรท้องถิ่น: เก็บข้อมูลเข้าบ่อย ๆ ในหน่วยความจําลงทะเบียน โดยประกาศตัวแปรภายในวงเวียน หรือใช้ 'คําใบ้'
  • [FLT: 0] การแบ่งประเภท: แทนการหารด้วยค่าคงที่ด้วยการคูณด้วยส่วนกลับ; ใช้การเลื่อนตําแหน่งยกกําลัง 2

ตารางการค้นหาและค่าคงที่

DPP หน้าที่ของฟังก์ชันเช่น ค่าตรีโกณมิติ, สัมประสิทธิ์, และค่าของ ทวิเดิ้ล ควรจะถูกใส่ค่าไว้ล่วงหน้าให้ว่าง และเก็บไว้เป็นลําดับคงที่ใน RM สําหรับค่าเริ่มต้นที่ไม่ได้ใช้ในแนวเวลา คุณสามารถคํานวณค่าเหล่านี้ได้หนึ่งครั้งและใช้ซ้ํา ตัวอย่าง: สําหรับค่าของค่าไซน์/โคเซนแต่ละขั้น จะเป็นการลดค่าเวลา และลดพลังงาน

Chelp Table (LUTs) ยังช่วยในการทําฟังก์ชันเช่น รากที่สอง, เลขชี้กําลัง, และล็อกที่ใช้ใน DP (เช่น ในการดําเนินการคําพูด) ใช้การไล่ระดับความต่อเนื่องระหว่างรายการตาราง เพื่อทําการแลกเปลี่ยนค่าความแม่นยําของหน่วยความจํา

การ ทํา ร้าย และ การ ทัก ท้วง

ไม่ มี การ ปรับ ปรุง ให้ สมบูรณ์ แบบ โดย ไม่ ต้อง วัด.

  • [FLT: 0]. สืบค้นข้อมูลถูกต้อง: ใช้ตัววัดวงจรบนเรือ (เช่น DWTCCCNT บนคอร์เท็กซ์-เอ็ม) เพื่อวัดระยะเวลาการทํางาน
  • [FLT: 0] การวิเคราะห์เชิงสถิติ: ตัวนับโปรแกรมตัวอย่าง (PDF) เพื่อดูว่าฟังก์ชันไหนใช้เวลา CPU
  • [FLT: 0]. การวิเคราะห์ข้อมูล: ใช้เครื่องมือในการติดตามการสูญหายแคช (ถ้ามี) และการทําธุรกรรมรถบัส
  • [FLT: 0] ตอบกลับ: เปิดรายงานการชดเชยที่เพียงพอ ('FOPT-in-Inpect-Vebook-Optipleized' ใน GCC) เพื่อดูว่ามีวงจรที่เชื่อมต่อได้หรือไม่

ทําซ้ํา: วัด, เปลี่ยน, วัดอีกครั้ง รายได้สูงสุดมาจากการปรับปรุงรูปแบบ การเข้าถึงหน่วยความจํา

สรุป: นํา มา ใช้ ด้วย กัน ทุก คน

การเขียนรหัส DPP ที่มีประสิทธิภาพใน C ต้องใช้วิธีแบบโฮลีสติก:

  • เลือกรูปแบบข้อมูลที่ถูกต้อง (เพิ่มจุด vsploat-point)
  • ออกแบบโครงสร้างข้อมูล เพื่อแยกการเข้าถึงและจัดตําแหน่ง
  • เลือกอัลกอริทึมที่มีความซับซ้อนต่ํา (FT, Polphace)
  • ใช้ไลบรารีผู้จําหน่าย DPP เมื่อมีการใช้งานอยู่
  • วงจรปิดและลดสาขา
  • ค่าคงที่ในรอม
  • โปรไฟล์อย่างไม่ลดละและให้ผู้รวบรวมช่วย

โดยการใช้หลักการเหล่านี้ นักพัฒนาสามารถประมวลผลสัญญาณผ่านระบบย่อยที่เทียบเท่ากับระบบย่อยย่อยแบบมือสอง ในขณะที่รักษาความจุและการรักษาความจุของซีได้ ผลที่ได้คือระบบ DP ที่เชื่อได้จริง ซึ่งตรงกับความต้องการผลิตภัณฑ์สมัยใหม่ -- จากเครื่องช่วยฟังถึงสถานีฐาน 5G