cordiccexp
複素指数の CORDIC ベース近似
説明
例
CORDIC 近似に対する反復回数の影響
次の例は、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
— 入力配列
スカラー | ベクトル | 行列 | 多次元配列
入力配列。符号付きまたは符号なしのスカラー、ベクトル、行列、または多次元配列として指定します。theta
のすべての値は実数で、範囲 [-2π 2π)
内になければなりません。
入力が fi
オブジェクトの場合は、2 進小数点スケーリングを使用する必要があります。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
niters
— CORDIC アルゴリズムの反復回数
正のスカラー整数
CORDIC アルゴリズムで実行する反復回数。正のスカラー整数として指定します。反復数を増やすと、結果の精度が高まりますが、計算量も増加しレイテンシも増えます。
niters
を指定しない場合や指定した値が大きすぎた場合は、アルゴリズムでは入力のデータ型に基づく最大値が使用されます。
固定小数点入力 — 反復の最大回数は
theta
の語長よりも 1 少なくなります。浮動小数点入力 — 最大値は、
double
の場合は52
、single
の場合は23
です。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
出力引数
詳細
CORDIC
CORDIC は、COordinate Rotation DIgital Computer の略語です。ギブンス回転に基づく CORDIC アルゴリズムは、Shift-Add 反復演算のみを必要とするため、ハードウェア効率が最も優れたアルゴリズムの 1 つです (参考文献を参照)。CORDIC アルゴリズムは、明示的な乗数を必要としません。CORDIC を使用すると、正弦関数、余弦関数、逆正弦関数、逆余弦関数、逆正接関数、ベクトル振幅関数などのさまざまな関数を計算できます。また、このアルゴリズムは除算、平方根、双曲線、対数などの関数にも使用できます。
CORDIC の反復数を増やすと、結果の精度が高まりますが、それにより計算量が増加しレイテンシが増えます。
詳細
アルゴリズム
信号の流れ図
X は実数部を表し、Y は虚数部を表し、Z はシータを表します。CORDIC 回転モード カーネルの精度は X、Y および Z の初期値の選択に依存します。このアルゴリズムは以下の初期値を使用します。
z0 は入力引数値 θ に初期化されます。
x0 は 1/AN に初期化されます。
y0 は 0 に初期化されます。
fimath
の伝播ルール
CORDIC 関数は、入力に追加されたすべてのローカル fimath
を破棄します。
CORDIC 関数は、計算の実行時に独自の内部 fimath
を使用します。
OverflowAction
—Wrap
RoundingMethod
—Floor
出力には fimath
が追加されていません。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
可変サイズ信号はサポートされていません。
CORDIC アルゴリズムによって実行される反復の回数
niters
は、定数でなければなりません。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
関数 cordiccexp
は、MATLAB® からの高位合成 (HLS) コード生成もサポートしています。
バージョン履歴
R2010a で導入
参考
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)