🌱 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ê
- 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) và 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.
- 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).
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 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\IncludeCMSIS-DSP-1.14.2\Source\BasicMathFunctionsCMSIS-DSP-1.14.2\Source\CommonTablesCMSIS-DSP-1.14.2\Source\FastMathFunctionsCMSIS-DSP-1.14.2\Source\FilteringFunctions
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.
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
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 😊