在学习16QAM的解调,使用的是QAMdmod函数库的一个例子,硬解调,在moddata数据前正常运行,通过高斯信道的运算后解调误码率出奇的高,找不到问题所在
using TySignalProcessing
using TyPlot
using TyMath
using TyCommunication
using TyBase
#-------------------------------1、生成随机信号-------------------------------------
#信源bit,随机信号
rng = MT19937ar(1234)
y = randn(rng, 8000, 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进制输入信号
#----------------调制--------------
hQAMMod = comm_GeneralQAMModulator()
hQAMMod.Constellation = [
-3-3im, -3-1im, -3+3im, -3+1im, # 0 1 2 3
-1-3im, -1-1im, -1+3im, -1+1im, # 4 5 6 7
3-3im, 3-1im, 3+3im, 3+1im, # 8 9 10 11
1-3im, 1-1im, 1+3im, 1+1im ] # 12 13 14 15
data4 = bit2int(codedout,4) #16进制输入信号,每4位二进制码转换为1位16进制码
modData4 = step(hQAMMod, data4) #QAM已调信号
hAWGN = comm_AWGNChannel(; #信道模型·
NoiseMethod="Signal to noise ratio (SNR)",
SNR=30,
SignalPower=0.89,
RandomStream="mt19937ar with seed",
Seed=1234,
)
noisySignal = step(hAWGN, modData4)#信道调制
#--------------解调--------------
hQAMDemod = comm_GeneralQAMDemodulator()
hError = comm_ErrorRate()
receivedData = step(hQAMDemod, noisySignal)
errorStats = step(hError, data4, receivedData)
es1 = "Error rate = %f\n"
es2 = "Number of errors = %d\n"
fprintf(es1, errorStats[1])
fprintf(es2, errorStats[2])