STM32F1 CMSIS DSP

  • 32 Replies
  • 719 Views
*

Offline tha

  • *****
  • 2950
    • View Profile
STM32F1 CMSIS DSP
« on: July 04, 2021, 07:28:44 am »
https://www.st.com/en/embedded-software/stm32cubef1.html

โหลดโปรแกรมมาแล้วดู CMSIS DSP ตามไฟล์นี้ครับ

file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/index.html

CMSIS DSP Software Library

Introduction

user manual นี้อธิบาย the CMSIS DSP software library, ซึ่งเป็นชุดของ common signal processing functions สำหรับใช้กับ Cortex-M processor based devices.

The library ถูกแบ่งออกเป็นจำนวนหนึ่งของ functions ซึ่งแต่ละครอบคลุมหมวดหมู่เฉพาะ :

•   Basic math functions
•   Fast math functions
•   Complex math functions
•   Filters
•   Matrix functions
•   Transforms
•   Motor control functions
•   Statistical functions
•   Support functions
•   Interpolation functions

The library มีฟั่งชั่นที่แยกกันสำหรับการทำงานบน 8-bit integers, 16-bit integers, 32-bit integer and 32-bit floating-point values.

Using the Library

The library installer บรรจุ prebuilt versions ของ the libraries ใน the Lib folder.

•    arm_cortexM7lfdp_math.lib (Cortex-M7, Little endian, Double Precision Floating Point Unit)
•    arm_cortexM7bfdp_math.lib (Cortex-M7, Big endian, Double Precision Floating Point Unit)
•    arm_cortexM7lfsp_math.lib (Cortex-M7, Little endian, Single Precision Floating Point Unit)
•    arm_cortexM7bfsp_math.lib (Cortex-M7, Big endian and Single Precision Floating Point Unit on)
•    arm_cortexM7l_math.lib (Cortex-M7, Little endian)
•    arm_cortexM7b_math.lib (Cortex-M7, Big endian)
•    arm_cortexM4lf_math.lib (Cortex-M4, Little endian, Floating Point Unit)
•    arm_cortexM4bf_math.lib (Cortex-M4, Big endian, Floating Point Unit)
•    arm_cortexM4l_math.lib (Cortex-M4, Little endian)
•    arm_cortexM4b_math.lib (Cortex-M4, Big endian)
•    arm_cortexM3l_math.lib (Cortex-M3, Little endian)
•    arm_cortexM3b_math.lib (Cortex-M3, Big endian)
•    arm_cortexM0l_math.lib (Cortex-M0 / Cortex-M0+, Little endian)
•    arm_cortexM0b_math.lib (Cortex-M0 / Cortex-M0+, Big endian)
•    arm_ARMv8MBLl_math.lib (Armv8-M Baseline, Little endian)
•    arm_ARMv8MMLl_math.lib (Armv8-M Mainline, Little endian)
•    arm_ARMv8MMLlfsp_math.lib (Armv8-M Mainline, Little endian, Single Precision Floating Point Unit)
•    arm_ARMv8MMLld_math.lib (Armv8-M Mainline, Little endian, DSP instructions)
•    arm_ARMv8MMLldfsp_math.lib (Armv8-M Mainline, Little endian, DSP instructions, Single Precision Floating
     Point Unit)

The library functions ถูกประกาศใน the public file arm_math.h ซึ่งถูกวางใน the Include folder.  ง่ายต่อการรวมไฟล์นี้และเชื่อมโยง the appropriate library ใน the application และเริ่มการเรียก the library functions. The Library รองรับ single public header file arm_math.h สำหรับ Cortex-M core ด้วย little endian และ big endian. header file เดียวกันนี้จะถูกใช้สำหรับ floating point unit(FPU) variants. Define(กำหนด) the appropriate pre processor MACRO ARM_MATH_CM7 or ARM_MATH_CM4 or ARM_MATH_CM3 or ARM_MATH_CM0 or ARM_MATH_CM0PLUS ขึ้นอยู่กับ the target processor ใน the application. สำหรับ Armv8-M cores define(กำหนด) preprocessor macro ARM_MATH_ARMV8MBL or ARM_MATH_ARMV8MML. เซ็ต preprocessor macro __DSP_PRESENT ถ้า Armv8-M Mainline core รองรับ DSP instructions.

*

Offline tha

  • *****
  • 2950
    • View Profile
Re: STM32F1 CMSIS DSP
« Reply #1 on: July 04, 2021, 08:40:16 am »
Examples

The library ส่งออกพร้อมด้วยตัวอย่างจำนวนหนึ่งซึ่งแสดงวิธีใช้ the library functions.

Toolchain Support

The library ถูกพัฒนาและทดสอบด้วย MDK-ARM version 5.14.0.0. The library กำลังถูกทดสอบใน GCC and IAR toolchains และอัปเดตบนการกระทำนี้จะถูกทำให้มีใช้ประโยชน์ได้โดยเร็ว.

Building the Library

The library installer บรรจุ project files เพื่อสร้างใหม่ libraries บน MDK Tool chain ใน the CMSIS\DSP_Lib\Source\ARM folder.

•   arm_cortexM_math.uvprojx

The libraries สามารถถูกสร้างโดยการเปิด the arm_cortexM_math.uvprojx project in MDK-ARM, เลือก a specific target, และกำหนด the optional preprocessor macros ตามรายละเอียดข้างบน.

Pre-processor Macros

แต่ละ library project มี pre-processor macros ที่แตกต่างกัน.

•   UNALIGNED_SUPPORT_DISABLE:
Define มาโคร UNALIGNED_SUPPORT_DISABLE, ถ้า the silicon ไม่ได้รองรับ unaligned memory access

•   ARM_MATH_BIG_ENDIAN:
Define มาโคร ARM_MATH_BIG_ENDIAN เพื่อสร้าง the library สำหรับ big endian targets. โดยค่าเริ่มต้น library สร้างสำหรับ little endian targets.

•   ARM_MATH_MATRIX_CHECK:
Define มาโคร ARM_MATH_MATRIX_CHECK สำหรับการเช็คบน the input and output sizes ของ matrices

•   ARM_MATH_ROUNDING:
Defineมาโคร ARM_MATH_ROUNDING สำหรับการปัดเศษบนฟังชั่นที่สนับสนุน

•   ARM_MATH_CMx:
Define มาโคร ARM_MATH_CM4 สำหรับการสร้าง the library บน Cortex-M4 target, ARM_MATH_CM3 สำหรับการสร้าง the library บน Cortex-M3 target and ARM_MATH_CM0 สำหรับการสร้าง the library บน cortex-M0 target ARM_MATH_CM0PLUS สำหรับการสร้าง library on Cortex-M0+ target, and ARM_MATH_CM7 สำหรับการสร้าง the library on cortex-M7.

•   ARM_MATH_ARMV8MxL:
Define มาโคร ARM_MATH_ARMV8MBL for building the library on Armv8-M Baseline target, ARM_MATH_ARMV8MML for building library on Armv8-M Mainline target.

•   __FPU_PRESENT:
เริ่มต้นมาโคร __FPU_PRESENT = 1 เมื่อสร้างบน FPU supported Targets. เปิดการใช้งานมาโครนี้สำหรับ floating point libraries

•   __DSP_PRESENT:
เริ่มต้นมาโคร __DSP_PRESENT = 1 เมื่อ Armv8-M Mainline core รองรับ DSP instructions.

CMSIS-DSP in ARM::CMSIS Pack

ไฟล์ต่อไปนี้ที่เกี่ยวข้องกับ CMSIS-DSP มีอยู่ใน the ARM::CMSIS Pack directories :



*

Offline tha

  • *****
  • 2950
    • View Profile
Re: STM32F1 CMSIS DSP
« Reply #3 on: July 05, 2021, 07:34:06 am »
Description

The Fast Fourier Transform (FFT) เป็น an efficient algorithm สำหรับการคำนวณ the Discrete Fourier Transform (DFT). The FFT สามารถลำดับขนาดได้เร็วกว่า the DFT, โดยเฉพาะอย่างยิ่งสำหรับความยาวที่ยาว. The algorithms ที่แธิบายใน section นี้ทำงานบน complex data. ชุดที่แยกกันของ functions ถูกอุทิศเพื่อจัดการ real sequences.

มี algorithms ที่แยกกันสำหรับจัดการ floating-point, Q15, and Q31 data types. The algorithms มีให้ใช้สำหรับแต่ละ data type ถูกอธิบายถัดไป.

The FFT functions ทำงานแบบแทนที่. นั่นคือ, the array ที่เก็บ the input data จะถูกใช้เพื่อเก็บ the corresponding result อีกด้วย. The input data เป็นแบบ complex และบรรจุ 2*fftLen ค่าที่แทรกกันดังแสดงข้างล่าง.

 {real[0], imag[0], real[1], imag[1],..}

The FFT result จะถูกบรรจุใน the same array และ the frequency domain values จะมี the same interleaving.

*

Offline tha

  • *****
  • 2950
    • View Profile
Re: STM32F1 CMSIS DSP
« Reply #4 on: July 05, 2021, 08:57:13 am »
Floating-point

The floating-point complex FFT ใช้ a mixed-radix algorithm. หลาย radix-8 stages ถูกดำเนินการพร้อมด้วย a single radix-2 หรือ radix-4 stage, ตามต้องการ. The algorithm รองรับความยาวของ [16, 32, 64, ..., 4096] และแต่ละความยาวจะใช้ a different twiddle factor table.

The function ใช้ the standard FFT definition และ output values อาจเพิ่มขึ้นตาม a factor of fftLen เมื่อคำนวณ the forward transform. The inverse transform มีมาตราส่วน 1/fftLen เป็น part of the calculation และซึ่งตรงกันกับ the textbook definition ของ the inverse FFT.

Pre-initialized data structures บรรจุ twiddle factors และ bit reversal tables ถูกจัดให้และ defined ใน arm_const_structs.h. Include(รวม) header นี้ใน your function และจากนั้น pass หนึ่งของ the constant structures เป็น an argument ไปยัง arm_cfft_f32. ตัวอย่างเช่น :

arm_cfft_f32(arm_cfft_sR_f32_len64, pSrc, 1, 1)

คำนวณ a 64-point inverse complex FFT รวมทั้ง bit reversal. The data structures ถูกรักษาเป็น constant data และไม่ถูกแก้ไขในระหว่าง the calculation. The same data structure สามารถถูกใช้ซ้ำสำหรับหลาย transforms รวมทั้ง mixing forward และ inverse transforms.

ที่ปล่อยออกมาก่อนหน้านี้ของ the library จัดให้มี separate radix-2 and radix-4 algorithms ที่ทำงานบน floating-point data. functions เหล่านี้ยังคงถูกจัดให้แต่ถูกเลิกใช้แล้ว. ฟังก์ชันที่เก่ากว่าจะช้ากว่าและมีลักษณะทั่วไปน้อยกว่าฟังก์ชันใหม่.

ตัวอย่างการเริ่มต้นของค่าคงที่สำหรับฟังก์ชัน arm_cfft_f32 มีดังนี้:


*

Offline tha

  • *****
  • 2950
    • View Profile
Re: STM32F1 CMSIS DSP
« Reply #5 on: July 05, 2021, 10:03:58 am »
Q15 and Q31

The floating-point complex FFT ใช้ a mixed-radix algorithm. หลาย radix-4 stages ถูกดำเนินการพร้อมด้วย a single radix-2, ตามต้องการ. The algorithm รองรับความยาวของ [16, 32, 64, ..., 4096] และแต่ละความยาวจะใช้ a different twiddle factor table.

The function ใช้ the standard FFT definition และ output values อาจเพิ่มขึ้นตาม a factor of fftLen เมื่อคำนวณ the forward transform. The inverse transform มีมาตราส่วน 1/fftLen เป็น part of the calculation และซึ่งตรงกันกับ the textbook definition ของ the inverse FFT.

Pre-initialized data structures บรรจุ twiddle factors และ bit reversal tables ถูกจัดให้และ defined ใน arm_const_structs.h. Include(รวม) header นี้ใน your function และจากนั้น pass หนึ่งของ the constant structures เป็น an argument ไปยัง arm_cfft_q32. ตัวอย่างเช่น :

arm_cfft_q31(arm_cfft_sR_q31_len64, pSrc, 1, 1)

คำนวณ a 64-point inverse complex FFT รวมทั้ง bit reversal. The data structures ถูกรักษาเป็น constant data และไม่ถูกแก้ไขในระหว่าง the calculation. The same data structure สามารถถูกใช้ซ้ำสำหรับหลาย transforms รวมทั้ง mixing forward และ inverse transforms.

ที่ปล่อยออกมาก่อนหน้านี้ของ the library จัดให้มี separate radix-2 and radix-4 algorithms ที่ทำงานบน floating-point data. functions เหล่านี้ยังคงถูกจัดให้แต่ถูกเลิกใช้แล้ว. ฟังก์ชันที่เก่ากว่าจะช้ากว่าและมีลักษณะทั่วไปน้อยกว่าฟังก์ชันใหม่.

ตัวอย่างการเริ่มต้นของค่าคงที่สำหรับฟังก์ชัน arm_cfft_q32 มีดังนี้:


*

Offline tha

  • *****
  • 2950
    • View Profile
Re: STM32F1 CMSIS DSP
« Reply #6 on: July 05, 2021, 10:15:14 am »
Function Documentation



Parameters
     [in]        *S           ชี้ไปยัง an instance ของ the floating-point CFFT structure.
     [in,out]      *p1        ชี้ไปยัง the complex data buffer ของขนาด 2*fftLen. การประมวลผลเกิดขึ้นแบบแทนที่.
     [in]        ifftFlag        flag ที่เลือก forward (ifftFlag=0) หรือ inverse (ifftFlag=1) transform.
     [in]   bitReverseFlag   flag ที่เปิดการใช้งาน (bitReverseFlag=1) หรือปิดการใช้งาน (bitReverseFlag=0) bit
                                     reversal of output.

Returns
     none.


*

Offline tha

  • *****
  • 2950
    • View Profile
Re: STM32F1 CMSIS DSP
« Reply #7 on: July 06, 2021, 08:02:15 am »


Parameters
     [in]        *S           ชี้ไปยัง an instance ของ the Q15 CFFT structure.
     [in,out]      *p1        ชี้ไปยัง the complex data buffer ของขนาด 2*fftLen. การประมวลผลเกิดขึ้นแบบแทนที่.
     [in]        ifftFlag        flag ที่เลือก forward (ifftFlag=0) หรือ inverse (ifftFlag=1) transform.
     [in]   bitReverseFlag   flag ที่เปิดการใช้งาน (bitReverseFlag=1) หรือปิดการใช้งาน (bitReverseFlag=0) bit
                                     reversal of output.

Returns
     none.