## 基于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