逆離散複素数から実数へのフーリエ変換 (IRDFT)¶
バージョン名: IRDFT-9
カテゴリー: 信号処理
簡単な説明: IRDFT 操作は、入力テンソルの逆複素数から実数への離散フーリエ変換を指定された次元で実行します。
属性:
利用可能な属性はありません。
入力:
1:
data
- IRDFT 変換のデータを含むタイプ T の入力テンソル。入力テンソルの最後の次元は 2 に等しくなければなりません。つまり、入力テンソルの形状は、複素数の実数成分と虚数成分を表す[D_0, D_1, ..., D_{N-1}, 2]
と[:, ..., :, 1]
形式である必要があります。必須。2:
axes
- IRDFT が適用される次元インデックスを指定する 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 (rank(data) - 1) not in axes and (-1) not in axes
。3:
signal_size
- 入力axes
からの軸に関する信号サイズを記述する T_SIZE タイプの 1D テンソル。signal_size[i] == -1
である場合、IRDFT はaxes[i]
軸のフルサイズに対して計算されます。signal_size[i] > data_shape[: r - 1][axes[i]]
の場合、入力データは最後でaxes[i]
軸に対してゼロパディングされます。最後に、signal_size[i] < data_shape[: r - 1][axes[i]]
、次に入力データがaxes[i]
軸に関してトリミングされます。より正確には、signal_size[i] < data_shape[: r - 1][axes[i]]
の場合、axes[i]
軸のスライス0: signal_size[i]
が考慮されます。オプションで、デフォルト値[data_shape[: r - 1][a] for a in axes]
を使用します。注
入力
signal_size
が指定されている場合、signal_size
のサイズはaxes
のサイズと同じである必要があります。
出力:
1: 入力
data
テンソルと同じタイプの要素を持ち、ランクr - 1
を持つ結果のテンソル (r = rank(data)
)。出力の形状は[S_0, S_1, ..., S_{r-2}]
の形式で、すべてのS_a
は次のように計算されます。
normalized_axes
を計算します。ここで、axes[i] >= 0
の場合、normalized_axes[i] = axes[i]
、そうでない場合は、normalized_axes[i] = axes[i] + r - 1
となります。a が normalized_axes
にない場合、S_a = data_shape[a]
となります。a が normalized_axes
にある場合、一部のi
はa = normalized_axes[i]
になります。このような場合、signal_size
入力が指定されていないとS_a = 2 * (data_shape[a] - 1)
、指定されている場合はsignal_size[i] = -1
となります。それ以外はS_a = signal_size[a]
です。また、 +i != len(normalized_axes) - 1
、S_a
がS_a = data_shape[a]
として計算され、signal_size
入力が指定されていないまたは指定されると、signal_size[i] = -1
; およびS_a = signal_size[a]
です。また、 +i = len(normalized_axes) - 1
、S_a
がS_a = 2 * (data_shape[a] - 1)
として計算され、signal_size
入力が指定されていないまたは指定されると、signal_size[i] = -1
; およびS_a = signal_size[a]
です。
タイプ:
T: サポートされている浮動小数点タイプ。
T_IND:
int64
またはint32
。T_SIZE:
int64
またはint32
。
詳細な説明: IRDFT は、次の規則に従って入力テンソルの離散フーリエ変換を行います。
簡単にするために、入力テンソル A
の形状は [B_0, ..., B_{k-1}, M_0, ..., M_{q-1}, 2]
、axes=[k,...,k + q - 1]
、および signal_size=[S_0,...,S_{q-1}]
であると想定します。
D
を入力テンソル A
の値とします。
次に。
のすべてのインデックス j_0,...,j_{k+q-1}
に対して、i
は虚数単位、つまり X
は複素数テンソルです。
次の式を使用して、形状 [B_0, ..., B_{k-1}, 2 * (M_0 - 1), ..., 2 * (M_{q-1} - 1)]
の複素テンソル F
を定義します。
次の方法で、形状 [B_0, ..., B_{k-1}, S_0, ..., S_{q-1}]
を持つ複素テンソル G
を構築します。S_a > 2 * (M_a - 1)
の場合、F
の軸 k + a
にはゼロが埋め込まれます。S_a < 2 * (M_a - 1)
の場合、F
の軸 k + a
がトリミングされます。つまり、この軸のスライス 0: S_a
のみを考慮します。最後に、S_a = 2 * (M_a - 1)
の場合、F
の全軸 k + a
を考慮します。
Y
を次のような形状 [B_0, ..., B_{k-1}, S_0, ..., S_{q-1}]
を持つ複素テンソルとします。
すべてのインデックス n_0,...,n_{k-1}
、m_0,...,m_{q-1}
。
最後に、逆離散複素数から実数へのフーリエ変換の結果は、テンソル Y の実数部になります。
軸と信号サイズの一般的な場合の計算も同様です。
例:
signal_size
入力なし (4D 入力テンソル)
<layer ... type="IRDFT" ... >
<input>
<port id="0">
<dim>1</dim>
<dim>161</dim>
<dim>161</dim>
<dim>2</dim>
</port>
<port id="1">
<dim>2</dim> <!-- [1, 2] -->
</port>
<output>
<port id="2">
<dim>1</dim>
<dim>161</dim>
<dim>320</dim>
</port>
</output>
</layer>
signal_size
入力なし (3D 入力テンソル)
<layer ... type="IRDFT" ... >
<input>
<port id="0">
<dim>161</dim>
<dim>161</dim>
<dim>2</dim>
</port>
<port id="1">
<dim>2</dim> <!-- [0, 1] -->
</port>
<output>
<port id="2">
<dim>161</dim>
<dim>320</dim>
</port>
</output>
</layer>
signal_size
入力あり (4D 入力テンソル)
<layer ... type="IRDFT" ... >
<input>
<port id="0">
<dim>1</dim>
<dim>161</dim>
<dim>161</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>
</port>
</output>
</layer>
signal_size
入力あり (3D 入力テンソル)
<layer ... type="IRDFT" ... >
<input>
<port id="0">
<dim>161</dim>
<dim>161</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>
</port>
</output>
</layer>
signal_size
入力あり (5D 入力テンソル、signal_size
に -1
、ソートされていない軸)
<layer ... type="IRDFT" ... >
<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>
</port>
</output>
</layer>
signal_size
入力あり (5D 入力テンソル、signal_size
に -1
、ソートされていない軸、2 番目の例)
<layer ... type="IRDFT" ... >
<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>
</port>
</output>
</layer>