结肠表达式来使用整数操作数

4次(最后30天)
慢跑者
慢跑者 在2021年1月28日
评论道: 慢跑者2021年2月4日
下面的代码不能工作,因为冒号操作数不是整数值
stepSize =(π/ 512);
thRadDbl = (0:stepSize:(2*pi - stepSize)); / /执行步骤
问:如何重写结肠表达式中使用整数操作数?
2的评论
慢跑者
慢跑者 2021年2月4日
注意!
我收到一封电子邮件——有人删除了答案!不知道/不知道那是什么。

登录评论。

接受答案

安迪·巴特利特
安迪·巴特利特 2021年1月29日
1)
对于嵌入式设计,如果可能的话,考虑改变你的设计,以革命而不是弧度工作。
1转= 360度= 2 * PI弧度
许多角度传感器是完全匹配于转记录角度。例如,一个规范。片材可以说每个角传感器脉冲等于360度/ 4096这相当于每脉冲2 ^ -12转。同样地,4096个脉冲等于一个革命。对于这种传感器,角度大的数据类型将
数字类型(0,12,12)% 0到刚刚低于1转
数字类型(0,16,12)% 0到16转以下
更新这个角度是无损的,只需要简单的增量或添加。相反,试图以度或弧度记录角度,对于表示360/4096或2*pi/4096,总是会涉及精度损失,并且需要更多的数学和更大的类型。
要像正弦或余弦计算的东西,它通常是有用先做模。一个巨大的优势,在二进制转角标度的固定点是模1转是无损的和繁琐。只是一个简单的屏蔽操作,以保持所有的小数位,并丢弃任何整数位。与此相反,试图做模块360或2 * PI需要更昂贵的计算和可以引入精度损失。
2)
创建包含n个元素的偶数空间向量,覆盖开闭区间[0,valueMax)。
图2a)
你举了一个n = 1000的例子。
如果可能考虑改变到的两个相同的N = 1024 = 2 ^ 10的精确功率。它一般会使数学更好,如果使用转,那么数字将是无损的了。
图2b)
你需要选择一个固定点数据类型为整个矢量。你不能对向量的每个元素使用不同的数据类型。首先确定,准确度等级要求。例如,如果该角度将来自传感器为例进行未来以上4096每转蜱,然后12的一小部分长度是一个理想的选择。基于期望FractionLength,数据类型属性的其余部分可以被确定
2C)
附加的脚本
evenAngleVecCalc.m
示出了如何设置输出数据类型和计算矢量。
安迪
6个评论
慢跑者
慢跑者 2021年2月2日
我已经在解决这个问题的路上了,我有两个选择,
  1. 要有一个短的查找表(32位)——目前,我有128位查找表
我在获得正弦函数输出Q12.20面临的问题>比16位输出Q15.xx更高
2.有cordicsin功能
我有10个迭代的cordicsin函数,增加了延迟/计算复杂度
你可以请建议时,这是很好的选择工作?
- 谢谢

登录评论。

更多的答案(2)

图像分析
图像分析 在2021年1月28日
不正确的。代码运行正常。
也许你应该考虑一下线间距。或者,如果你想把它用作索引,那么就把值四舍五入。

史蒂文的主
史蒂文的主 在2021年1月28日
编辑:史蒂文的主 在2021年1月28日
似乎工作对我罚款。
stepSize =(π/ 512);
thRadDbl = (0:stepSize:(2*pi - stepSize)); / /执行步骤
thRadDbl (1:5)
ans = 1×5
0 0.0061 0.0123 0.0184 0.0245
你不可能使用thRadDbl作为索引向量,因为MATLAB中的数组既没有元素0也没有元素pi/512。
你可以做的一件事是等待乘以 π 直到你构造好向量。
一步= (1/512);
V = PI *(0:步骤:(2步));
v (1:5)
ans = 1×5
0 0.0061 0.0123 0.0184 0.0245
或者也许 sinpi 和/或 cospi 你会对函数感兴趣的。
7评论
图像分析
图像分析 2021年1月29日
呼叫技术支持。万博1manbetx

登录评论。

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!