data4是我实际想要作为输入的数据,矩阵格式是27001,复数形式,dataIn是示例输入,格式矩阵是1122,也是复数形式但是工作区的值是绝对值要这么才能将data4作为OFDMmod的输入数据?
using TySignalProcessing
using TyPlot
using TyMath
using TyCommunication
#-------------------------------1、生成随机信号-------------------------------------
#信源bit,随机信号
rng = MT19937ar(1234)
y = randn(rng, 800, 1)
#--------------------2、对信号进行信源编码-dpcm编码-------------------------
initcodebook = collect(-1:0.005:2)
优化参数
predictor, codebook, partition = dpcmopt(vec(y), 1, initcodebook)
encodex, = dpcmenco(vec(y), codebook, partition, vec(predictor))
十进制转二进制
i_b = int2bit(encodex, 9)
#--------------------3、对信号进行差错控制编码-卷积编码---------------------
生成网格结构
trellis1 = poly2trellis([5 4], [23 35 0; 0 5 13])
#卷积编码
codedout, = convenc(i_b, trellis1) #2进制输入信号
#----------------16QAM调制--------------
hQAMMod = comm_GeneralQAMModulator()
hQAMMod.Constellation = [-3-3im, -3-1im, -3+3im, -3+1im,
-1-3im, -1-1im, -1+3im, -1+1im,
3-3im, 3-1im, 3+3im, 3+1im,
1-3im, 1-1im, 1+3im, 1+1im ]
data4 = bit2int(codedout,4) #16进制输入信号,每4位二进制码转换为1位16进制码
modData4 = step(hQAMMod, data4) #16QAM调制后的输入数据,2700*1
#-------------OFDM调制----------------------
ofdmm = comm_OFDMModulator(;
FFTLength=128,
NumGuardBandCarriers=[4; 3],
PilotInputPort=true,
PilotCarrierIndices=cat([12; 26; 40; 54; 68 ; 82; 96; 110], [11; 27; 39; 55; 69; 83; 97; 111]; dims=2), #导频位置分配,cat串联数组,dim=列数
NumSymbols=2, #OFDM符号数量
InsertDCNull=true,
)
modDim = info(ofdmm);
dataIn = complex.(randn(rng, 112, 2), randn(rng, 112, 2))
pilotIn = complex.(rand(rng, 8,2), rand(rng, 8, 2))
modSig = step(ofdmm, dataIn, pilotIn)#调制,modsig为调制输出信号
ofdmd = comm_OFDMDemodulator(;
FFTLength=128,
NumGuardBandCarriers=[4, 3],
RemoveDCCarrier=true,
PilotCarrierIndices=[12 11; 26 27; 40 39; 54 55],
PilotOutputPort=true,
CyclicPrefixLength=16,
NumSymbols=2,
NumReceiveAntennas=1,
)
dataOut, pilotOut = step(ofdmd, modSig)
showResourceMapping(ofdmm)