Questions tagged «algorithm»

6
为什么硬件除法比乘法要花更长的时间?
为什么硬件除法要比微控制器上的乘法花费更多的时间?例如,在dsPIC上,除法需要19个周期,而乘法仅需要一个时钟周期。 我浏览了一些教程,包括Wikipedia上的除法算法和乘法算法。这是我的理由。 像在Wikipedia 上恢复的慢速除法一样,除法算法也是一种递归算法。这意味着step的(中间)结果k用作step 的输入k+1,这意味着这些算法无法并行化。因此,n完成分割至少需要花费周期,而n被除数中的位数是很多。对于16位除数,这至少等于16个周期。 乘法算法不需要递归,这意味着可以并行化它。但是,有许多不同的乘法算法,我不知道微控制器可以使用哪种算法。乘法在硬件/微控制器上如何工作? 我发现了一种Dadda乘法器算法,该算法只需要一个时钟周期即可完成。但是,我没有得到的是Dadda的算法分三步进行,而步骤1的结果用于步骤2,依此类推。因此,这至少需要三个时钟周期才能完成。

5
FPGA可以执行多核PC吗?
我不明白如何使用FPGA加速算法。目前,我正在四核笔记本电脑上运行耗时的实时算法,以便可以并行完成四个计算。 最近我被告知FPGA可能会产生更好的性能。我不明白那是怎么回事。有人可以解释FPGA如何加速算法,以及我应该切换到Xilinx或Altera FPGA解决方案还是继续在我的四核笔记本电脑上执行计算。 附加详细信息:该算法使用通过小波包变换输入的输入来运行20个人工神经网络。 谢谢大家的出色回答。

6
PID算法:长时间延迟后如何考虑快速的输入值变化
我正在尝试在Arduino Leonardo上实现基本的PID算法,以使用伺服控制阀将冷热水混合。目的是使温度尽可能接近设定值。尤其重要的是防止输出温度超过设定值,以保护用户免遭灼伤。其次重要的是尽快使温度接近设定点。 对于较小的温度变化,PID算法的标准实现似乎可以正常工作。但是我不知道如何解决在等待热水到达阀门时可能出现的长时间延迟,因为这些延迟比更改阀门位置后的标准延迟长得多。 显然,取决于热水管线的长度和自上次使用热水以来的时间,热水到达阀门需要花费数十秒的时间,因此在此期间,水温在低温下保持相当恒定热水阀很快就会打开100%。积分分量开始累积较大的误差值。 当热水最终到达阀门时,检测到的温度会迅速上升到最高热水温度。由于较大的积分误差,温度超过设定值后,由于等待积分值降低到正常水平,热水阀长时间保持在100%。因此,结果是几秒钟(数十秒)的最高温度水。 我不确定如何解决这种可能的长时间延迟。在这种情况下,为了限制最大响应时间,在积分误差值上设置一个上限(和下限)是否明智?这似乎无法达到积分部分的目的,并且在达到设定值后仍会出现一定的滞后。 还是有更好的方法来处理长时间的延迟后快速的输入变化? 感谢您的任何建议!

4
微控制器的EEPROM上的磨损均衡
例如:ATtiny2313的数据表(与大多数Atmel AVR数据表一样)指出: 128字节系统内可编程EEPROM耐久性:100,000个写入/擦除周期 想象一个程序只需要两个字节来存储一些配置,其他126个字节实际上被浪费了。让我担心的是,两个配置字节的定期更新可能会使设备的EEPROM失效,并使其失效。整个设备将变得不可靠,因为在某个时刻您无法跟踪EEPROM中的哪些字节不可靠。 当您仅有效使用可用128个字节中的一个或两个字节时,是否存在一种明智的方法来对微控制器的EEPROM进行损耗均衡?

2
根据端子之间的测量值计算N端子黑盒内所有可能连接的电阻
尽管由于这与创建算法有关,这似乎不是适合该线程的SE,但问题实际上是关于找到一种系统方法来简化特定图案的任意大电阻电路。 在工作中,我们在一台设备中有几条短裤,但我们不知道在哪里。设备是无法打开的黑匣子。我已经用万用表填写了每个可用端子组合中的电阻矩阵。就像是: 如您所知,由于与其他端子的交叉耦合,这些测量毫无意义。我想知道网络之间的连接方式-换句话说,我想计算以下等效电路上显示的电阻值(例如N = 4)。 模拟此电路 –使用CircuitLab创建的原理图 有: 测量和: N − 1 ∑ i = 1(i − 1 ) 未知电阻,因此可以根据上表显示整个电路,并给出:以下算法:∑i=1N−1(i−1)∑i=1N−1(i−1)\sum_{i=1}^{N-1}(i-1)∑i=1N−1(i−1)∑i=1N−1(i−1)\sum_{i=1}^{N-1}(i-1) 对于每次测量Rij,其中i和j为0 ... N。 计算端子i和j之间电路等效电阻的公式,该公式取决于“ X”电阻。简化。 ⎛⎝⎜⎜⎜⎜R1,2R1,3...RN−1,N⎞⎠⎟⎟⎟⎟=[X]⎛⎝⎜⎜⎜⎜X1,2X1,3...XN−1,N⎞⎠⎟⎟⎟⎟(R1,2R1,3...RN−1,N)=[X](X1,2X1,3...XN−1,N)\left( \begin{array}{c} R_{1,2}\\ R_{1,3}\\ ...\\ R_{N-1,N}\\ \end{array} \right)= \mathbf{[X]}\left( \begin{array}{c} X_{1,2}\\ X_{1,3}\\ ...\\ X_{N-1,N}\\ \end{array} \right) ⎛⎝⎜⎜⎜⎜X1 ,2X1 ,3。。。Xñ− 1 ,N⎞⎠⎟⎟⎟⎟= [ X ]− 1⎛⎝⎜⎜⎜⎜[R1 …

1
连续线性加速度下的AHRS算法
我尝试了几种算法来获得连续线性加速度和振动(小于0.4g,频率小于10HZ)下的俯仰,侧倾和偏航。它们均未提供良好的结果,因为读数可能漂移或受线性加速度的影响太大。我要实现的是,当外部加速度小于+ -0.4g时,俯仰和横滚的误差应小于+ -1deg。 我已经尝试过这些算法: 麦格威克算法。当Beta增益设置得很高时,收敛速度很快,但是角度更容易受到线性加速度的影响。我将其调低,并将线性加速度下的误差降低至+ -0.5deg。但是,如果振动是连续的,则读数将漂移,并且需要很长时间才能收敛到真实值。这是有道理的,因为在线性加速度下,陀螺仪受到更多的信任,并且计算出的角度随着陀螺仪积分的漂移而漂移。 Mahony的算法。与Madgwick的相反,无论我为Ki和Kp使用什么值,它都不会漂移。但是,它始终受线性加速度的影响。(误差大于+ -6deg) 传统卡尔曼滤波器。在调整那些巨大的R和Q向量上已经花费了很多时间。到目前为止,它具有与Mahony相同的性能。 我正在使用剃刀IMU。我知道使用廉价的传感器不可能获得与这一传感器相同的结果。 还有更多类似UKF的选项,但是很难理解或实施。 任何建议都欢迎。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.