実数値入力の離散フーリエ変換 (RDFT)#
バージョン名: RDFT-9
カテゴリー: 信号処理
簡単な説明: RDFT 操作は、指定された次元による入力テンソルの離散実数から複素数へのフーリエ変換を行います。
属性:
利用可能な属性はありません。
入力
1:
data- RDFT 変換のデータを含むタイプ T の入力テンソル。必須。2:
axes- RDFT が適用される次元インデックスを指定する T_IND タイプの 1D テンソルで、axesは入力テンソルのさまざまな次元のインデックスの順序なしリストです。例えば、[0, 4],[4, 0],[4, 2, 1],[1, 2, 3],[-3, 0, -2]。これらのインデックスは、-rからr - 1までの整数である必要があります (r = rank(data))。負の軸aは、軸r + aとして解釈されます。他の次元は変わりません。axes属性内の要素の順序が重要であり、3 番目の入力signal_size内の要素に直接マッピングされます。必須。3:
signal_size- 入力axesからの軸に関する信号サイズを記述する T_SIZE タイプの 1D テンソル。signal_size[i] == -1である場合、RDFT はaxes[i]軸のフルサイズに対して計算されます。signal_size[i] > data_shape[axes[i]]の場合、入力データは最後でaxes[i]軸に対してゼロパディングされます。最後に、signal_size[i] < data_shape[axes[i]]、次に入力データがaxes[i]軸に関してトリミングされます。より正確には、signal_size[i] < data_shape[axes[i]]の場合、axes[i]軸のスライス0: signal_size[i]が考慮されます。オプションで、デフォルト値[data_shape[a] for a in axes]を使用します。注: 入力
signal_sizeが指定されている場合、signal_sizeのサイズはaxesのサイズと同じである必要があります。
出力
1: 入力
dataテンソルと同じタイプの要素を持ち、ランクr + 1を持つ結果のテンソル (r = rank(data))。出力の形状は[S_0, S_1, ..., S_{r-1}, 2]の形式で、すべてのS_aは次のように計算されます:
normalized_axesを計算します。ここで、axes[i] >= 0の場合、normalized_axes[i] = axes[i]、そうでない場合は、normalized_axes[i] = axes[i] + rとなります。a が normalized_axes にない場合、
S_a = data_shape[a]となります。a が normalized_axes にある場合は、一部の
iはa = normalized_axes[i]になります。i != len(normalized_axes) - 1である場合、S_aは、signal_size入力が指定されていないとS_a = data_shape[a]として計算され、指定されている場合はsignal_size[i] = -1として計算されます。それ以外はS_a = signal_size[a]です。i = len(normalized_axes) - 1である場合、S_aは、signal_size入力が指定されていないとS_a = data_shape[a] // 2 + 1として計算され、指定されている場合はsignal_size[i] = -1として計算されます。それ以外はS_a = signal_size[a] // 2 + 1です。
タイプ
T: サポートされている浮動小数点タイプ。
T_IND:
int64またはint32。T_SIZE:
int64またはint32。
詳細な説明: RDFT は、指定された軸に関して実数値の入力テンソルの離散フーリエ変換を行います。計算は以下のルールに従って行われます。
簡単にするために、入力テンソル A の形状は [B_0, ..., B_{k-1}, M_0, ..., M_{q-1}]、axes=[k,...,k+q-1]、および signal_size=[S_0,...,S_{q-1}] であると想定します。
signal_size を考慮して、D を入力テンソル A とします。したがって、D の形状は [B_0, ..., B_{k-1}, S_0, ..., S_{q-1}] になります。
次に、
のすべてのインデックス j_0,...,j_{k+q-1} は、実数値の入力テンソルになります。
次に、テンソル X の変換 RDFT は、形状 [B_0, ..., B_{k-1}, S_0 // 2 + 1, ..., S_{r-1} // 2 + 1] のテンソル Y であり、次のようになります
すべてのインデックス n_0,...,n_{k-1}、m_0,...,m_{q-1}。
軸と信号サイズの一般的な場合の計算も同様です。
例:
signal_size 入力はありません (3D 入力テンソル):
<layer ... type="RDFT"...>
<input>
<port id="0">
<dim>1</dim>
<dim>320</dim>
<dim>320</dim>
</port>
<port id="1">
<dim>2</dim> <!-- axes input contains [1, 2] -->
</port>
<output>
<port id="2">
<dim>1</dim>
<dim>320</dim>
<dim>161</dim>
<dim>2</dim>
</port>
</output>
</layer>signal_size 入力はありません (2D 入力テンソル):
<layer ... type="RDFT" ... >
<input>
<port id="0">
<dim>320</dim>
<dim>320</dim>
</port> <port id="1">
<dim>2</dim> <!-- axes input contains [0, 1] -->
</port>
<output>
<port id="2">
<dim>320</dim>
<dim>161</dim>
<dim>2</dim>
</port>
</output>
</layer>signal_size 入力 (3D 入力テンソル) があります:
<layer ... type="RDFT" ... >
<input>
<port id="0">
<dim>1</dim>
<dim>320</dim>
<dim>320</dim>
</port>
<port id="1">
<dim>2</dim> <!-- axes input contains [1, 2] -->
</port>
<port id="2">
<dim>2</dim> <!-- signal_size input contains [512, 100] -->
</port>
<output>
<port id="3">
<dim>1</dim>
<dim>512</dim>
<dim>51</dim>
<dim>2</dim>
</port>
</output>
</layer>signal_size 入力 (2D 入力テンソル) があります:
<layer ... type="RDFT" ... >
<input>
<port id="0">
<dim>320</dim>
<dim>320</dim>
</port>
<port id="1">
<dim>2</dim> <!-- axes input contains [0, 1] -->
</port>
<port id="2">
<dim>2</dim> <!-- signal_size input contains [512, 100] -->
</port>
<output>
<port id="3">
<dim>512</dim>
<dim>51</dim>
<dim>2</dim>
</port>
</output>
</layer>signal_size 入力があります (4D 入力テンソル、signal_size に -1、ソートされていない軸):
<layer ... type="RDFT" ... >
<input>
<port id="0">
<dim>16</dim>
<dim>768</dim>
<dim>580</dim>
<dim>320</dim>
</port>
<port id="1">
<dim>3</dim> <!-- axes input contains [3, 1, 2] -->
</port>
<port id="2">
<dim>3</dim> <!-- signal_size input contains [170, -1, 1024] -->
</port>
<output>
<port id="3">
<dim>16</dim>
<dim>768</dim>
<dim>513</dim>
<dim>170</dim>
<dim>2</dim>
</port>
</output>
</layer>signal_size 入力があります (4D 入力テンソル、signal_size に -1、ソートされていない軸、2 番目の例):
<layer ... type="RDFT" ... >
<input>
<port id="0">
<dim>16</dim>
<dim>768</dim>
<dim>580</dim>
<dim>320</dim>
</port>
<port id="1">
<dim>3</dim> <!-- axes input contains [3, 0, 2] -->
</port>
<port id="2">
<dim>3</dim> <!-- signal_size input contains [258, -1, 2056] -->
</port>
<output>
<port id="3">
<dim>16</dim>
<dim>768</dim>
<dim>1029</dim>
<dim>258</dim>
<dim>2</dim>
</port>
</output>
</layer>