8QAM调制解调及误码率计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%1. 产生10000长度的8QAM信号,论证系统在SNR=1,3, 5,7,9,11dB的误码率。

%(推荐Matlab语言)

M = 8;%进行8qam调制;

k = log2(M);%每个码元的bit数;

n = 9999;%因为是8QAM调制,所以不能使用10000,因为10000不能被3整除,在航类转换时会出错

%nsamp = 1;%重复取样速率

x = randint(n,1);%产生一个n列1行的取值为0或1的随机数组

subplot(1,2,1);%在一个1行两列的图形窗口中的第一幅图内画随机数组的前40个数值

plot(x(1:40),'o');%以空心圆点画出前40个x的取值

%stem(x(1:40),'filled');

title('Random Bits');%标题为随机比特流

xlabel('Bit Index'); ylabel('Binary Value');%x坐标为比特序列,y轴为每比特的电平值

xsym = bi2de(reshape(x,k,length(x)/k).','left-msb');

%在这里left-msb的意思是二进制数据中,以左边第一位为最高位来将2进制数翻译成10进制数

%例如:1101用left-msb的标志转换成10进制数就是8+4+1=13;

%但是:1101用right-msb的标志转换成10进制数就是1+2+8=11;

%将2进制的9999行1列的比特流数组按先后顺序转换为

%每行有3个比特,3333行的数组,再对每行进行2进制到10进制的转换,

%x代表要转换的数组,k为转换后数组的每行的比特数,length(x)/k为转换后数组的行数,

y = modulate(modem.qammod(M),xsym);%对转换后的信号进行8QAM的调制,

%xsym这个参数代表预调信号,y代表已调信号

ytx = y;%演示传输过程,其实可以省略只是为了个更好的展现整个调制传输解调的过程

%ytx代表传输信号

SNR_in_dB = 1:2:11;%定义信噪比的数值

for n=1:length(SNR_in_dB)%对每个要求的信噪比进行一次误比特率的统计所以对信噪比进行一个for循环

snr(n) = SNR_in_dB(n);%确定信噪比的数组

ynoisy = awgn(ytx,snr(n),'measured');%将传输信号通过嘉兴高斯白噪声的信道传输得到传输后信号ynoisy

yrx = ynoisy;%解调端接收到的信号为yrx

zsym = demodulate(modem.qamdemod(M),yrx);%解调接收到的yrx信号

z = de2bi(zsym,'left-msb');%将解调出来的信号进行10进制到2进制的转换

z = reshape(z.',prod(size(z)),1);%再将得到的3列乘以3333行的数组转换成1列9999行的数组,

%方便后面的差错检测函数进行一一对比检测

[number_of_errors(n),bit_error_rate(n)] = biterr(x,z);

%误比特数和误比特率检测函数x代表原始信号,z为调制传输解调之后的信号

end;%for循环结束

disp(number_of_errors);%在matlab的command windows窗口显示误比特数

disp(bit_error_rate);%在matlab的command windows窗口显示误比特率subplot(1,2,2);%在1行2列的图形窗口的地2副图显示无毕业率与SNR的关系plot(SNR_in_dB,bit_error_rate,'O');%横坐标为SNR,纵坐标为误比特率

%stem(SNR_in_dB,bit_error_rate,':');

%本程序复制到Matlab中可以直接运行得到结果.

相关文档
最新文档