メインコンテンツ

cordiccart2pol

直交座標から極座標への CORDIC ベースの変換

説明

[theta,rho] = cordiccart2pol(x,y) は、CORDIC アルゴリズムの近似を使用して、直交座標 x および y に格納されているデータの対応する要素を極座標 theta および rho に変換します。

[theta,rho] = cordiccart2pol(x,y,niters) では、CORDIC アルゴリズムの反復が niters 回実行されます。

[theta,rho] = cordiccart2pol(___,'ScaleOutput',b) は、逆 CORDIC ゲイン値によって出力 rho をスケーリングするかどうかを指定します。

すべて折りたたむ

この例では、CORDIC アルゴリズムの近似を使用して固定小数点および浮動小数点の直交座標を極座標に変換する方法を示します。結果を MATLAB® のcart2pol関数と比較します。

[theta_c2p_flt,rho_c2p_flt] = cordiccart2pol(-0.5,0.5)
theta_c2p_flt = 
2.3562
rho_c2p_flt = 
0.7071
[theta_c2p_fxp,rho_c2p_fxp] = cordiccart2pol(fi(-0.5,1,16,15),fi(0.5,1,16,15))
theta_c2p_fxp = 
    2.3562

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13
rho_c2p_fxp = 
    0.7071

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 18
        FractionLength: 15
[theta_mlb_flt,rho_mlb_flt] = cart2pol(-0.5,0.5)
theta_mlb_flt = 
2.3562
rho_mlb_flt = 
0.7071

この例では、CORDIC アルゴリズムの近似を使用して固定小数点の直交座標の配列を極座標に変換する方法を示します。

[theta_pos,rho] = cordiccart2pol(fi([0.75:-0.25:-1.0],1,16,15),fi(0.5,1,16,15))
theta_pos = 
    0.5881    0.7854    1.1072    1.5708    2.0344    2.3562    2.5535    2.6780

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13
rho = 
    0.9014    0.7071    0.5591    0.5000    0.5591    0.7071    0.9014    1.1180

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 18
        FractionLength: 15
[theta_neg,rho] = cordiccart2pol(fi([0.75:-0.25:-1.0],1,16,15),fi(-0.5,1,16,15))
theta_neg = 
   -0.5881   -0.7854   -1.1072   -1.5708   -2.0344   -2.3562   -2.5535   -2.6780

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13
rho = 
    0.9014    0.7071    0.5591    0.5000    0.5591    0.7071    0.9014    1.1180

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 18
        FractionLength: 15

入力引数

すべて折りたたむ

直交座標。スカラー、ベクトル、行列または多次元配列として指定します。xy は同じサイズでなければなりません。サイズが異なる場合は、少なくともいずれか一方の値がスカラーでなければなりません。xy は同じデータ型をもたなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

CORDIC アルゴリズムを実行する反復回数。正の整数値スカラーとして指定します。反復数を増やすと、結果の精度が高まりますが、計算量も増加しレイテンシも増えます。

niters を指定しない場合や指定した値が大きすぎた場合は、アルゴリズムでは入力のデータ型に基づく最大値が使用されます。

  • 固定小数点入力 — 反復の最大回数は rho の語長、または theta の語長から 1 を引いた数のうち、小さいほうになります。

  • 浮動小数点入力 — 最大値は、double の場合は 52single の場合は 23 です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

逆 CORDIC ゲイン値によって出力 rho をスケーリングするかどうか。次の値のいずれかとして指定します。

  • 1 — 出力値に定数を乗算します。これにより、追加の計算が発生します。

  • 0 — 出力をスケーリングしません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi

出力引数

すべて折りたたむ

角度座標。配列として返されます。theta は、x-y 平面内における正の x 軸を始線とした反時計回りの角度 (ラジアン単位) です。角度の値は範囲 [-pi pi] 内です。

x および y が浮動小数点の場合、thetax および y と同じデータ型になります。それ以外の場合、theta は固定小数点データ型となり、語長は x および y と同じで、小数部の長さは範囲 [-pi pi] で最高精度となります。

動径座標。配列として返されます。rho は、x-y 平面上における原点から特定の点までの距離です。

rho は、極座標の半径の大きさの値を返します。rho は実数値であり、スカラーにすることも、theta と同じ次元にすることもできます。

入力 x,y が固定小数点値の場合、rho は 2 進小数点スケーリングを使用した符号付き固定小数点値になります。入力 x,y が符号付きの場合、rho の語長は入力の語長 +2 となります。入力が符号なしの場合、rho の語長は入力の語長 +3 となります。rho の小数部の長さは、常に x,y 入力の小数部の長さと同じになります。

アルゴリズム

すべて折りたたむ

参照

[1] Volder, Jack E. “The CORDIC Trigonometric Computing Technique.” IRE Transactions on Electronic Computers. EC-8, no. 3 (Sept. 1959): 330–334.

[2] Andraka, Ray. “A Survey of CORDIC Algorithm for FPGA Based Computers.” In Proceedings of the 1998 ACM/SIGDA Sixth International Symposium on Field Programmable Gate Arrays, 191–200. https://dl.acm.org/doi/10.1145/275107.275139.

[3] Walther, J.S. “A Unified Algorithm for Elementary Functions.” In Proceedings of the May 18-20, 1971 Spring Joint Computer Conference, 379–386. https://dl.acm.org/doi/10.1145/1478786.1478840.

[4] Schelin, Charles W. “Calculator Function Approximation.” The American Mathematical Monthly, no. 5 (May 1983): 317–325. https://doi.org/10.2307/2975781.

拡張機能

すべて展開する

バージョン履歴

R2011b で導入