Π§ΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° CMSIS DSP. ΠΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ½Π° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ. ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CMSIS DSP Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ . ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CMSIS DSP ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ. ΠΠ°ΠΊ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CMSIS DSP.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ CMSIS DSP ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½Π° Π½ΡΠΆΠ½Π°
CMSIS DSP (Cortex Microcontroller Software Interface Standard for Digital Signal Processing) — ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ ARM Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² Π½Π° Π±Π°Π·Π΅ ΡΠ΄Π΅Ρ Cortex-M. ΠΠ½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π¦ΠΠ‘, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠΈΠ»ΡΡΡΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π€ΡΡΡΠ΅, ΠΌΠ°ΡΡΠΈΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π΄Ρ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ CMSIS DSP:
- ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Cortex-M
- Π¨ΠΈΡΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ Π¦ΠΠ‘
- ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ
- Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π³ΠΎΡΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π¦ΠΠ‘
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ CMSIS DSP
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° CMSIS DSP ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π³ΡΡΠΏΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ:

- ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΠΈ Ρ.Π΄.)
- ΠΡΡΡΡΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ, ΡΠΈΠ½ΡΡ, ΠΊΠΎΡΠΈΠ½ΡΡ ΠΈ Π΄Ρ.)
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ (FIR, IIR, Biquad ΡΠΈΠ»ΡΡΡΡ)
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (FFT, DCT)
- ΠΠ°ΡΡΠΈΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
- Π‘ΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΠΌΠΈ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ (Q7, Q15, Q31) ΠΈ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ (float32) ΡΠΎΡΠΊΠΎΠΉ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CMSIS DSP Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CMSIS DSP Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
- Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ CMSIS
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (arm_math.h)
- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ
- ΠΠ°ΡΡΡΠΎΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° (ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, FPU ΠΈ Ρ.Π΄.)
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CMSIS DSP Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΠΠ€:
#include "arm_math.h"
#define FFT_SIZE 1024
float32_t input[FFT_SIZE*2];
float32_t output[FFT_SIZE*2];
arm_cfft_instance_f32 fft_instance;
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
arm_cfft_init_f32(&fft_instance, FFT_SIZE);
// ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΠΠ€
arm_cfft_f32(&fft_instance, input, 0, 1);
// ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠ°Π³Π½ΠΈΡΡΠ΄Ρ
arm_cmplx_mag_f32(input, output, FFT_SIZE);
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ CMSIS DSP ΠΈ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ
ΠΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² CMSIS DSP — Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ ΠΈΠ· CMSIS DSP ΠΈ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.

Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
- ΠΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ: STM32F407VGT6 (Cortex-M4 Ρ FPU)
- Π§Π°ΡΡΠΎΡΠ° ΡΠ΄ΡΠ°: 168 ΠΠΡ
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ: GCC 10.3, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ -O3
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ:
Π€ΡΠ½ΠΊΡΠΈΡ | ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΌΠΊΡ) |
---|---|
arm_sqrt_f32 (CMSIS DSP) | 0.48 |
Π‘Π°ΠΌΠΎΠΏΠΈΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ | 1.23 |
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΡΡΠ½ΠΊΡΠΈΡ CMSIS DSP ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 2.5 ΡΠ°Π·Π° Π±ΡΡΡΡΠ΅Π΅ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ CMSIS DSP
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ CMSIS DSP ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π¦ΠΠ‘. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ²
- ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ (ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠ»Π°Π²Π°ΡΡΠ°Ρ ΡΠΎΡΠΊΠ°)
- ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π² CMSIS DSP ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΄Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SIMD ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ)
- ΠΡΠΎΡΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ΄ ΠΈ Π²ΡΡΠ²Π»ΡΠΉΡΠ΅ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ CMSIS DSP:

// ΠΠ΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
for (int i = 0; i < SIGNAL_LENGTH; i++) {
float sum = 0;
for (int j = 0; j < FILTER_LENGTH; j++) {
sum += signal[i+j] * coeffs[j];
}
output[i] = sum;
}
// ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ Ρ CMSIS DSP
arm_fir_instance_f32 fir;
arm_fir_init_f32(&fir, FILTER_LENGTH, coeffs, state, BLOCK_SIZE);
arm_fir_f32(&fir, signal, output, SIGNAL_LENGTH);
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ CMSIS DSP
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ², Ρ CMSIS DSP Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ:
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΄Π΅Ρ Cortex-M, Π½Π° Π΄ΡΡΠ³ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΠΈΠΆΠ΅
- ΠΠ΅ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
- ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΠΠ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ 2)
- ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΠ΅Π» Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
- ΠΠ»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠ½Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ CMSIS DSP ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
Π₯ΠΎΡΡ CMSIS DSP ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ:

- CMSIS NN - Π΄Π»Ρ Π·Π°Π΄Π°Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ
- Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ²
- Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π¦ΠΠ‘ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, FFTW Π΄Π»Ρ ΠΠΠ€)
- Π‘Π°ΠΌΠΎΠΏΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ
ΠΡΠ±ΠΎΡ ΠΌΠ΅ΠΆΠ΄Ρ CMSIS DSP ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° CMSIS DSP. Π’Π°ΠΊ Π»ΠΈ Π±ΡΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ?
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ CMSIS DSP ΠΈ ΠΌΠΎΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ°ΠΊ-ΡΠΎ Π΄ΠΎΠ»Π³ΠΎ Ρ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°Π» Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½ΠΎ Π²ΠΎΡ Π½Π°ΡΡΠ°Π»ΠΎΠ² Π²ΡΠ΅ΠΌΡ.
Π’Π°ΠΌ Π΅ΡΡΡ ΠΊΡΡΠ° Π²ΡΡΠΊΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠ΅ΠΉ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π±ΡΡΡΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π Π΄Π°ΠΆΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ. ΠΡΡΡΠΎ, Ρ ΡΠΌΠΎΠ³Ρ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ARM.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΠ°ΠΊ Π»ΠΈ Π±ΡΡΡΡ Π°ΡΠΌΠΎΠ²ΡΠΊΠΈΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈ ΠΎΠ½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ΅Ρ Π·Π°Π΄Π°Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΌΠ½Π΅.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠ· Π±ΠΈΠ±ΠΈΠ»ΠΈΠΎΡΠ΅ΠΊΠΈ DSP
ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΡΡΠΎ 16 Π±ΠΈΡ
ΠΈ 32 Π±ΠΈΡΠ°
, ΡΠ»ΠΎΠ°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ. ΠΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ
(Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠ°Π»Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°)
Π‘ ΠΌΠΎΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π·Π΄Π΅ΡΡ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π½Π° ΠΌΠΎΠΉ ΠΏΠ°ΠΊ Π΄Π»Ρ Keil'Π° Π½Π° gitlab (Π ΡΠ°Π·Π΄Π΅Π»Π΅ "ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ")
Π CMSIS DSP ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Keil, Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ
C:/Keil_v5/ARM/PACK/ARM/CMSIS/5.4.0/CMSIS/Documentation/DSP/html/index.html
ΠΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ ΡΠ΅ΡΡΠ°ΠΌ.
ΠΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ΄ΠΎΠΏΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΠΈΠ»Π°Π½Π΄Ρ 1986ΠΠ92Π£
Π½Π° ΡΠ°ΡΡΠΎΡΠ΅ 8 ΠΠΡ.
Π ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠ° Ρ Π½Π΅ Π΄ΡΠΌΠ°Π» ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠΈ, Π° ΠΎΠ±ΡΠ°Π»ΡΡ Ρ ΡΠΎΠ²Π°ΡΠΈΡΠ΅ΠΌ Π² WhatsApp, Π²ΠΎΡ ΠΈ ΡΠ»Π°Π» ΡΡΠ΄Π° ΡΡΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ.
Π§ΡΠΎ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ? Π’ΡΠΈ Π²ΠΈΠ΄Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
x8
, x16
, x32
- ΡΡΠΎ ΡΠ΅ ΡΠΈΡΠ»Π° ΠΊΠΎΡΠ½ΠΈ ΠΊΠΎΡΠΎΡΡΡ
Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ, Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΠΎΡΡΠΈΡΠ°Π» ΠΈΡ
Π½Π° ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ΅ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π» Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
.
ΠΠ°Π»Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΏΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΊΠΎΡΠΎΡΡΡ
Π±ΡΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, Ρ ΡΡΡΠΈΠΊΡΠΎΠΌ _1
ΠΌΠΎΠΈ, Ρ _2
- ARM. ΠΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΡΠ°Π·Ρ, ΡΡΠΎ Π±Ρ ΠΈ ΠΌΠΎΠΈ, ΠΈ ARM ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΡΡ
.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ 6 ΡΡΡΠΎΠΊ ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ - Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΡΠΊΠΈ.
ΠΠΎΡ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°...
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅???
Π’ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ CMSIS DSP
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ (Π² ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ ΠΌΠΎΠΈΡ
):
...input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF.
ΠΡ ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π° 32768 Π΄ΠΎΠ»Ρ ΠΎΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ in = 1000, ΡΡΠΎ Π½Π΅ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ 1000/32768.
Π ΠΈΡΠΎΠ³Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π²Π΅ΡΡΠΌΠ° Π±ΡΡΡΡΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. Π₯ΠΎΡΠΎΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ ΡΠ°Π±ΠΎΡΡ.
Π CMSIS DSP
ΠΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ CMSIS DSP
x0 = in/2 [initial guess] x1 = 1/2 * ( x0 + in / x0) [each iteration]
Π£ ΠΌΠ΅Π½Ρ ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ ΠΈΡΡΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
Π ΡΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΠΌΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ)
Π‘Π°ΠΌΡΠΌ ΡΠ»Π°Π±ΡΠΌ ΠΌΠ΅ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π°:
ax = (d + value / d) >> 1; d = (ax + value / ax) >> 1; ax = (d + value / d) >> 1; value = (ax + value / ax) >> 1;
ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΠΌΠΎΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ 32 ΡΠ°Π·ΡΡΠ΄ΠΎΠ², Π° Ρ Π½Π°Ρ Π΅ΡΡ 16 ΠΈ 8 Π΅ΡΡΡ. ΠΡΠΆΠ½ΠΎ Π»ΠΈΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΈ Π³ΠΎΡΠΎΠ²ΠΎ. Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ΄ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ:
- 16 Π±ΠΈΡ - 0.00000475 ΡΠ΅ΠΊ, ΡΡΠΎ Π½Π° 0.00000100 ΡΠ΅ΠΊ Π±ΡΡΡΡΠ΅Π΅ ΠΌΠΎΠ΅ΠΉ 32 Π±ΠΈΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ
- 8 Π±ΠΈΡ - 0.00000350 ΡΠ΅ΠΊ, ΡΡΠΎ Π² 1,6 ΡΠ°Π·Π° (Π½Π° 0.00000175 ΡΠ΅ΠΊ) Π±ΡΡΡΡΠ΅Π΅ ΠΌΠΎΠ΅ΠΉ 32 Π±ΠΈΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ
ΠΠ΅ΠΏΠ»ΠΎΡ ΠΎΠ΅ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΠΌΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ΄ΡΠ°Ρ
Cortex M3
ΠΈ ΡΡΠ°ΡΡΠ΅, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° CMSIS DSP
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΈ Π½Π° M0
. ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ° Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ - Π½Π΅Ρ?
ΠΠ° Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈΠ· CMSIS DSP
ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π½Π΅ΠΊΠΎΠΌΡ Shura Luberetsky, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠΊΠ½ΡΠ» Π² Π³ΡΡΠ±ΠΎΠΉ ΡΠΎΡΠΌΠ΅ (Π·Π° ΡΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ Π±ΡΠ» ΡΠ΄Π°Π»Π΅Π½) ΠΌΠ΅Π½Ρ Π½ΠΎΡΠΎΠΌ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΡΠ΅ΡΠ½ΠΎ, ΡΠΎ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π΅ΠΌΡ, Π·Π°ΡΡΠ°Π²ΠΈΠ» ΠΌΠ΅Π½Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΠΈ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΡΠΎΠ²ΡΠ΅ΠΌ Π΅Ρ Π·Π°Π±ΡΠΎΡΠΈΠ».
ΠΠ° ΡΡΠΎΠΌ Π²ΡΡ. Π₯ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄ΠΈΠ½Π³Π°.
Please enable JavaScript to view the comments powered by Disqus.ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° CMSIS DSP
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° CMSIS DSP, Π½Π°Π±ΠΎΡ ΠΎΠ±ΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
Π½Π° Π±Π°Π·Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Cortex-M ΠΈ Cortex-A.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ:
- ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- ΠΡΡΡΡΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ
- ΠΠ°ΡΡΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΌ
- Π‘ΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠΏΠΎΡΠ½ΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² (SVM)
- Π€ΡΠ½ΠΊΡΠΈΠΈ Π±Π°ΠΉΠ΅ΡΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ
- ΠΠ²Π°ΡΠ΅ΡΠ½ΠΈΠΎΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ 8-Π±ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, 16-Π±ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, 32-Π±ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ ΠΈ 32-Π±ΠΈΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ Helium ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² f32 Π΄Π»Ρ Neon.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠ½ΡΠ° Π±ΡΡΠ΅ΡΠ° (3 ΡΠ»ΠΎΠ²Π°), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠ½ΡΠ° Π±ΡΡΠ΅ΡΠ°. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΈ Π±ΡΡΠ΅ΡΡ, Π° ΠΏΡΠΎΡΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΊΠΎΠ½Π΅Ρ Π±ΡΡΠ΅ΡΠ° + Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²ΡΠΏΡΡΠ΅Π½Π° Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ -Ofast Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΈΠ»ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ arm_math.h
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ Include
. ΠΡΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠ°ΠΉΠ». ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ΅, Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ Include/dsp ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠ΄ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π±ΡΡΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ cmake. Π’Π΅ΡΡΠΈΡΡΡΡΡΡ ΡΠ΄ΡΠ° M0, M4, M7, M33, M55, A32.
ΠΠ°ΠΆΠ΄ΡΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
- ARM_MATH_BIG_ENDIAN:
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ ARM_MATH_BIG_ENDIAN Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ Ρ ΠΏΡΡΠΌΡΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ Π±Π°ΠΉΡΠΎΠ². ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΡΡΠΎΠΈΡΡΡ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ Ρ ΠΏΡΡΠΌΡΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ Π±Π°ΠΉΡΠΎΠ².
- ARM_MATH_MATRIX_CHECK:
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡ ARM_MATH_MATRIX_CHECK Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΡ
- ARM_MATH_ROUNDING:
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡ ARM_MATH_ROUNDING Π΄Π»Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ ΠΎΠΏΠΎΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ
- ARM_MATH_LOOPUNROLL:
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ ARM_MATH_LOOPUNROLL Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΠΈΠΊΠ»Π° Π² ΡΡΠ½ΠΊΡΠΈΡΡ DSP
- ARM_MATH_NEON:
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ ARM_MATH_NEON, ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π½Π΅ΠΎΠ½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ DSP. ΠΠ½ Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Neon, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
- ARM_MATH_NEON_EXPERIMENTAL:
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ ARM_MATH_NEON_EXPERIMENTAL, ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Neon Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ DSP. ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Neon Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π»ΡΡΡΠΈΡ
Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ, ΡΠ΅ΠΌ ΡΠΊΠ°Π»ΡΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ.
- ARM_MATH_HELIUM:
ΠΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΡΡ ΡΠ»Π°Π³ΠΈ ARM_MATH_MVEF ΠΈ ARM_MATH_MVEI ΠΈ ARM_MATH_MVE_FLOAT16.
- ARM_MATH_HELIUM_EXPERIMENTAL:
Π£ΡΠΈΡΡΠ²Π°Π΅ΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ARM_MATH_MVEF, ARM_MATH_MVEI ΠΈΠ»ΠΈ ARM_MATH_MVE_FLOAT16. ΠΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Ρ ΡΠ΄ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ΅ΠΌ ΡΠΊΠ°Π»ΡΡΠ½ΡΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΄ΡΠ°/ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
- ARM_MATH_MVEF:
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Helium Π²Π΅ΡΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² f32. ΠΡΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ARM_MATH_FLOAT16 ΠΈ ARM_MATH_MVEI.
- ARM_MATH_MVEI:
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Helium Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² int ΠΈ Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ.
- ARM_MATH_MVE_FLOAT16:
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² MVE Float16 (ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ MVE).
- DISABLEFLOAT16:
ΠΡΠΊΠ»ΡΡΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ float16, ΠΊΠΎΠ³Π΄Π° __fp16 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°/ΡΠ΄ΡΠ°. ΠΡΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΊΠ°Π»ΡΡΠ°. ΠΠΎΠ³Π΄Π° Π²Π΅ΠΊΡΠΎΡΠ½Π°Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ f16, Π΅Π΅ Π½Π΅Π»ΡΠ·Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ.
- ARM_MATH_AUTOVECTORIZE:
Π Helium ΠΈΠ»ΠΈ Neon ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ C ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΈΡΡΡΠΉ C. ΠΠ°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ.
The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories:
File/Folder | Content | ||
---|---|---|---|
CMSIS\Documentation\DSP | This documentation | ||
CMSIS \ DSP \ ΠΡΠΈΠΌΠ΅ΡΡ | ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ | ||
CMSIS \ DSP \ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ | DSP \ DSP and INCADE | DSP -Π°Π΄ΡΠ΅Ρ DSP\PrivateInclude | Π§Π°ΡΡΠ½ΡΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ DSP_Lib Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ |
CMSIS\DSP\Lib | ΠΠ²ΠΎΠΈΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ DSP_Lib | ||
CMSIS\DSP\Source | ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ DSP_Lib |
Π‘ΠΌ. ΠΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ CMSIS-DSP.
cmsisdsp Β· PyPI
ΠΡΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Python Π΄Π»Ρ CMSIS-DSP Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Arm, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ°Ρ Ρ NumPy
.
CMSIS-DSP Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° Π½Π°ΡΠ΅ΠΌ GitHub ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΠΊΠ΅ΡΠ° CMSIS.
ΠΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ C CMSIS-DSP API, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΏΠ»Π°ΡΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π° ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° Π² ΡΡΠ΅Π΄Π΅ Python, Π° Π·Π°ΡΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ C, ΡΠ°Π±ΠΎΡΠ°ΡΡΡΡ Π½Π° ΠΏΠ»Π°ΡΠ΅ Cortex-M ΠΈΠ»ΠΈ Cortex-A.
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, Π½ΠΎ Ρ ΠΌΠ΅Π½ΡΡΠΈΠΌΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ, ΡΠ΅ΠΌ Π² ΡΡΠΎΠΌ README: https://developer.arm.com/documentation/102463/latest/
ΠΡΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π³ΡΠ°ΡΠΎΠ² (CG) CMSIS-DSP.
CG ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ·Π»ΠΎΠ² Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ Ρ Modelica Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ² VHT Modelica, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π½Π°ΡΠΈΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΉ VHT-SystemModeling.
ΠΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΡΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π° Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π° README.
ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Π‘Π±ΠΎΡΠΊΠ° ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Π±ΡΠ»Π° ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² Windows Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Python Ρ python.org ΠΈ Microsoft Visual 2017.
ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ Ρ cygwin
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ python-devel
. ΠΠ° Mac ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ XCode.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² scipy
ΠΈ 9Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ 0045 matplotlib .
ΠΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΡΠ°ΠΉΠ» setup.py
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»ΡΡΡΠΈΡΡ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Python 3.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΡΠ±ΠΎΡΠΊΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Python. ΠΠ°ΡΠ΅ΠΌ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ:
pip install cmsisdsp
Π£ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ pip
(Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ NumPy
), ΠΈ Ρ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Python ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°.
ΠΡΠΈΠΌΠ΅ΡΡ DSP Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² CMSIS-DSP PythonWrapper.
ΠΡΠΈΠΌΠ΅ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅ ComputeGraph CMSIS-DSP.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΈΠ· Google Colab:
ΠΡΠ° ΡΡΡΠ»ΠΊΠ° ΠΎΡΠΊΡΠΎΠ΅Ρ Π±Π»ΠΎΠΊΠ½ΠΎΡ Jupyter Π² Google Colab Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° Π²Π·ΡΡΠ° ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ CMSIS-DSP GitHub.
Π‘Π±ΠΎΡΠΊΠ°
ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π²ΡΡΡΠ½ΡΡ.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° CMSIS-DSP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ NumPy
, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π΅ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
> pip ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ numpy
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ NumPy
Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Python CMSIS-DSP. ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΏΠ°ΠΏΠΊΡ CMSIS/DSP
.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ cmsisdsp Π² ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅:
> pip install -e .
ΠΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ CMSIS-DSP, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ setup.
. py
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ CMakeLists.txt
Π² ΠΏΠ°ΠΏΠΊΠ΅ PythonWrapper
. Π ΠΏΠ°ΠΏΠΊΠ°Ρ
build
Π² PythonWrapper
ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ 9ΠΠΎΠΌΠ°Π½Π΄Π° 0045 cmake Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Makefile
ΠΈ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ setup.py
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Python.
ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
> pip install numpy > ΠΏΠΈΠΏ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ scipy > pip ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ matplotlib
Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ.
ΠΡΠΈΠΌΠ΅ΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² CMSIS-DSP PythonWrapper.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ testdsp.py
ΠΈ example.py
ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ
ΠΈΠ· ΡΡΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ. example.py
ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»Π° Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. Π‘ΠΌ. ΡΡΡΠ»ΠΊΡ Π½ΠΈΠΆΠ΅ Π² ΡΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ (ΠΠ‘, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Python) ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΊΠ°Π·Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ PythonWrapper
Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π»ΡΠ΄ΠΈ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈ ΡΠ΅ΡΠ°ΡΡ Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ API CMSIS-DSP, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΏΠ»Π°ΡΠ΅.
Π‘Π½Π°ΡΠ°Π»Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ
> ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ cmsisdsp ΠΊΠ°ΠΊ dsp
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ numpy:
> ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ numpy ΠΊΠ°ΠΊ np
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² scipy:
> ΠΈΠ· ΡΠΈΠ³Π½Π°Π»Π° ΠΈΠΌΠΏΠΎΡΡΠ° scipy
Π€ΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ CMSIS-DSP Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ numpy:
> r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7]))
Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΡΠ΅:
> r = dsp.arm_add_f32([1.,2,3],[4.,5,7])
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ CMSIS-DSP Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠ°ΠΊΠΈΠΌΠΈ Π±Ρ Π½ΠΈ Π±ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ (ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ).
Π€ΡΠ½ΠΊΡΠΈΠΈ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°
ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΈ CMSIS-DSP ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅:
Π‘Π½Π°ΡΠ°Π»Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ:
> firf32 = dsp.arm_fir_instance_f32()
ΠΠ°ΡΠ΅ΠΌ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
> dsp.arm_fir_init_f32(firf32,3,[1.,2,3],[0,0,0,0,0,0,0])
Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ (ΠΊΡΠΎΠΌΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°) Π² ΡΡΠΎΠΌ Python API Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ! ΠΠ½ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² API CMSIS-DSP, Π° Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ C Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΊ C API, API ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ C API Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, blockSize Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°) Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎΡ Π²ΡΠ±ΠΎΡ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° numpy Ρ API.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°.
> ΠΏΠ΅ΡΠ°ΡΡ (firp32.numTaps())
ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CMSIS-DSP:
> ΠΏΠ΅ΡΠ°ΡΡ (dsp.arm_fir_f32 (firf32, [1,2,3,4,5]))
Π Π°Π·ΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ blockSize
. blockSize
Π±ΡΠ» Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΈΠ· ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ: numTaps + blockSize β 1
Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ CMSIS-DSP. ΠΡΠ°ΠΊ, Π·Π΄Π΅ΡΡ ΡΠΈΠ³Π½Π°Π» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ 5 ΠΎΡΡΡΠ΅ΡΠΎΠ².
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ 5 ΡΡΠΌΠΏΠ»ΠΎΠ², Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΅ΡΠ΅ ΡΠ°Π·. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²Π½ΡΡΡΠΈ fiRF32 Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ΄Π΅ C CMSIS-DSP.
> ΠΏΠ΅ΡΠ°ΡΡ (dsp.arm_fir_f32 (firf32, [6,7,8,9,10]))
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΠ°Π²Π½ΠΈΡΡ Ρ scipy, ΡΡΠΎ Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ° Π² scipy Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
> filtered_x = signal.lfilter([3,2,1.], 1.0, [1,2 ,3,4,5,6,7,8,9,10]) > ΠΏΠ΅ΡΠ°ΡΡ (ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π½ΠΎ_x)
ΠΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΡ API.
ΠΠΠ€
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΠ€ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Python:
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠΈΠ³Π½Π°Π», ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΠΠ€.
> ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ = 16 > ΡΠΈΠ³Π½Π°Π» = np.cos (2 * np.pi * np.arange (nb) / nb)
ΠΠ»Ρ cfft CMSIS-DSP ΡΡΠ΅Π±ΡΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ.
Π§ΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΊ C API, ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠΈΠ³Π½Π°Π» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π² ΡΠ΅Π°Π»ΡΠ½ΡΠΉ. Π€ΡΠ½ΠΊΡΠΈΡ imToReal1D ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² testdsp.py
> signalR = imToReal1D(signal)
ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ FFT Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
> cfftf32=dsp.arm_cfft_instance_f32()
ΠΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ:
> status=dsp.arm_cfft_init_f32(cfftf32, nb) > ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ (ΡΡΠ°ΡΡΡ)
ΠΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΠ΅ ΠΠΠ€ ΡΠΈΠ³Π½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
> resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1)
ΠΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ scipy:
> resultI = realToIm1D(resultR) > ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ)
ΠΠ°ΡΡΠΈΡΠ°
ΠΠ»Ρ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΌΠ°ΡΠΊΠΈΡΡΡΡΡΡ API Python. ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΡΡ Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ CMSIS-DSP, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΡ ΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠΎ ΠΈ ΠΌΠ°ΡΡΠΈΠ² numpy (Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ).
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ CMSIS-DSP ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ:
> a=np.array([[1.,2,3,4],[5,6,7,8],[9 ,10,11,12]]) > b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]])
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ NumPy
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΠ»ΠΊΠΈ:
> ΠΏΠ΅ΡΠ°ΡΡ (np.dot (a, b))
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ CMSIS-DSP:
> v=dsp.arm_mat_mult_f32(a,b) > ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ (v)
Π ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ C ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° v
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.
example.py
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°ΠΉΠ»Π° Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π·Π΄Π΅ΡΡ:
https://archive. physionet.org/pn3/ecgiddb/Person_87/rec_2.dat
ΠΡΠΎΡ ΡΠΈΠ³Π½Π°Π» Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ Π΄Π»Ρ ΠΌΠ°ΡΡΠ΅ΡΠ° Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΡ:
ΠΡΠ³ΠΎΠ²Π°Ρ Π’.Π‘. ΠΠΈΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ»Π΅ΠΊΡΡΠΎΠΊΠ°ΡΠ΄ΠΈΠΎΠ³ΡΠ°ΠΌΠΌΡ. [ΠΌΠ°Π³ΠΈΡΡΠ΅ΡΡΠΊΠ°Ρ ΡΠ°Π±ΠΎΡΠ°] Π€Π°ΠΊΡΠ»ΡΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠΈ, ΠΠ»Π΅ΠΊΡΡΠΎΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ "ΠΠΠ’Π", Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, Π ΠΎΡΡΠΈΠΉΡΠΊΠ°Ρ Π€Π΅Π΄Π΅ΡΠ°ΡΠΈΡ; ΠΡΠ½Ρ 2005 Π³.
ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ PhysioNet
ΠΠΎΠ»Π΄Π±Π΅ΡΠ³Π΅Ρ Π.Π., ΠΠΌΠ°ΡΠ°Π» Π.Π., ΠΠ»Π°ΡΡ Π., Π₯Π°ΡΡΠ΄ΠΎΡΡ ΠΠΆ.Π., ΠΠ²Π°Π½ΠΎΠ² Π.Π§., ΠΠ°ΡΠΊ Π .Π., ΠΠΈΠ΅ΡΡΡ ΠΠΆ.Π., ΠΡΠ΄ΠΈ ΠΠ, ΠΡΠ½ Π‘.Π., Π‘ΡΡΠ½Π»ΠΈ Π₯.Π. PhysioBank, PhysioToolkit ΠΈ PhysioNet: ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΠ·ΠΈΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ². Π’ΠΈΡΠ°ΠΆ 101(23):e215-e220 [ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΈΡΠ°ΠΆΠ°; http://circ.ahajournals.org/cgi/content/full/101/23/e215]; 2000 Π³. (13 ΠΈΡΠ½Ρ).
ΠΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»ΠΈ
ΠΠ±ΠΎΠ»ΠΎΡΠΊΠ° Python ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ: Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ
, mfcc
ΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠΎΡΠΊΠ°
ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ CMSIS-DSP.
mfcc
ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠΎΠ² MEL, DCT ΠΈ ΠΎΠΊΠΎΠ½Π½ΡΡ
ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ².
ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ CMSIS-DSP MFCC.
Π€ΠΈΠ»ΡΡΡΡ MEL ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ 3 ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
β ΡΡΠΎ API ΠΏΠΎΠ²Π΅ΡΡ
Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ
Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
.
ΠΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Python Π΄Π»Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π³ΡΠ°ΡΠΎΠ², ΠΈ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ DSP/ComputeGraph
, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
ΠΠ΅ΡΡΠΈΡ 1.9.6:
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² API RFFT
- ΠΠΎΠ»ΡΡΠ΅ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ Π² Π³ΡΠ°ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΈ ΡΠ·Π»ΠΎΠ²
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ FIFO Π½Π° ΡΡΠΎΠ²Π½Π΅ FIFO (Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅)
ΠΠ΅ΡΡΠΈΡ 1.9.5:
Π’ΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ 1.9.4, Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Google Colab.