%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;%演示传输过程,其实可以省略只是为了个更好的展现整个调制传输解调的过程
modulate%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中可以直接运行得到结果.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。