强调文本此代码与以下链接中提供的matlab文件集成运行
https://github.com/zhongyuanzhao/dl_ofdm
在替换了上面链接中提供的python代码中的某些库之后,该代码开始运行并生成混淆矩阵,但是几分钟后,标题上提到的错误出现了。 我尝试运行的python代码在下面的代码部分中提供
#! /usr/bin/python
from numpy import genfromtxt
#import tensorflow as tf
import numpy as np
import os
import time
import scipy.io as sio
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
flags = tf.app.flags
flags.DEFINE_string('data_dir','./mat/','directory .mat data is saved')
flags.DEFINE_string('save_dir','./model/','directory where model graph and weights are saved')
#flags.DEFINE_string('data_dir','../mat/','directory .mat data is saved')
#flags.DEFINE_string('save_dir','../model/','directory where model graph and weights are saved')
flags.DEFINE_integer('nbits',1,'bits per symbol')
flags.DEFINE_integer('msg_length',102400,'Message Length of Dataset')
flags.DEFINE_integer('batch_size',512,'')
flags.DEFINE_integer('max_epoch_num',1000,'')
flags.DEFINE_integer('seed','random seed')
flags.DEFINE_integer('nfft',64,'Dropout rate TX conv block')
flags.DEFINE_integer('nsymbol',8,'number of OFDM symbols per frame')
flags.DEFINE_integer('npilot','number of pilot cells per OFDM symbol')
flags.DEFINE_integer('nguard','number of guard bands per OFDM symbol (without DC)')
flags.DEFINE_integer('nfilter',80,'number of filters')
flags.DEFINE_float('snR',3.0,'Signal to Noise Ratio')
flags.DEFINE_integer('early_stop',100,'number of epoches for early stop')
flags.DEFINE_string('channel','AWGN','AWGN or Rayleigh Channel')
flags.DEFINE_boolean('cp',False,'If include cyclic prefix')
flags.DEFINE_boolean('load_model','Set True if run a test')
flags.DEFINE_string('token','OFDM','Name of model to be saved')
flaGS = flags.flaGS
class testflag:
def __init__(self):
self.token='OFDM'
self.split=1.0
self.load_model=True
self.cp = False
self.early_stop = 100
self.snR = 3.0
self.nfilter=80
self.nguard = 8
self.npilot=8
self.nsymbol=8
self.nfft=64
self.seed=1
self.max_epoch_num=1000
self.batch_size=512
self.msg_length=102400
self.nbits=1
self.save_dir='./model/'
class ofdm_tx:
def __init__(self,sflag):
self.K=sflag.nfft
self.CP = sflag.nfft//4
self.DC = 2
self.G = sflag.nguard
self.P = sflag.npilot
self.nSymbol = sflag.nsymbol
self.nfft=64
self.nbits=sflag.nbits
def load_model_np(path,session):
graph = session.graph
saver = tf.train.import_meta_graph(path + '.meta',clear_devices=True)
saver.restore(session,path)
print("Load Model: %s" % (path))
y = graph.get_tensor_by_name('bits_in:0')
x = graph.get_tensor_by_name('tx_ofdm:0')
iq_receiver = graph.get_tensor_by_name('input:0')
outputs = graph.get_tensor_by_name('output:0')
total_loss = graph.get_tensor_by_name('cost:0')
ber = graph.get_tensor_by_name('log_ber:0')
berlin = graph.get_tensor_by_name('linear_ber:0')
conf_matrix = graph.get_tensor_by_name('conf_matrix:0')
power_tx = graph.get_tensor_by_name('tx_power:0')
noise_pwr = graph.get_tensor_by_name('noise_power:0')
iq_rx = graph.get_tensor_by_name('iq_rx:0')
iq_tx = graph.get_tensor_by_name('iq_tx:0')
ce_mean = graph.get_tensor_by_name('ce_mean:0')
snR = graph.get_tensor_by_name('snR:0')
return y,x,iq_receiver,outputs,total_loss,ber,berlin,conf_matrix,power_tx,noise_pwr,iq_rx,iq_tx,ce_mean,snR
def test_model(path_prefix_min,ofdmobj,session):
y,snR = load_model_np(path_prefix_min,session)
print("Final Test snR: -10-30 dB")
mod_names = ['BPSK','QPSK','8QAM','16QAM']
nfft = ofdmobj.K
nbits = ofdmobj.nbits
npilot = ofdmobj.P # last carrier as pilot
nguard = ofdmobj.G
nsymbol = ofdmobj.nSymbol
DC = ofdmobj.DC
frame_size = nfft - nguard - npilot - DC
msg_length = 16000
n_fr = msg_length//nsymbol
n_sc = nfft + ofdmobj.CP
for snr_t in range(-10,30):
mat_name = '%sofdm_awgn_%s_%ddB.mat'%(flaGS.data_dir,mod_names[nbits-1],snr_t)
matfile = sio.loadmat(mat_name)
iq_matlab = matfile['y']
txbits_matlab = matfile['txbits']
test_xs = np.transpose(iq_matlab,axes=[1,0])
test_xs = np.reshape(test_xs,[msg_length//nsymbol,nsymbol,-1])
xs_real = np.reshape(np.real(test_xs),[n_fr,n_sc,1])
xs_imag = np.reshape(np.imag(test_xs),1])
test_xs = np.concatenate([xs_real,xs_imag],axis=-1)
test_ys = np.reshape(txbits_matlab,[msg_length,frame_size,nbits])
snr_test = 100 * np.ones((msg_length//nsymbol,1)) # noise is already included in test_xs from matlab
confmax,berl,pwr_tx,pwr_noise,test_loss,tx_sample,rx_sample = session.run([conf_matrix,iq_rx],{x: test_xs,y: test_ys,snR:snr_test})
print("snR: %.2f,ber: %.8f,Loss: %f"%(snr_t,test_loss))
print("Test Confusion Matrix: ")
print(str(confmax))
session.close()
def main(argv):
# Get current working directory
cwd = os.getcwd()
token = "OFDM_Dense3"
# From Previous Test,max_epoch_num = 120~200 is ok
batchsize = 512
n_filter = flaGS.nfilter # 128
# save_dir = "./ofdm_saved/"
# save_dir = "./ofdm_np_dc/"
save_dir = flaGS.save_dir
data_dir = flaGS.data_dir
ebno = 3.0
for nbits in range(1,5):
snr = float(ebno*nbits)
max_epoch_num = 1200 * nbits
cond = "%dmod"%(nbits)
for cp in ['False','True']:
tflag = testflag()
chan = 'AWGN'
# chan = 'EPA'
tflag.batch_size=batchsize
tflag.cp=cp
tflag.channe=chan
tflag.save_dir=save_dir
tflag.early_stop=100
tflag.nfilter=n_filter
tflag.max_epoch_num=max_epoch_num
tflag.snR=snr
tflag.nbits=nbits
token1 = "%s_%s_snr%d_cp%s" % (token,cond,int(snr),cp)
tflag.token = token1
path_prefix_min = '%s%s'%(flaGS.save_dir,token1)
ofdmobj = ofdm_tx(tflag)
session = tf.Session()
session.run(tf.global_variables_initializer())
test_model(path_prefix_min,session)
session.close()
tf.reset_default_graph()
time.sleep(2)
if __name__ == "__main__":
tf.app.run()
使用%tb查看完整的追溯之后,我收到以下错误消息。
%tb
回溯(最近通话最近一次):
File "<ipython-input-1-062c2c99acc1>",line 1,in <module>
runfile('C:/Users/User/Desktop/OFDM/dl_ofdm-master/test_ofdm_cdnn_awgn.py',wdir='C:/Users/User/Desktop/OFDM/dl_ofdm-master')
文件“ C:\ Users \ User \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,行文件中的第827行 execfile(文件名,命名空间)
exec文件中的第110行,文件“ C:\ Users \ User \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py” exec(compile(f.read(),文件名,'exec'),命名空间)
文件“ C:/用户/用户/桌面/OFDM/dl_ofdm-master/test_ofdm_cdnn_awgn.py”,第172行,在 tf.app.run()
文件“ C:\ Users \ User \ Anaconda3 \ lib \ site-packages \ tensorflow_core \ python \ platform \ app.py”,第40行,正在运行 _run(main = main,argv = argv,flags_parser = _parse_flags_tolerate_undef)
文件“ C:\ Users \ User \ Anaconda3 \ lib \ site-packages \ absl \ app.py”,行299,正在运行 _run_main(main,args)
_run_main中的文件“ C:\ Users \ User \ Anaconda3 \ lib \ site-packages \ absl \ app.py”,第250行 sys.exit(main(argv))
SystemExit