メインコンテンツ

cordiccexp

複素指数の CORDIC ベース近似

説明

y = cordiccexp(theta) は、CORDIC アルゴリズム近似を使用して cos(theta) + j*sin(theta) を計算し、近似された複素数の結果を y で返します。

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

すべて折りたたむ

cordiccexp の近似の結果については、反復回数の効果を参照してください。

wl = 8;
theta = fi(pi/2,1,wl);

output_type = fi([], 1,wl,wl - 2);
results_array = zeros(wl - 1,1,'like',output_type)';

for niters = 1:(wl - 1)
  cis    = cordiccexp(theta,niters);
  fl     = cis.FractionLength;
  x      = real(cis);
  y      = imag(cis);

  x_dbl  = double(x);
  y_dbl  = double(y);

  x_err  = abs(x_dbl - cos(double(theta)));
  y_err  = abs(y_dbl - sin(double(theta)));

  result = [niters,y_dbl,y_err,(y_err*pow2(fl)),...
      x_dbl,x_err,(x_err*pow2(fl))];
  results_array = [results_array; result];
end

results_table = array2table(results_array,'VariableNames',{'NITERS',...
    'Y (SIN)','Y ERROR','Y LSBs','X (COS)','X ERROR','X LSBs'})
results_table=8×7 table
    NITERS    Y (SIN)    Y ERROR     Y LSBs    X (COS)     X ERROR     X LSBs 
    ______    _______    ________    ______    ________    ________    _______

         0          0           0         0           0           0          0
         1    0.70312     0.29688    1.9844    -0.70312     0.70312     1.9844
    1.9844     0.9375      0.0625    1.9844     -0.3125      0.3125     1.9844
    1.9844    0.96875     0.03125    1.9844     -0.0625      0.0625     1.9844
    1.9844    0.96875     0.03125    1.9844      0.0625      0.0625     1.9844
    1.9844    0.98438    0.015625         1           0           0    0.46875
    1.9844    0.98438    0.015625         1     0.03125     0.03125     1.9844
    1.9844          1           0         0    0.015625    0.015625     1.4688

入力引数

すべて折りたたむ

入力配列。符号付きまたは符号なしのスカラー、ベクトル、行列、または多次元配列として指定します。theta のすべての値は実数で、範囲 [-2π 2π) 内になければなりません。

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

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

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

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

  • 固定小数点入力 — 反復の最大回数は theta の語長よりも 1 少なくなります。

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

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

出力引数

すべて折りたたむ

近似複素指数 e^(j*theta)。スカラー、ベクトル、行列、または多次元配列として返されます。出力のデータ型は入力によって異なります。

  • 入力 theta が浮動小数点の場合、出力データ型は入力型と同じになります。

  • 入力 theta が固定小数点である場合、出力の語長は入力の語長と等しく、小数部の長さは語長から 2 を引いた長さと等しくなります。

アルゴリズム

すべて折りたたむ

参照

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

拡張機能

すべて展開する

バージョン履歴

R2010a で導入