このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
cordicsin
正弦の CORDIC ベース近似
説明
例
関数 cordicsin
と関数 sin
の結果の比較
この例では、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);
10 回の反復の後、CORDIC アルゴリズムは、theta の正弦を、倍精度正弦の結果である 0.005492 以内に近似しました。
入力引数
theta
— 入力角度 (ラジアン単位)
スカラー | ベクトル | 行列 | 多次元配列
入力角度 (ラジアン単位)。符号付きまたは符号なしのスカラー、ベクトル、行列、または多次元配列として指定します。theta
のすべての値は実数で、範囲 [–2π 2π) になければなりません。
niters
— 反復回数
正の整数値のスカラー
CORDIC アルゴリズムを実行する反復回数。正の整数値スカラーとして指定します。
niters
を指定しない場合や指定した値が大きすぎた場合は、アルゴリズムでは最大値が使用されます。固定小数点の演算では、反復の最大回数は theta
の語長よりも 1 回少なくなります。浮動小数点の演算では、最大値は double で 52、single で 23 です。反復数を増やすと、結果の精度が高まりますが、計算量も増加しレイテンシも増えます。
出力引数
アルゴリズム
CORDIC
CORDIC は、COordinate Rotation DIgital Computer の略語です。ギブンス回転に基づく CORDIC アルゴリズムは、Shift-Add 反復演算のみを必要とするため、ハードウェア効率が最も優れたアルゴリズムの 1 つです (参考文献を参照)。CORDIC アルゴリズムは、明示的な乗数を必要としません。CORDIC を使用すると、正弦関数、余弦関数、逆正弦関数、逆余弦関数、逆正接関数、ベクトル振幅関数などのさまざまな関数を計算できます。また、このアルゴリズムは除算、平方根、双曲線、対数などの関数にも使用できます。
CORDIC の反復数を増やすと、結果の精度が高まりますが、それにより計算量が増加しレイテンシが増えます。
信号の流れ図
X は正弦を表し、Y は余弦を表し、Z はシータを表します。CORDIC 回転モード カーネルの精度は X、Y および Z の初期値の選択に依存します。このアルゴリズムは以下の初期値を使用します。
fimath の伝播ルール
CORDIC 関数は、入力に追加されたすべてのローカル fimath
を破棄します。
CORDIC 関数は、計算の実行時に独自の内部 fimath
を使用します。
OverflowAction
—Wrap
RoundingMethod
—Floor
出力には fimath
が追加されていません。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
可変サイズ信号はサポートされていません。
CORDIC アルゴリズムによって実行される反復の回数
niters
は、定数でなければなりません。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための Verilog および VHDL のコードを生成します。
関数 cordicsin
の HDL コードを生成できます。
バージョン履歴
R2010a で導入
参考
cordiccexp
| cordiccos
| cordicsincos
| sin
| cos
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)