豌豆爹 发表于 2024-7-29 11:27

关于stm32 dsp库中的arm_recip_q31函数

在STM32的dsp中有一个arm_recip_q31函数,应该是求倒数的,哪位大神知道这个函数怎么用?

kzlzqi 发表于 2024-7-29 15:01

arm_recip_q31 函数计算一个 Q31 固定点数的倒数,结果也以 Q31 格式返回。

kzlzqi 发表于 2024-7-29 15:01

arm_recip_q31 函数是 ARM CMSIS-DSP 库中的一个函数,用于计算 Q31 格式数据的倒数。Q31 格式是固定点格式的一种,通常用于低功耗嵌入式系统中的信号处理,以节省计算资源和存储。

申小林一号 发表于 2024-7-29 22:53

感谢分享

申小林一号 发表于 2024-7-29 22:53

感谢分享

纠结的那些年 发表于 2024-7-31 11:55

arm_recip_q31 计算输入的 Q31 数据的倒数,并返回结果。这是特别适用于低功耗应用中的固定点运算,通常用在 DSP(数字信号处理)操作中。

纠结的那些年 发表于 2024-7-31 11:56

Q31 数据格式的范围是从 -2^31 到 2^31 - 1。在计算过程中要注意溢出问题。

AdaMaYun 发表于 2024-7-31 13:28

应该有相关的函数说明手册

七毛钱 发表于 2024-8-4 16:35

以下是一个简单的示例,演示如何使用 arm_recip_q31 函数:

c
#include "arm_math.h"

int main() {
    q31_t value = 0x40000000; // 这是一个 Q31 格式的数字,代表 2.0
    q31_t recip;

    // 计算倒数
    arm_recip_q31(&value, &recip);

    // 输出结果
    printf("Reciprocal of 2.0 in Q31 format is: %d\n", recip);

    return 0;
}
在这个示例中,value 是我们要计算倒数的数字,recip 用于存储计算结果。arm_recip_q31 函数接受两个参数:一个是指向输入值的指针,另一个是指向输出结果的指针。

公羊子丹 发表于 2025-3-20 08:20

这个函数是求 Q31 格式的倒数的,输入一个 Q31 数,输出它的近似倒数,用的是查表+迭代的方法。

周半梅 发表于 2025-3-20 08:21

这个 arm_recip_q31 算出来的倒数是近似值,精度不是特别高,你对误差有什么要求吗?

帛灿灿 发表于 2025-3-20 08:22

你可以参考 CMSIS-DSP 的官方文档,arm_recip_q31 主要是为了提高计算效率,比直接用除法快。

童雨竹 发表于 2025-3-20 08:23

这个函数的输入范围要注意,0 是不能输入的,否则会导致异常,你可以自己加个检查避免问题。

万图 发表于 2025-3-20 08:24

你试过 arm_recip_q31 计算的结果和 1.0/x 直接转换 Q31 比较吗?看看误差大不大?

Wordsworth 发表于 2025-3-20 08:25

这个函数用的是牛顿迭代法,有时候精度不够的话,可以手动多跑几次迭代提高精度。

Bblythe 发表于 2025-3-20 08:26

你是在哪种场景下用这个函数?如果是滤波或者 FFT 计算,可能 arm_recip_q31 不是最好的选择。

Pulitzer 发表于 2025-3-20 08:27

你试试看 arm_recip_q31 计算出来的值,再和原值相乘,看看误差是多少?

Uriah 发表于 2025-3-20 08:28

这个函数的效率比普通浮点除法高不少,如果你的应用是对运算速度要求比较高的,还是挺合适的。

Clyde011 发表于 2025-3-20 08:29

如果 Q31 不太熟悉的话,可以用 q31_t 类型测试一下,这样不容易搞错数据格式。
页: [1]
查看完整版本: 关于stm32 dsp库中的arm_recip_q31函数