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