タグ付けされた質問 「algorithm」

6
ハードウェア除算が乗算よりもはるかに長くかかるのはなぜですか?
マイクロコントローラでの乗算よりもハードウェアの除算に時間がかかるのはなぜですか?たとえば、dsPICでは、除算には19サイクルかかりますが、乗算には1クロックサイクルしかかかりません。 私には、いくつかのチュートリアルを経て事業化アルゴリズムと乗算アルゴリズムウィキペディアに。これが私の推論です。 除算アルゴリズムは、ウィキペディアで復元する低速除法のように、再帰的なアルゴリズムです。これは、stepの(中間)結果がstep kへの入力として使用されるk+1ことを意味します。つまり、これらのアルゴリズムは並列化できません。したがって、n除算を完了するには少なくともサイクルが必要nですが、被除数のビット数は異なります。16ビットの配当の場合、これは少なくとも16サイクルに相当します。 乗算アルゴリズムは再帰的である必要はありません。つまり、並列化することが可能です。ただし、乗算アルゴリズムにはさまざまな種類があり、マイクロコントローラーで使用できるアルゴリズムはわかりません。ハードウェア/マイクロコントローラーで乗算はどのように機能しますか? Dadda乗算器アルゴリズムを見つけました。これは、完了までに1クロックサイクルしかかからないはずです。ただし、ここで得られないのは、ダダのアルゴリズムが3つのステップで進行するのに対し、ステップ1の結果はステップ2などで使用されるということです。これによると、完了するには少なくとも3クロックサイクルかかります。

5
FPGAはマルチコアPCを実行できますか?
FPGAを使用してアルゴリズムを高速化する方法がわかりません。現在、4つの計算を並行して実行できるように、クアッドコアラップトップで時間のかかるリアルタイムアルゴリズムを実行しています。 FPGAのパフォーマンスがさらに向上する可能性があることに最近気付きました。私はそれがどのように機能するか理解していません。FPGAがアルゴリズムを高速化する方法と、ザイリンクスまたはアルテラのFPGAソリューションに切り替えるか、クアッドコアラップトップで計算を実行する必要があるかを説明してください。 追加の詳細:アルゴリズムは、ウェーブレットパケット変換を介して入力された入力を使用して20の人工ニューラルネットワークを実行します すばらしい回答をありがとうございました。

6
PIDアルゴリズム:長い遅延後の高速な入力値の変化を考慮する方法
Arduino Leonardoに基本的なPIDアルゴリズムを実装して、サーボ制御バルブを使用して温水と冷水を混合しようとしています。目標は、温度を可能な限り設定点に近づけることです。特に重要なのは、ユーザーを火傷から保護するために、出力温度が設定値をオーバーシュートしないようにすることです。第二に重要なことは、温度を可能な限り迅速に設定点に近づけることです。 温度のわずかな変化に対して、PIDアルゴリズムの標準的な実装は正常に機能するようです。しかし、お湯がバルブに到達するのを待つときに発生する可能性のある長い遅延を考慮する方法はわかりません。これらの遅延は、バルブ位置を変更した後の標準遅延よりもはるかに長いためです。 明らかに、温水ラインの長さと最後に温水を使用してからの時間に応じて、温水がバルブに到達するまでに数十秒かかることがあるため、この間、水温は低温でほぼ一定のままです温水バルブはすぐに100%開きます。積分成分は大きなエラー値を蓄積し始めます。 お湯が最終的にバルブに到達すると、検出された温度は非常に急速に上昇し、最大お湯温度になります。積分誤差が大きいため、温度が設定値を超えた後、積分値が通常レベルに低下するのを待つため、温水バルブは長時間100%に保持されます。したがって、結果は数秒(10秒間)の最高温度の水になります。 この可能性のある長い遅延を説明する方法がわかりません。そのような場合、最大応答時間を制限するために、積分誤差値の上限(および下限)を設定するのが賢明でしょうか?これは、積分コンポーネントの目的を無効にしているようであり、設定点に到達した後もまだいくらかの遅延を課します。 または、長い遅延後の高速入力変更を処理するより良い方法はありますか? アドバイスをありがとう!

4
マイクロコントローラーのEEPROMの摩耗の平準化
例:ATtiny2313のデータシート(ほとんどのAtmel AVRデータシートと同様)は次のように述べています: 128バイトのインシステムプログラマブルEEPROM耐久性:100,000回の書き込み/消去サイクル プログラムがいくつかの構成を保存するのに2バイトしか必要としないと想像してください、他の126バイトは効果的に浪費されます。私が心配しているのは、2つの構成バイトを定期的に更新すると、デバイスのEEPROMが消耗し、使用できなくなる可能性があることです。EEPROMのどのバイトが信頼できないかを特定の瞬間に追跡できないため、デバイス全体が信頼できなくなります。 利用可能な128のうち1または2バイトのみを効果的に使用するときに、マイクロコントローラのEEPROMでウェアレベリングを行うスマートな方法はありますか?

2
端子間の測定値に基づいて、N端子ブラックボックス内のすべての可能な接続の抵抗を計算します
これはアルゴリズムの作成に関するものであるため、このスレッドには適切なSEではないように見えますが、問題は実際には、特定のパターンの任意の大きな抵抗回路の簡略化に対する体系的なアプローチを見つけることです。 職場では、1つの機器内にいくつかのショートパンツがありますが、どこにあるかわかりません。装置は開けることができないブラックボックスです。私はマルチメーターを取り、利用可能な端子の各組み合わせの抵抗のマトリックスにデータを入力しました。何かのようなもの: ご存知のように、これらの測定は他の端子との相互結合のために意味がありません。ネットが相互にどのように接続されているのかを知りたい-つまり、次の等価回路に示されている抵抗の値を計算したい(N = 4の例)。 この回路のシミュレーション – CircuitLabを使用して作成された回路図 あります: 行われた測定と: 未知の抵抗上記の表に基づいて次のアルゴリズムで回路全体を解く:Σ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です。 「X」抵抗の関数で、端子iとjの間の回路の等価抵抗の式を計算します。簡素化する。 行列[X]を構築するために再配置: ⎛⎝⎜⎜⎜⎜R1 、2R1 、3。。。RN− 1 、N⎞⎠⎟⎟⎟⎟= [ X ] ⎛⎝⎜⎜⎜⎜バツ1 、2バツ1 、3。。。バツN− 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} …

1
連続線形加速度下のAHRSアルゴリズム
私はいくつかのアルゴリズムを試して、連続的な線形加速度と振動(0.4g未満、周波数が10HZ未満)でピッチ、ロール、ヨーを取得しました。読み取り値がドリフトするか、線形加速度の影響を大きく受けるため、どちらも良い結果をもたらしません。私が達成したいのは、外部加速度が+ -0.4g未満の場合、ピッチとロールの誤差は+ -1deg未満でなければなりません。 私はこれらのアルゴリズムを試しました: マジウィックのアルゴリズム。ベータゲインを非常に高く設定すると、収束は速くなりますが、角度は線形加速度の影響を受けやすくなります。私はそれを調整し、線形加速度の下での誤差を+ -0.5degに減らしました。ただし、振動が連続的である場合、測定値はドリフトし、真の値に収束するのに永遠にかかります。線形加速度の下では、ジャイロがより信頼され、計算された角度がジャイロ積分がドリフトするにつれてドリフトするため、それは理にかなっています。 マホニーのアルゴリズム。マジウィックとは異なり、KiとKpにどの値を使用しても、ドリフトしません。ただし、常に線形加速度の影響を受けます。(+ -6degより大きいエラー) 従来のカルマンフィルター。これらの巨大なRおよびQベクトルの調整には、多くの時間が費やされています。これまでのところ、それはマホニーのと同じパフォーマンスを持っています。 カミソリIMUを使用しています。安価なセンサーでは、これと同じ結果を達成することは不可能です。 UKFのようないくつかのオプションがありますが、理解したり実装したりするのは面倒です。 どんな提案も歓迎します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.