[应用相关] 关于stm32 dsp库中的arm_recip_q31函数

[复制链接]
 楼主| 豌豆爹 发表于 2024-7-29 11:27 | 显示全部楼层 |阅读模式
在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 类型测试一下,这样不容易搞错数据格式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

531

主题

2170

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部