CMSIS DSP: исслСдованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ сравнСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π§Ρ‚ΠΎ прСдставляСт собой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° 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 Π² своСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ CMSIS
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (arm_math.h)
  3. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
  4. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора (оптимизация, FPU ΠΈ Ρ‚.Π΄.)
  5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 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 позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ЦОБ. Π’ΠΎΡ‚ нСсколько Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вмСсто поэлСмСнтных Ρ†ΠΈΠΊΠ»ΠΎΠ²
  2. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ подходящий Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… (фиксированная ΠΈΠ»ΠΈ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°)
  3. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа
  4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнныС Π² CMSIS DSP ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ядСр (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SIMD инструкции)
  5. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ ΠΈ выявляйтС ΡƒΠ·ΠΊΠΈΠ΅ мСста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 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 Π±ΠΈΡ‚Π°, Ρ„Π»ΠΎΠ°Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Моя рСализация Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€ΡΠΈΡŽ для

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.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *