CMSIS-DSP_库函数整理与解读

## 基于V1.16.2版 逐文件整理与理解

### 前缀
  如:mult 则为 arm_mult_f64 arm_mult_f32 arm_mult_q7  arm_mult_q15 arm_mult_q31

### arm_math_types.h:
  * q7_t q13_t等类型,及其最大,最小值等定义

### arm_math_memory.h:
  * Q7/Q15/Q31 内存操作宏,如内存读,写

### dsp/none.h
  * Q7/Q15/Q31 向下剪切转换如:clip_q31_to_q15
  * Q7/Q15/Q31 相互乘/加/减/累加等,如mult32x64

### Support functions 支持功能
  #### 各单位的相互转换:
  * 双精度浮点: arm_f64_to_float arm_f64_to_q31 arm_f64_to_q15 arm_f64_to_q7
  * 单精度浮点: arm_float_to_f64 arm_float_to_q31 arm_float_to_q15 arm_float_to_q7
  * Q31: arm_q31_to_f64 arm_q31_to_float arm_q31_to_q15 arm_q31_to_q7
  * Q15: arm_q15_to_f64 arm_q15_to_float arm_q15_to_q31 arm_q15_to_q7
  * Q7:  arm_q7_to_f64 arm_q7_to_float arm_q7_to_q31 arm_q7_to_q15

  #### 排序:
    * 通过enum arm_sort_alg支持:
      + Bitonic sort 比特排序
      + Bubble sort 气泡排序
      + Insertion sort 插入排序
      + Quick sort 快速排序
      + Selection sort 选择排序
    * 通过enum arm_sort_dir支持:
      + 正向 反向排序
   *  sort: 排序函数,   单精度浮点  
   * merge_sort 合并排序,   单精度浮点

  #### 其它:
   * copy 复制浮点向量的元素。Q7/Q15/Q31/单双精度浮点
   * fill 填充常量 Q7/Q15/Q31/单双精度浮点
   * weighted_average 加权平均值 单精度浮点
   * barycenter 加权平均值 单精度浮点
   * barycenter 求重心

### Basic math functions 基本数学函数
  * Q7/Q15/Q31/单/双精度浮点向量的:
  * 点乘mult/加add/减sub/常量乘scale,加offset/绝对值abs/点积dot_prod/移位shift/偏移offset/裁剪clip
  * Q7/Q15/Q31的取负negate
  * U8/U16/U32的位逻辑: 与and/或or/非not/异或xor

### Fast math functions 快速数学函数
  #### 定义有:
    PI:     3.14159265358979f
    PI_F64: 3.14159265358979323846
  #### 函数有:
    * sin: 单精度浮点/Q31/Q15
    * cos: 单精度浮点/Q31/Q15
    * vlog: 对数值向量 单/双精度浮点/Q31/Q15
    * vexp: 自然指数值 单/双精度浮点
    * sqrt: 排序(宏展开) 单精度浮点/Q31/Q15
    * divide: 分离分子与分母,Q31/Q15
    * atan2: 反正切: 使用x和y的符号确定右象限,以y/x的弧度为单位的反正切 单精度浮点/Q31/Q15

### interpolation_functions 插值函数
  * 结构:bilinear_interp_instance spline_instance
  * spline :         单精浮点三次样条插值(通过一系列形值点构造一条光滑曲线)
  * linear_interp:   浮点/Q7/Q15/Q31线性插值 (插值函数为一次多项式的插值方式)
  * bilinear_interp: 浮点/Q7/Q15/Q31双线性插值  (两个方向分别进行一次线性插值)

### Bayes classifier functions 贝叶斯分类器函数
  * arm_gaussian_naive_bayes_predict_f32:  高斯朴素贝叶斯预测模型法(朴素贝叶斯思想的极大化后验概率模型)

### Matrix functions 矩阵函数
  * matrix_instance 定义的矩阵结构: 行/列数支持U16,指针支持Q7/Q15/Q31/单/双精度浮点
  * mat_init 生成矩阵结构  Q7/Q15/Q31/单双精度浮点

  * mat_add 矩阵加法(须行列相同) Q7/Q15/Q31/单双精度浮点
  * mat_sub 矩阵减法(须行列相同) Q7/Q15/Q31/单双精度浮点
  * mat_mult 矩阵乘法(须A行 M*x, B行: x*N) Q7/Q15/Q31/单双精度浮点
  * mat_cmplx_mult 复数矩阵乘法(须A行 M*x, B行: x*N) Q7/Q15/Q31/单双精度浮点
  * mat_trans 矩阵转置(行列互换) Q7/Q15/Q31/单双精度浮点
  * mat_cmplx_trans 复数矩阵转置(行列互换) Q7/Q15/Q31/单双精度浮点
  * mat_vec 矩阵和向量乘法 Q7/Q15/Q31/单双精度浮点
  * mat_mult_fast 快速矩阵乘法, Q15/Q31,Cortex-M3 and Cortex-M4 支持
  * mat_scale 矩阵乘常量  Q7/Q15/Q31/单双精度浮点
  * mat_inverse 矩阵求逆(如果矩阵是奇异的(没有逆矩阵)则返回错误)  单双精度浮点
  * mat_cholesky 对称正定矩阵的浮点Cholesky分解 单双精度浮点
  * mat_solve_upper_triangular 求解上三角形矩阵(解决UT。X=A,其中UT是上三角矩阵) 单双精度浮点
  * mat_solve_lower_triangular 求解下三角形矩阵(解决UT。X=A,其中UT是下三角矩阵) 单双精度浮点  
  * mat_ldlt 对称半正定矩阵的浮点LDL分解 成功后返回一个下三角矩阵 单双精度浮点 
  * mat_qrm>=n的mxn浮点矩阵的QR分解(矩阵A分解为两个矩阵Q和R的乘积)  单双精度浮点 
  * householder 浮点向量的豪斯霍尔德变换(初等反射,对一个矩阵的各个列向量逐一进行相应的豪斯霍尔德变换,
    可以将这个矩阵变换为上海森伯格矩阵、上三角矩阵等形式。后者就是QR分解的豪斯霍尔德算法)  单双精度浮点 

### Complex math functions 复数函数
  * 这里的复数没有专用结构,而是以"偶实部,寄虚部"方式组成!!!!

  * cmplx_conj 共轭复数(两个实部相等、虚部互为相反数的复数,实轴对称性质),这里为交替组成 Q7/Q15/Q31/单双精度浮点
  * cmplx_mag_squared 复数幅度平方(real * real) + (imag * imag))  Q7/Q15/Q31/单双精度浮点
  * cmplx_mag 复数幅度平方后再开平方根   Q7/Q15/Q31/单双精度浮点
  * cmplx_dot_prod 复数的点积(x·y = x1y1* + x2y2...)   Q15/Q31/单精度浮点
  * cmplx_mult_real 实数乘复数 Q15/Q31/单双精度浮点
  * cmplx_mult_cmplx 复数乘复数 Q15/Q31/单双精度浮点

### Statistical functions 统计函数
  * logsumexp 即log-sum-exp LSE函数 单精度浮点  主要解决计算Softmax或CrossEntropy2时出现的上溢(overflow)或下溢(underflow)问题
    https://blog.csdn.net/yjw123456/article/details/121869249  通过取向量最大值并进行指数归一化,可以有效地避免这些问题
  * logsumexp_dot_prod LSE带对数运算的点积 单精度浮点
  * entropy 求熵, 返回-Sum(p ln p) 单双精度浮点
  * kullback_leibler 相对熵(KL散度),用于衡量两个概率分布之间的差异, 返回 Divergence D(A || B)  单双精度浮点
    https://blog.csdn.net/Go_ahead_forever/article/details/139249622

  https://blog.csdn.net/zzb714121/article/details/125339827  方差 均方根等
  * power  返回向量元素的平方和  Q7/Q15/Q31/单双精度浮点
  * mean   返回向量的平均值  Q7/Q15/Q31/单双精度浮点
  * var    向量元素的方差  Q15/Q31/单双精度浮点  
  * rms    向量元素的均方根(Root Mean Square) Q15/Q31/单精度浮点
  * std    向量元素的标准偏差 Q7/Q15/Q31/单双精度浮点
  * mse    向量之间的均方误差(Mean square error) Q7/Q15/Q31/单双精度浮点

  * min    向量的最小值,返回数组索引 Q7/Q15/Q31/单双精度浮点
  * absmin 向量取绝对值后的最小值,返回数组索引 Q7/Q15/Q31/单双精度浮点
  * absmin_no_idx向量取绝对值后的最小值,返回输出点 Q7/Q15/Q31/单双精度浮点
  * max    向量的最大值,返回数组索引 Q7/Q15/Q31/单双精度浮点
  * absmax 向量取绝对值后的最大值,返回数组索引 Q7/Q15/Q31/单双精度浮点
  * absmax_no_idx向量取绝对值后的最大值,返回输出点 Q7/Q15/Q31/单双精度浮点
  * accumulate 向量的累加值 单双精度浮点

### Motor control functions 电机控制功能
  * Q31和浮点数据类型有单独的函数。浮点版本的输入以度为单位,
  * 定点Q31具有一个范围为的缩放输入[-1 0.9999]映射到[-180+180]度。
  * 结果精确到小数点后5位。

  * sin_cos  sin_cos函数 单精度浮点/Q31
  * PID: pid/pid_init/pid_reset   单精度浮点/Q31/Q15

  * 变换;https://blog.csdn.net/chenjianbo88/article/details/53027298
  * park 派克变换(将abc 变换到 旋转 的 dq 坐标系下) 单精度浮点/Q31
  * inv_park 反派克变换  单精度浮点/Q31
  * clarke 变换 将abc 变换到 静止 的αβ坐标系下。 单精度浮点/Q31
  * inv_clarke 反变换。 单精度浮点/Q31

### Distance functions距离函数
  全部仅支持: 无特殊说明时,为
  https://blog.csdn.net/qq_42983182/category_12629016.html  距离度量大汇总
  https://blog.csdn.net/qq_35734025/article/details/117701817
  https://blog.csdn.net/songying0528/article/details/109691360

  #### 数值向量距离: 仅支持单/双精度浮点   
    * euclidean_distance  欧几里德距离 两点在多维空间中的直线距离,通常用于连续数值数据的分析。直接反映了数值大小的差异
    * braycurtis_distance 布雷柯蒂斯距离 用于生态学和生物多样性研究中度量两个样本组成差异的指标
    * canberra_distance 堪培拉距离 用于度量两个向量间差异的数值度量,特别适用于非负数值数据
    * chebyshev_distance 切比雪夫距离 也被称为L∞距离,是向量空间中的一种度量,它是两个点之间各坐标数值差的最大值
    * cityblock_distance 曼哈顿距离,  也被称为L1距离或城市街区距离,是度量两点在标准坐标系上的绝对轴距离总和
    * correlation_distance 两个向量之间的相关距离
    * cosine_distance 余弦距离 衡量的是两个向量在方向上的差异性,而不是在大小上的差异
    * jensenshannon_distance JS散度(Jensen-Shannon divergence) 衡量两个概率分布差异,基于KL散度但是对称且总是有界  
    * minkowski_distance 闵可夫斯基距离 广泛用于度量两个点在n维空间中的距离的方法,它是欧式距离、曼哈顿距离和切比雪夫距离等多种距离度量的一般化形式
    * dice_distance Dice系数(Dice Coefficient)也称为Sørensen-Dice系数,是一种用于衡量两个样本集合的相似度的统计工具。它通常用于计算两组数据之间的相似性

  #### 布尔向量距离: 仅支持U32: 
    * hamming_distance 汉明距离(Hamming Distance)是两个字符串之间的差异度量,定义为在相同的位置上有不同字符的数量
    * jaccard_distance 杰卡德相似系数(Jaccard Similarity Coefficient)是用来衡量两个集合之间相似度的指标。它定义为两个集合交集大小与并集大小之比。
    * kulsinski_distance 库尔辛斯基差异(Kulsinski dissimilarity) 计算两个布尔一维数组之间的库尔辛斯基差异
    * rogerstanimoto_distance 衡量布尔向量之间相似性的距离度量方法。它是在布尔向量(即只包含0和1的向量)之间计算的一种距离,特别适用于二进制数据的比较
    * russellrao_distance Russell-Rao 距离‌是一种用于衡量布尔向量之间相似度的度量方法。它属于距离度量的一种,专门设计用于处理二进制或布尔类型的数据
    * sokalmichener_distance: Sokal-Michener 距离是一种用于计算两个布尔一维数组之间差异的方法,它属于相似性和差异性度量的一种
    * sokalsneath_distance: ‌Sokal-Sneath距离‌是一种用于衡量两个向量之间相似性的距离度量方法。它是Sokal-Michener距离的一种变体,专门用于布尔向量或二元向量之间的比较
    * yule_distance:  ‌Yule距离‌是一种用于衡量两个样本集相似性的度量,属于信息论和统计学中的概念

  #### 其它:
   * dtw_init_window DTW动态时间扭曲计算窗口 Q7/单精度浮点 衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词
   * dtw_distance DTW距距 动态时间规整, 估两个序列元素之间的对应关系,根据两个序列元素距离评估两个序列的相似度
   * dtw_path DTW路径,为结果


### Support Vector Machine functions (SVM) 支持向量机函数 (SVM) 主要用于人工智能领域 机器学习算法 是有监督学习中最有影响力的机器学习算法之一
  支持向量机是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化。SVM的目标就是要找到这个超平面。
  支持向量机思想直观,但细节复杂,涵盖凸优化,核函数,拉格朗日算子等理论
  支持向量机是一种二分类模型。它的学习策略是间隔最大化,可以形式化为一个求解凸二次规划的问题,支持向量机的学习算法是求解凸二次规划的最优化问题。
  基础的SVM算法是一个二分类算法,至于多分类任务,可以通过多次使用SVM进行解决
  https://blog.csdn.net/choudan123456/article/details/139602910
  https://blog.csdn.net/lsb2002/article/details/131338700

  * arm_exponent_f32 整数求幂

### Transform functions 变换函数
  #### 傅里叶变换FFT: IFFT为FFT逆变换,  类型支持:Q15/Q31/f32/f64,算法有: 
    * CFFT/CIFFT radix2: 复数IFFT: 可以计算 4,8,16,32, 64,128, 256....点FFT
    * CFFT/CIFFT radix4: 复数IFFT: 所需的乘法运算次数比Radix-2的FFT算法少, 可以计算 4,16, 64, 256, 1024...点FFT
    * RFFT/RIFFT  实数FFT: 与FFT不同之处在于: CFFT将共轭的那一部分去除,减少存储量
    * DCT4/IDCT4 离散余弦变换, 一般用于图像处理,如JPG格式
    * 使用前: 需初始化:  
      + 不带点位初始化,如 arm_cfft_radix2_init_f32 arm_cfft_radix4_init_f32
      + 带点初始化, 如:arm_cfft_init_4096_q15
  #### 其它: 
    * MFCC MFCC梅尔倒谱系数(Mel-scale Frequency Cepstral Coefficients)在语音和话者识别方面,是最常用到的语音特征

### Filtering functions 筛选功能
  * Q31: for Cortex-M3 and Cortex-M4

  * fir: Q7/Q15/Q31/F32/F64
  * fir_fast Q31 快速FIR

  * biquad_cascade_df1 双二阶级联滤波器的处理功能 Q15/Q31/F32
  * biquad_cascade_df1_fast 快速  Q15/Q31/F32

  * conv 序列的卷积  Q15/Q31/F32
  * conv_fast 卷积快速版本 Q31
  * conv_opt 卷积多可选项 Q15/Q7

  * conv_partial 序列的部分卷积 F32/Q15/Q31
  * conv_partial_opt 多可选项 F32/Q15/Q31/Q7
  * conv_partial_fast  F32/Q15/Q31/Q7

  * fir_decimate FIR抽取器的处理功能,主要实现低通滤波去高频噪声,并将输入信号的采样率降低,F64/F32/Q15/Q31
  * fir_decimate_fast: Q15/Q31
  * fir_interpolate  FIR内插滤波器 当FIR滤波器的过渡带需要设计的很窄的时候使用  Q15/Q31/F32
  
  * arm_biquad_cas_df1_32x64_q31 指向高精度Q31双二阶级联滤波器结构的实例
  * arm_biquad_cascade_df2T_f32 浮点转置直接形式II双二阶级联滤波器的处理函数。
  * arm_biquad_cascade_stereo_df2T_f32 浮点转置直接形式II双二阶级联滤波器的处理函数。2个频道
  * arm_biquad_cascade_df2T_f64 F64版
  * arm_biquad_cascade_df2T_compute_coefs_f32  计算新的系数阵列,用于矢量化滤波器(仅适用于Neon)
  
  * fir_lattice 阶梯(格)型滤波器 FIR Lattice是一种滤波结构,它可以有效地计算FIR滤波器的输出序列  Q15/Q31/F32
  * iir_lattice F32/Q31/Q15 IIR阶梯(格)型滤波器
  * lms LMS滤波器 最小均方自适应滤波器 核心思想是通过迭代算法不断调整滤波器的权重,以最小化输入信号与滤波器输出之间的均方误差 F32/Q15/Q31
  * lms_norm 归一化LMS滤波器 F32/Q31/Q15

  * correlate 序列的相关性 F32/F64/Q15/Q31/Q7
  * correlate_opt Q15
  * correlate_fast Q15/Q31
  * correlate_fast_opt  Q15/Q7

  * fir_sparse 稀疏FIR滤波器: 通过线性规划算法实现的设计,对于减少计算复杂度、节约资源 F32/Q31/Q15/Q7
  * circularWrite  循环写入功能,内联实现,F32/Q15/Q7
  * circularRead  循环读取功能,内联实现,F32/Q15/Q7

  * levinson_durbin  Levinson-Durbin算法, 用于求解线性预测系数(Linear Predictive Coding Coefficients, LPCs)。该算法基于递归过程,可以高效地计算出一系列线性预测系数
    https://blog.csdn.net/hanqin4073/article/details/79781692   F32/Q31


### Quaternion functions 四元数函数
  #### 窗函数: 在函数:有峰值旁瓣电平/归一化等效噪声带宽/平面度/建议重叠 指标!
    * welch: Welch(抛物线)窗函数:函数返回一个长度为n的抛物线窗,用于频谱估计等 F64/F32
    * hamming hamming海明窗函数: 余弦窗的一种,又称改进的升余弦窗, 海明窗加权的系数能使旁瓣达到更小, F64/F32
    * hanning hanning汉宁窗函数:升余弦窗的一个特例,是3个矩形时间窗的频谱之和, 可减少频谱泄露, 不知道信号特征但是又想使用平滑窗可选择,F64/F32
    * nuttall3 ‌Nuttall窗(三峰插值谐波算法),‌在电力系统谐波检测、电能计量、以及光伏发电系统谐波分析等方面。Nuttall窗的设计旨在减少频谱泄漏,提高信号处理的精度和准确性,F64/F32
    * nuttall4  Nuttall窗(四项最低旁瓣算法) ,F64/F32
    * nuttall3a Nuttall窗(?) ,指标不同, F64/F32
    * nuttall3b Nuttall窗(?) ,指标不同, F64/F32
    * nuttall4a Nuttall窗(?) ,指标不同, F64/F32
    * nuttall4b Nuttall窗(?) ,指标不同, F64/F32
    * nuttallcb Nuttall窗(?) ,指标不同, F64/F32    
    * blackman_harris_92db Blackman-Harris(布莱克曼窗:通常为92db), 是一种类似于汉明窗与汉宁窗的窗函数,但是主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高 Hamming(汉明窗), F64/F32
    * hft90d Hft90d窗,未找到详细信息, F32
    * hft95 hft95窗,未找到详细信息, F32/F64
    * hft116d hft116d窗,未找到详细信息, F32/F64
    * hft144d hft144d窗,未找到详细信息, F32/F64        
    * hft169d hft169d窗,未找到详细信息, F32/F64
    * hft196d hft196d窗,未找到详细信息, F32/F64
    * hft223d hft223d窗,未找到详细信息, F32/F64    
    * hft248d hft248d窗,未找到详细信息, F32/F64

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值