メインコンテンツ

cordicpol2cart

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

説明

[x,y] = cordicpol2cart(theta,r) は、CORDIC アルゴリズム近似を使用して、r*e^(j*theta) の直交座標系の x 座標と y 座標を返します。

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

[x,y] = cordicpol2cart(___,'ScaleOutput',b) では、b のブール値に基づいて、出力がスケールされます。

すべて折りたたむ

次のコードを実行して、アルゴリズムの特定の反復回数における CORDIC ベースの極座標から直交座標への変換の精度を評価します。

wl = 16;
theta = fi(pi/3,1,wl);
r = fi(2,1,wl);

results_array = [];
for niters = 1:(wl-1)
    [x_ref,y_ref] = pol2cart(double(theta),double(r));
    [x_fi,y_fi] = cordicpol2cart(theta,r,niters);

    x_dbl = double(x_fi);
    y_dbl = double(y_fi);

    x_err = abs(x_dbl - x_ref);
    y_err = abs(y_dbl - y_ref);

    x_LSBs = x_err*pow2(x_fi.FractionLength);
    y_LSBs = y_err*pow2(y_fi.FractionLength);

    result = [niters,x_dbl,x_err,x_LSBs,...
             y_dbl,y_err,y_LSBs];
    results_array = [results_array; result];
end

results_table = array2table(results_array,'VariableNames',...
    {'NITERS','X','X ERROR','X LSBs','Y','Y ERROR','Y LSBs'})
results_table=15×7 table
    NITERS       X        X ERROR      X LSBs      Y        Y ERROR      Y LSBs 
    ______    _______    __________    ______    ______    __________    _______

       1       1.4142       0.41415    3392.8    1.4142       0.31785     2603.8
       2      0.63245       0.36758    3011.2    1.8973       0.16531     1354.2
       3       1.0737        0.0737    603.75    1.6873      0.044778     366.82
       4      0.85608       0.14395    1179.2    1.8074       0.07534     617.18
       5      0.96716      0.032867    269.25    1.7505      0.018455     151.18
       6       1.0214      0.021332    174.75    1.7195      0.012551     102.82
       7      0.99438     0.0056453    46.247    1.7351      0.003074     25.182
       8       1.0079     0.0079045    64.753    1.7274     0.0046164     37.818
       9       1.0011     0.0010685    8.7535    1.7313    0.00071019     5.8179
      10       0.9978     0.0022274    18.247    1.7333     0.0012429     10.182
      11      0.99939    0.00064045    5.2465    1.7323    0.00026637     2.1821
      12       1.0002    0.00021405    1.7535    1.7318    0.00022191     1.8179
      13      0.99988    0.00015217    1.2465    1.7321    2.2232e-05    0.18213
      14      0.99963    0.00039631    3.2465    1.7321    2.2232e-05    0.18213
      15      0.99976    0.00027424    2.2465    1.7321    2.2232e-05    0.18213

入力引数

すべて折りたたむ

角度座標。実数値の符号付きまたは符号なしスカラー、ベクトル、行列、またはラジアン単位の角度値を含む多次元配列として指定します。theta のすべての値は範囲 [-2π 2π) 内になければなりません。

thetar は同じデータ型クラスでなければなりません。つまり、thetadouble の場合、rdouble でなければならず、theta が整数型の場合、r は整数型でなければならず、theta が固定小数点型の場合、r は固定小数点型でなければならないといったようになります。

入力が fi オブジェクトの場合は、2 進小数点スケーリングを使用する必要があります。

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

入力振幅値。実数値のスカラー、ベクトル、行列、または多次元配列として指定します。r がスカラーでない場合、theta と同じ次元でなければなりません。

thetar は同じデータ型クラスでなければなりません。つまり、thetadouble の場合、rdouble でなければならず、theta が整数型の場合、r は整数型でなければならず、theta が固定小数点型の場合、r は固定小数点型でなければならないといったようになります。

入力が fi オブジェクトの場合は、2 進小数点スケーリングを使用する必要があります。

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

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

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

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

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

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

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

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

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

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

出力引数

すべて折りたたむ

近似直交座標。スカラー、ベクトル、行列、または多次元配列として返されます。出力のデータ型は入力によって異なります。

  • 入力 r が浮動小数点である場合、出力 [x,y] は入力と同じデータ型をもちます。

  • 入力 r"符号付き" の整数または固定小数点のデータ型の場合、出力 [x,y] は符号付きの fi オブジェクトです。これらの fi オブジェクトは、r よりも 2 ビット長い語長をもちます。また、小数部の長さは r と同じです。

  • 入力 r"符号なし" の整数または固定小数点のデータ型の場合、出力 [x,y] は符号付きの fi オブジェクトです。これらの fi オブジェクトは、r よりも 3 ビット長い語長をもちます。また、小数部の長さは r と同じです。

アルゴリズム

すべて折りたたむ

参照

[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.

拡張機能

すべて展開する

バージョン履歴

R2011a で導入