10个帖子/ 0新
最后一篇
罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
浮点数学

我正在尝试使用短滤波器(8个浮点乘法并添加)到4 kHz信号,但芯片无法静置。
我在论坛中阅读,有一个浮点库:arm_cortexm0l_math.lib。
我如何将其包含到项目中?

设备:
mt_dialog.
离线
最后一次露面:1个月4周前
职员
加入:2015-06-08 11:34
嗨rony,

嗨rony,

尝试从keil选择CMSIS DSP软件组件,供您的项目和包括ARM_MATH.H文件

谢谢mt_dialog.

罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
如何选择CMSIS DSP

如何从Keil选择CMSIS DSP软件组件?
BTW我做了一些测量,似乎浮点乘以大约5微秒。
是这样吗?

mt_dialog.
离线
最后一次露面:1个月4周前
职员
加入:2015-06-08 11:34
嗨rony,

嗨rony,

请按照Keil网站的链接查看如何在Keil中添加软件包http://www.keil.com/support/man/docs/uv4/uv4_ca_packselect.htm.

关于快速测试的浮点操作我可以验证浮点乘法需要大约5微秒。

谢谢mt_dialog.

罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
我已经测试了时间

没有Keil库的下面的代码测试了时间:

uint32_t time0;
浮动FDDD,YN1,YN2,YN3,YN4;
UINT16_T DDD,XN1,XN2,XN3,XN4;
time0 = lld_evt_time_get();

for(int i = 0; i <100; i ++){
ddd = 17;
FDDD = 0.1672 * DDD -0.6687 * XN1 + 1.0031 * XN2-0.6687 * XN3 + 0.1672 * XN4;
FDDD = FDDD + 0.7821 * YN1-0.68 * YN2 + 0.1827 * YN3-0.0301 * YN4;

xn4 = xn3;xn3 = xn2;xn2 = xn1;xn1 = ddd;
YN4 = YN3;YN3 = YN2;YN2 = YN1;YN1 = FDDD;
}
uint32_t time1 = lld_evt_time_get();

当我检查时间1-time0时,我达到100。
这意味着过滤器计算(8乘以8个添加)需要大约600微秒。

我错了吗?

罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
安装了包装

在建议时安装了包。

在构建项目时,我得到以下内容:
。\ out \ template.axf:警告:l6304w:重复输入文件。\ out \ system_armcm0.o忽略。
.. \ .. \ .. \ .. \ .. \ staptsfiles \ scatterfile_comile_common.sct(327):错误:l6235e:多个部分匹配选择器 - 不能全部/最后。
没有足够的信息来生成Symdefs文件。
没有足够的信息来列出图像符号。
没有足够的信息来列出图像映射。
完成:3个信息,1个警告和1个错误消息。
“。\ \ template.axf” - 1错误,1个警告。
未创建的目标

罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
当包裹是

安装包后,我会在项目中看到2个新项目:
CMSI,包括库
包括startup_armcm0.s和system_armcm0.c的设备

我认为Thare有2个文件system_armcm0.c

您有一个使用浮点库的项目的示例吗?

罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
嗨mt_dialog.

嗨mt_dialog.
我删除了包“设备”,所以我拥有的是cmsis,内部的库。
项目建设成功但我认为该软件正在访问库。
如何强制浮点将浮点路由到此库而不是内置数学库?

Joacimwe.
离线
最后一次露面:1年5个月前
格鲁鲁
加入:2014-01-14 06:45
您不需要使用DSP

您不需要使用DSP库来满足您的截止日期。只需确保使用浮动计算而不是双重计算。像1.0031这样的常数是双面文字而不是浮动文字。写入1.0031F,否则在每次迭代中,您将首先将浮动/ uint16_t值转换为双打,然后完成双重计算,并且当结果存储在FDDD中时,结果将转换回浮动。所以你应该写这样:


uint32_t time0;
浮动FDDD,YN1,YN2,YN3,YN4;
UINT16_T DDD,XN1,XN2,XN3,XN4;
time0 = lld_evt_time_get();

for(int i = 0; i <100; i ++){
ddd = 17;
FDDD = 0.1672F * DDD -0.6687F * xn1 + 1.0031f * xn2-0.6687f * xn3 + 0.1672f * xn4;
FDDD = FDDD + 0.7821F * YN1-0.68F * YN2 + 0.1827F * YN3-0.0301F * YN4;

xn4 = xn3;xn3 = xn2;xn2 = xn1;xn1 = ddd;
YN4 = YN3;YN3 = YN2;YN2 = YN1;YN1 = FDDD;
}
uint32_t time1 = lld_evt_time_get();

提供时间1 = 21,这意味着每次迭代都需要131微秒,这符合4 kHz过滤器的250微秒的截止日期。

罗尼
离线
最后一次露面:4年10个月前
掌握
加入:2014-05-15 15:02
谢谢

上帝保佑你joacimwe。
像冠军一样工作。
拥有一个伟大而宁静的新年