除算もどきでSWR算出を攻略!?
2011-05-28
そもそも、SWRとして求めるべき数の桁数は、小数点以下2桁程度です。また、実数部分もあまり巨大な数までは扱いませんから、加減算だけでもある程度の速度で求められるかも知れないなぁ・・・ちょっと考えてみたいと思います。
まずは肝となるA/D変換ですが、10ビットの分解能に加え、「進行電圧+反射電圧」で桁上がりが生じると、結果的に11ビットになることから16ビット長の処理は必須ですが、ここでは「8ビットマイコンに16ビットを計算させること」の説明は端折ります。そして、しつこく下記の式には登場願いましょう。
SWR = (進行電圧+反射電圧) / (進行電圧-反射電圧)
① ②
まずは、単純に①から②を減算します。最低1回は減算できますよね
ここで、減算された残りをどうするか・・・ここからが本題。さらにもう一度減算しようとすると、以下の2つの事象の何れかが生じます。
・ 減算できない(マイナスになってしまう)・・・A
・ 減算できる・・・B
Bは残念ながら「SWRが2以上」ということになります。さらに減算できれば3、4・・・と、大きくなります。つまり「何回引けたか」を記憶しておけば、それこそSWR100でも1000でも・・・なんですが、まぁ10回ぐらいで諦めた方が良いでしょうね
一方、Aの方は引けないわけですから、10倍した値から減算できるか・・・ここで減算できれば、小数点第一位の計算ができるということです。割り算の筆算を思い出してください。
さて、この「10倍」ですが、乗算ができないPICでは「10回足す」という必殺技でも良いのですが、もう少し簡単にする方法があります。10倍したい数を仮に「X」とします。
<シフトを使った10倍法>
1) Xを3ビット左シフト ・・・イ ← 8倍
2) Xを1ビット左シフト ・・・ロ ← 2倍
3) イとロを加算
簡単ですね
こうして得られた数から②を減算し、その回数を小数第一位の数にします。引けなくなったら、さらに10倍して小数第二位を求めます。もし小数第三位を四捨五入するなら、5回まで減算できたところで第二位に1加算して終了です(桁上がりがあれば、下の桁から順に1加算します)。
もし、9.99まで求めたいとすると、そのループ回数の最大は「9+9+9+5(四捨五入分)」で33回です。勿論、切り捨てで良ければ四捨五入分は要りません。さらにSWR計算故、3.00以上は丸めても(少数計算しなくても)良いでしょう・・・これで、25回以下に抑えられます。桁上がりは最後の四捨五入で全桁の繰り上がりがあったとすると、小数第二位から逆方向に最大3回です。
一方、シフトを使った10倍法にも、8ビット→16ビットへの橋渡しとなる桁上がりが発生し得ます。この辺りの処理を考えていくと案外ステップ数を食ってしまい、あまり速い計算は難しくなってきます。
ただ、まぁSWRの測定は「測定できるまでは待たされる」という当たり前の部分があって、そんなに高速な処理は不要でしょうから、実は今回のカップラのSWR算出論理は変に凝らずにこの技法でも良いかなぁ・・・と思っていたりして
まずは肝となるA/D変換ですが、10ビットの分解能に加え、「進行電圧+反射電圧」で桁上がりが生じると、結果的に11ビットになることから16ビット長の処理は必須ですが、ここでは「8ビットマイコンに16ビットを計算させること」の説明は端折ります。そして、しつこく下記の式には登場願いましょう。
SWR = (進行電圧+反射電圧) / (進行電圧-反射電圧)
① ②
まずは、単純に①から②を減算します。最低1回は減算できますよね

・ 減算できない(マイナスになってしまう)・・・A
・ 減算できる・・・B
Bは残念ながら「SWRが2以上」ということになります。さらに減算できれば3、4・・・と、大きくなります。つまり「何回引けたか」を記憶しておけば、それこそSWR100でも1000でも・・・なんですが、まぁ10回ぐらいで諦めた方が良いでしょうね

一方、Aの方は引けないわけですから、10倍した値から減算できるか・・・ここで減算できれば、小数点第一位の計算ができるということです。割り算の筆算を思い出してください。
さて、この「10倍」ですが、乗算ができないPICでは「10回足す」という必殺技でも良いのですが、もう少し簡単にする方法があります。10倍したい数を仮に「X」とします。
<シフトを使った10倍法>
1) Xを3ビット左シフト ・・・イ ← 8倍
2) Xを1ビット左シフト ・・・ロ ← 2倍
3) イとロを加算
簡単ですね

もし、9.99まで求めたいとすると、そのループ回数の最大は「9+9+9+5(四捨五入分)」で33回です。勿論、切り捨てで良ければ四捨五入分は要りません。さらにSWR計算故、3.00以上は丸めても(少数計算しなくても)良いでしょう・・・これで、25回以下に抑えられます。桁上がりは最後の四捨五入で全桁の繰り上がりがあったとすると、小数第二位から逆方向に最大3回です。
一方、シフトを使った10倍法にも、8ビット→16ビットへの橋渡しとなる桁上がりが発生し得ます。この辺りの処理を考えていくと案外ステップ数を食ってしまい、あまり速い計算は難しくなってきます。
ただ、まぁSWRの測定は「測定できるまでは待たされる」という当たり前の部分があって、そんなに高速な処理は不要でしょうから、実は今回のカップラのSWR算出論理は変に凝らずにこの技法でも良いかなぁ・・・と思っていたりして

- 関連記事
-
- 遠隔君の材料Get!
- 遠隔君の状態と処理内容
- 除算もどきでSWR算出を攻略!?
- A/D変換によるPICのSWR算出ヒント
- カップラのSWR検出