Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

cordicsin

正弦の CORDIC ベース近似

説明

y = cordicsin(theta) は、CORDIC アルゴリズム近似を使用して theta の正弦を計算します。

y = cordicsin(theta,niters) は、指定された反復回数 niters で CORDIC アルゴリズム近似を使用して、theta の正弦を計算します。

すべて折りたたむ

この例では、cordicsin アルゴリズムによる結果を倍精度の関数 sin の結果と比較します。

[0, 2*pi) の範囲内に 1024 の点を作成します。

stepSize = pi/512;
thRadDbl = 0:stepSize:(2*pi - stepSize);
thRadFxp = sfi(thRadDbl, 12);		% signed, 12-bit fixed point
sinThRef = sin(double(thRadFxp));	% reference results

反復回数を 10 に設定します。

niters = 10;
cdcSinTh  = cordicsin(thRadFxp,  niters);
errCdcRef = sinThRef - double(cdcSinTh);

固定小数点の関数 cordicsin の結果を倍精度の関数 sin の結果と比較します。

figure
hold on
axis([0 2*pi -1.25 1.25])
plot(thRadFxp, sinThRef,  'b');
plot(thRadFxp, cdcSinTh,  'g');
plot(thRadFxp, errCdcRef, 'r');
ylabel('sin(\Theta)');
gca.XTick = 0:pi/2:2*pi;
gca.XTickLabel = {'0','pi/2','pi','3*pi/2','2*pi'};
gca.YTick = -1:0.5:1;
gca.YTickLabel = {'-1.0','-0.5','0','0.5','1.0'};
ref_str = 'Reference: sin(double(\Theta))';
cdc_str = sprintf('12-bit CORDIC sine; N = %d', niters);
err_str = sprintf('Error (max = %f)', max(abs(errCdcRef)));
legend(ref_str, cdc_str, err_str);

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Reference: sin(double(\Theta)), 12-bit CORDIC sine; N = 10, Error (max = 0.005278).

10 回の反復の後、CORDIC アルゴリズムは、theta の正弦を、倍精度正弦の結果である 0.005492 以内に近似しました。

入力引数

すべて折りたたむ

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

CORDIC アルゴリズムを実行する反復回数。正の整数値スカラーとして指定します。

niters を指定しない場合や指定した値が大きすぎた場合は、アルゴリズムでは最大値が使用されます。固定小数点の演算では、反復の最大回数は theta の語長よりも 1 回少なくなります。浮動小数点の演算では、最大値は double で 52、single で 23 です。反復数を増やすと、結果の精度が高まりますが、計算量も増加しレイテンシも増えます。

出力引数

すべて折りたたむ

theta の正弦の CORDIC ベース近似。スカラー、ベクトル、行列または多次元配列として返されます。

関数への入力が浮動小数点である場合、出力のデータ型は入力のデータ型と同じです。入力が固定小数点である場合、出力の語長は入力の語長と等しく、小数部の長さは WordLength2 と等しくなります。

アルゴリズム

すべて折りたたむ

CORDIC

CORDIC は、COordinate Rotation DIgital Computer の略語です。ギブンス回転に基づく CORDIC アルゴリズムは、Shift-Add 反復演算のみを必要とするため、ハードウェア効率が最も優れたアルゴリズムの 1 つです (参考文献を参照)。CORDIC アルゴリズムは、明示的な乗数を必要としません。CORDIC を使用すると、正弦関数、余弦関数、逆正弦関数、逆余弦関数、逆正接関数、ベクトル振幅関数などのさまざまな関数を計算できます。また、このアルゴリズムは除算、平方根、双曲線、対数などの関数にも使用できます。

CORDIC の反復数を増やすと、結果の精度が高まりますが、それにより計算量が増加しレイテンシが増えます。

信号の流れ図

CORDIC 回転モード カーネル

X は正弦を表し、Y は余弦を表し、Z はシータを表します。CORDIC 回転モード カーネルの精度は X、Y および Z の初期値の選択に依存します。このアルゴリズムは以下の初期値を使用します。

z0 is initialized to the θ input argument valuex0 is initialized to 1ANy0 is initialized to 0

fimath の伝播ルール

CORDIC 関数は、入力に追加されたすべてのローカル fimath を破棄します。

CORDIC 関数は、計算の実行時に独自の内部 fimath を使用します。

  • OverflowActionWrap

  • RoundingMethodFloor

出力には fimath が追加されていません。

拡張機能

バージョン履歴

R2010a で導入