🌱 Tích hợp thư viện CMSIS-DSP vào Project STM32 bằng STM32CubeIDE

🌱 Tích hợp thư viện CMSIS-DSP vào Project STM32 bằng STM32CubeIDE

    CMSIS-DSP (Cortex Microcontroller Software Interface Standard - Digital Signal Processing) là một phần của bộ thư viện CMSIS do Arm phát triển, nhằm mục tiêu giúp các nhà phát triển nhúng dễ dàng triển khai các thuật toán DSP (Digital Signal Processing) trên các vi điều khiển dòng Cortex-M.

    Một ví dụ tiêu biểu khi tích hợp bộ thư viện CMSIS-DSP là sử dụng các lệnh tính toán vector SIMD để tối ưu hiệu suất tính toán của Core.

CMSIS-DSP và ứng dụng

    CMSIS-DSP là một thư viện phần mềm miễn phí, cung cấp một bộ các hàm xử lý tín hiệu số được tối ưu hóa cho các vi điều khiển Arm Cortex-M. Nó được thiết kế để tăng tốc độ xử lý các tác vụ DSP thường gặp mà không cần phải viết mã Assembly thủ công.

Thư viện này hỗ trợ các chức năng như:

  • Biến đổi Fourier nhanh (FFT)
  • Bộ lọc số (FIR, IIR)
  • Tích chập (Convolution)
  • Xử lý số phức (Complex Math)
  • Xử lý vector và ma trận
  • Các hàm toán học nâng cao (Fast Math)
  • Thuật toán thống kê
Việc sử dụng CMSIS-DSP mang lại một số lợi ích:
  • Hiệu suất cao: Các hàm được tối ưu hóa cho từng dòng vi điều khiển Cortex-M, tận dụng các tính năng như SIMD (Single Instruction Multiple Data)FPU (Floating Point Unit).
  • Tích hợp dễ dàng: CMSIS-DSP có thể dễ dàng tích hợp vào các dự án sử dụng STM32Cube IDE, Keil MDK, hoặc các môi trường phát triển khác.
  • Tiết kiệm thời gian: Giúp các nhà phát triển tiết kiệm thời gian viết các hàm DSP từ đầu, đặc biệt là khi cần xử lý tín hiệu nhanh chóng.
➤ Tầm ứng dụng của CMSIS-DSP cũng khá rộng, nó được áp dụng trong các ứng dụng như:
  • Xử lý âm thanh: Lọc nhiễu, tăng cường âm thanh, nhận diện giọng nói.
  • Xử lý tín hiệu y tế: Phân tích tín hiệu ECG, xử lý hình ảnh y tế.
  • IoT và cảm biến: Phân tích dữ liệu cảm biến từ accelerometer, gyroscope.
  • Truyền thông: Mã hóa/giải mã tín hiệu, lọc tín hiệu vô tuyến.
  • Điều khiển động cơ: Xử lý vector cho điều khiển động cơ không đồng bộ (FOC - Field Oriented Control).
Một số ứng dụng của CMSIS - DSP
Một số ứng dụng của CMSIS - DSP

Các API chính của CMSIS-DSP

a. Biến đổi Fourier nhanh (FFT)

  • arm_rfft_fast_f32(): Tính toán FFT nhanh cho số thực (float32).
  • arm_cfft_f32(): Tính toán FFT cho số phức (complex float32).
  • Ứng dụng: Phân tích tần số âm thanh, xử lý tín hiệu radar, truyền thông.

b. Bộ lọc số

  • FIR Filter:
    • arm_fir_f32(): Bộ lọc đáp ứng xung hữu hạn (FIR) cho dữ liệu số thực.
    • arm_fir_q15(), arm_fir_q31(): FIR cho dữ liệu định dạng cố định (fixed-point).
  • IIR Filter:
    • arm_biquad_cascade_df1_f32(): Bộ lọc biquad IIR.

c. Xử lý ma trận

  • arm_mat_mult_f32(): Nhân ma trận cho số thực.
  • arm_mat_inv_f32(): Tìm ma trận nghịch đảo.
  • Ứng dụng: Xử lý ảnh, giải hệ phương trình tuyến tính.

d. Các hàm toán học nâng cao

  • arm_sin_f32(), arm_cos_f32(): Hàm sin và cos nhanh.
  • arm_sqrt_f32(): Căn bậc hai nhanh.
  • Ứng dụng: Tính toán góc, vector điều khiển.

Tích hợp CMSIS-DSP vào STM32Cube IDE

    ➤ Trước hết bạn cần biết cách cài đặt và sử dụng phần mềm STM32CubeIDE

1 - Tải xuống bản mới nhất của thư viện Arm CMSIS-DSP theo liên kết sau

    https://github.com/ARM-software/CMSIS-DSP/releases

    Bạn sẽ thấy thông tin sau (phiên bản mới nhất có thể đã thay đổi)

Tải bản CMSIS-DSP packet mới nhất
Tải bản CMSIS-DSP packet mới nhất

    Tải file .zip nếu dùng STM32CubeIDE.

2 - Tạo một thư mục trong thư mục project của bạn và đặt tên là DSP, sao chép các folder dưới đây vào folder DSP đó.

CMSIS-DSP-1.14.2\Include
CMSIS-DSP-1.14.2\Source\BasicMathFunctions
CMSIS-DSP-1.14.2\Source\CommonTables
CMSIS-DSP-1.14.2\Source\FastMathFunctions
CMSIS-DSP-1.14.2\Source\FilteringFunctions
CMSIS-DSP

    Sau đó chúng ta cần exclude/xóa một số file sau để có thể build được project.

CMSIS-DSP-1.14.2\Source\BasicMathFunctions\BasicMathFunctions.c
CMSIS-DSP-1.14.2\Source\BasicMathFunctions\BasicMathFunctionsF16.c
CMSIS-DSP-1.14.2\Source\CommonTables\CommonTables.c
CMSIS-DSP-1.14.2\Source\CommonTables\CommonTablesF16.c
CMSIS-DSP-1.14.2\Source\FastMathFunctions\FastMathFunctions.c
CMSIS-DSP-1.14.2\Source\FastMathFunctions\FastMathFunctionsF16.c
CMSIS-DSP-1.14.2\Source\FilteringFunctions\FilteringFunctions.c
CMSIS-DSP-1.14.2\Source\FilteringFunctions\FilteringFunctionsF16.c

    Tải bản CMSIS-DSP đã exclude file cần thiết tại đây!

3 - Link Project của bạn với source code của DSP, sau đó thêm include directory trên STM32CubeIDE.

STM32CubeIDE CMSIS DSP
STM32CubeIDE tích hợp CMSIS-DSP

    Hoàn thiện source code cho project, compile và run thôi!

➤ Ở đây mình sẽ lấy ví dụ sử dụng một số lệnh SIMD của thư viện CMSIS-DSP để tối ưu hóa tốc độ của chương trình!

Ví dụ sử dụng lệnh SIMD với thư viện CMSIS-DSP

    Sử dụng lệnh __SADD8 để cộng 2 vector mình đã đề cập ở bài viết trước về SIMD!

    So sánh hiệu suất

CMSIS-DSP SIMD Example
So sánh hiệu suất khi sử dụng và không sử dụng SIMD

Video Demo cài đặt và sử dụng CMSIS-DSP, lệnh SIMD

>>>>>> Follow ngay <<<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn