-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
42 lines (32 loc) · 1.24 KB
/
utils.py
File metadata and controls
42 lines (32 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import numpy as np
import torch as t
import scipy.io as sio
def rate_perf_eval(csis, power, var_noise, k):
power = t.unsqueeze(power, -1)
csis = csis.permute(0, 2, 1)
csis = t.pow(csis, 2)
rx_power = t.mul(csis, power)
mask = t.eye(k)
valid_rx_power = t.sum(t.mul(rx_power, mask), 1)
interference = t.sum(t.mul(rx_power, 1 - mask), 1) + var_noise
rate = t.log2(1 + t.div(valid_rx_power, interference))
sum_rate = t.mean(t.sum(rate, 1))
return sum_rate
def ee_perf_eval(csi, power, var_noise, k,Pc):
power = t.unsqueeze(power, -1)
csi = csi.permute(0,2,1)
csi = t.pow(csi, 2)
rx_power = t.mul(csi, power)
mask = t.eye(k)
valid_rx_power = t.sum(t.mul(rx_power, mask), 1)
interference = t.sum(t.mul(rx_power, 1 - mask), 1) + var_noise
rate = t.log2(1 + t.div(valid_rx_power, interference))
ee = t.div(rate,(t.squeeze(power)+t.FloatTensor([Pc])))
sum_ee = t.mean(t.sum(ee, 1))
return sum_ee
def perf_eval(vaild_csi, model,var_noise,K,Pc):
power_rate = model(vaild_csi, 1)
power_ee = model(vaild_csi, 0)
sum_rate = rate_perf_eval(vaild_csi, power_rate, var_noise, K)
sum_ee = ee_perf_eval(vaild_csi, power_ee, var_noise, K,Pc)
return (sum_rate, sum_ee)