Возникли проблемы с вычислением SINR с использованием TensorFlow. Насколько численно стабилен TF, когда дело касается ко ⇐ Python

Программы на Python
Anonymous
Возникли проблемы с вычислением SINR с использованием TensorFlow. Насколько численно стабилен TF, когда дело касается ко

Сообщение Anonymous »

У меня есть код для обучения нейронной сети, и потеря имеет отрицательное значение SINR для системы с несколькими группами (G) и несколькими пользователями (K). Однако, когда я вычисляю sinr, происходит что-то странное.
формула SINR такова:
Изображение

А это мой код:

Код: Выделить всё

def find_sinr_over_group(H, W):

sigma2 = 1
# Compute the Hermitian transpose (conjugate transpose) of W
W_H = tf.transpose(tf.math.conj(W), perm=[0, 2, 1])  # Shape: (batch_size, G, M)

# Compute Signal Power for each user in each group
signal_power = []
for g in range(W.shape[-1]):  # Loop over each group g
w_h_g = W_H[:, g, :]  # Shape: (batch_size, M)
h_g = H[:, :, :, g]  # Shape: (batch_size, M, K)

# Matrix multiplication to compute signal power
s = tf.matmul(w_h_g[:, tf.newaxis, :], h_g)  # Shape: (batch_size, 1, K)
s = tf.squeeze(s, axis=1)  # Shape: (batch_size, K)
signal_power.append(s)

signal_power = tf.stack(signal_power, axis=-1)  # Shape: (batch_size, K, G)
signal_power = tf.math.real(tf.math.multiply(signal_power, tf.math.conj(signal_power)))
# signal_power = tf.math.abs(signal_power) ** 2  # Take the absolute square

# Compute Total Power for each user in each group
total_power = []
for g in range(W.shape[-1]):  # Loop over each group g
w_h = W_H[:, :, :]  # Shape: (batch_size, G, M)
h_g = H[:, :, :, g]  # Shape: (batch_size, M, K)

# Matrix multiplication to compute total power
t = tf.matmul(w_h, h_g)  # Shape: (batch_size, G, K)
t = tf.math.real(tf.math.multiply(t, tf.math.conj(t)))
# t = tf.math.abs(t) ** 2  # Shape: (batch_size, G, K)
total_power.append(tf.reduce_sum(t, axis=1))  # Sum across G to get (batch_size, K)

total_power = tf.stack(total_power, axis=-1)  # Shape: (batch_size, K, G)

# Isolate the Interference Power by subtracting Signal Power from Total Power
interference_power = total_power - signal_power  # Shape: (batch_size, K, G)

# Add noise power
interference_plus_noise_power = interference_power + sigma2  # Add noise

# Compute SINR
sinr = signal_power / interference_plus_noise_power  # Shape: (batch_size, K, G)

return sinr
Но проблема в том, что мощность помех в некоторых случаях отрицательна. Что численно невозможно, поскольку мощность сигнала — это всего лишь частный случай полной мощности. Кто-нибудь знает, почему это происходит и как это исправить?
Как видите, сначала я использовал функцию tf.abd, а затем повысил в степени 2. Я подумал, что это может быть Может быть проблема с прессом, поэтому я попробовал набрать текст с помощью конъюгата, чтобы получить мощность сигнала. Но у меня все еще есть эта проблема.

Подробнее здесь: https://stackoverflow.com/questions/790 ... table-is-t

Вернуться в «Python»