1 均匀分布产生比特序列 c
2 将比特序列映射成 N 个 QPSK 信号 x = (x1; x2; · · · ; xN)
<br /> <br /> 
len = 100000; %测试的len对比特数(长度:len*2)%%%%%%%%%%%%% 产生比特序列 %%%%%%%%%%%%%data=randi([0 1],1, len*2); %产生随机的01比特序列(1X(len*2)的矩阵)%按序列下标奇数偶数分割序列a1=data(1:2:length(data)); %下标为奇数作为信号序列的实部b1=data(2:2:length(data)); %下标为偶数作为信号序列的虚部s = a1+b1*i; %长度为len%%%%%%%%%%%%% 将比特序列映射成N个QPSK信号 %%%%%%%%%%%%%q1=0+0*i; %5pi/4q2=0+1*i; %3pi/4q3=1+1*i; %pi/4q4=1+0*i; %7pi/4sig=zeros(1,len); % sig表示原始信号(1Xlen)for i=1: len %将比特序列映射成QPSK信号x=sqrt(2)/2; y=sqrt(2)/2;if (s(i)==q1)sig(i)=-x-y*1i;endif (s(i)==q2)sig(i)=-x+y*1i;endif (s(i)==q3)sig(i)=x+y*1i;endif (s(i)==q4)sig(i)=x-y*1i;endend
1.1产生01序列
Matlab randint()函数用法https://blog.csdn.net/yimixgg/article/details/87875103
MATLAB中randint与randi的区别
%%新函数2randi([0,1],2,1)-1等价于老函数2randint(2,1)-1
函数形式:randi([imin,imax],m,n)
参数解释:
[imin,imax]表示生成的伪随机数为闭区间[imin,imax]上的所有整数
m,n表示生成伪随机矩阵是m*n维
3.产生 N 个噪声序列 z = (z1; z2; · · · ; zN) 及瑞利信道衰落序列 h = (h1; h2; · · · ; hN)
<br /> 
4 收到序列 Y= (y1; y2; · · · ; yN) 
%%%%%%%%%%%%% 产生噪声序列z、瑞利信道衰落序列H。合成发送信号序列Y %%%%%%%%%%%%%SNR_db = (0:30); %SNR取值0~30for p=1:31 %循环31个SNRerror=0;%错误的个数SNR_w=10.^(SNR_db(p)/10); %单位转换:dB转wnoisePower=1/SNR_w; %noisePower=Sigma^2z = sqrt(noisePower/2)* (randn(1,length(sig)) + 1i*randn(1,length(sig))); %产生高斯噪声序列zH = sqrt(1/2)*(randn(1,length(sig)) + 1i*randn(1,length(sig)));%产生瑞利信道衰落序列HY = sig.*H+z; %合成发送信号序列Y
3.1matlab产生复高斯分布
<br />高斯噪声(方差=Sigma^2)<br />瑞利信道(方差=1)
3.2矩阵叉乘、点乘

5.利用最小欧式距准则检测符号序列 x^
6 解映射恢复比特序列 c^
7 统计错误比特数 num BE,则 BER = num2NBE

for t = 1: len %循环所有的信号for w = 1:4 % 检查距离distance(w) = norm(Y(t) - H(t)*text(w))^2;%接收到的信号到所有星座点的距离endposition= find(distance == min(distance));%找到最小距离的的位置detect(t) = text(position); %解调后的符号if (detect(t)~= sig(t)) %计算错误个数error = error + 1;endendBEP(p) = error/ len; %QPSK仿真的误码率
8.根据不同 SNR 统计相应 BER,并画 BER 曲线
semilogy(SNR_db,BEP,'b*-','linewidth',2) %semilogy函数实现单轴对数坐标转换grid onxlabel('SNR(dB)') %x轴标题ylabel('BEP') %y轴标题title('Bit error probability for differnet SNR'); %图片标题
8.1 semilogy函数
拟合函数:实现单轴对数坐标转换,使曲线看起来更平滑
https://ww2.mathworks.cn/help/matlab/ref/semilogy.html
自然状态下,用plot画的是折线,而不是平滑曲线。
有两种方法可以画平滑曲线,第一种是拟合的方法,第二种是用spcrv,其实原理应该都一样就是插值。
用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单轴对数坐标转换。
clc;clear;close all;x = 0:.1:10;y = 2*x+3;z=log(2*x+3);subplot(311);plot(x,y);title('plot(x,y)');grid onsubplot(312);semilogy(x,y);title('semilogy(x,y)');grid onsubplot(313);plot(x,z);title('plot(x,log(y))');grid on

第二个图和第三个图的曲线其实是一致的。semilogy函数其实是对坐标轴数据的改变,将第三个图的y坐标改成了第一图的数据,这样生成了第二个图,也就是semilogy的图。
简单来说,就是第二个图,是第三个图的曲线+第一个图的纵坐标,即semilogy函数。
大作业:
subplot(211);plot(SNR_db,BEP);title('plot(x,y)');grid onsubplot(212);semilogy(SNR_db,BEP);title('semilogy(x,y)');grid on
9.总
clc;close all;len = 10000; %测试的len对比特数(长度:len*2)%%%%%%%%%%%%% 产生比特序列 %%%%%%%%%%%%%data=randi([0 1],1, len*2); %产生随机的01比特序列%按序列下标奇数偶数分割序列a1=data(1:2:length(data)); %下标为奇数作为信号序列的实部b1=data(2:2:length(data)); %下标为偶数作为信号序列的虚部s = a1+b1*i; %长度为len%%%%%%%%%%%%% 将比特序列映射成N个QPSK信号 %%%%%%%%%%%%%q1=0+0*i; %5pi/4q2=0+1*i; %3pi/4q3=1+1*i; %pi/4q4=1+0*i; %7pi/4sig=zeros(1,len); % sig表示原始信号for i=1: len %将比特序列映射成QPSK信号x=sqrt(2)/2; y=sqrt(2)/2;if (s(i)==q1)sig(i)=-x-y*1i;endif (s(i)==q2)sig(i)=-x+y*1i;endif (s(i)==q3)sig(i)=x+y*1i;endif (s(i)==q4)sig(i)=x-y*1i;endenddistance=zeros(4,1); %表示距离detect=zeros(len,1); %检测值BEP=zeros(1,length(SNR_db)); %表示不同信噪比下的误码率text =zeros(4,1); %理论上的发射机星座点text(1)=-(sqrt(2)/2)-1i*(sqrt(2)/2);text(2)=-(sqrt(2)/2)+1i*(sqrt(2)/2);text(3)=(sqrt(2)/2)+1i*(sqrt(2)/2);text(4)=(sqrt(2)/2)-1i*(sqrt(2)/2);%%%%%%%%%%%%% 产生噪声序列z、瑞利信道衰落序列H。合成发送信号序列Y %%%%%%%%%%%%%SNR_db = (0:30); %SNR取值0~30for p=1:31 %循环31个SNRerror=0;%错误的个数SNR_w=10.^(SNR_db(p)/10); %单位转换:dB转wnoisePower=1/SNR_w; %noisePower=Sigma^2z = sqrt(noisePower/2)* (randn(1,length(sig)) + 1i*randn(1,length(sig))); %产生高斯噪声序列zH = sqrt(1/2)*(randn(1,length(sig)) + 1i*randn(1,length(sig)));%产生瑞利信道衰落序列HY = sig.*H+z; %合成发送信号序列Y%%%%%%%%%%%%% 用最小欧式距准则检测符号序列 %%%%%%%%%%%%%for t = 1: len %循环所有的信号for w = 1:4 % 检查距离distance(w) = norm(Y(t) - H(t)*text(w))^2;%接收到的信号到所有星座点的距离endposition= find(distance == min(distance));%找到最小距离的的位置detect(t) = text(position); %解调后的符号if (detect(t)~= sig(t)) %计算错误个数error = error + 1;endendBEP(p) = error/ len; %QPSK仿真的误码率end%%%%%%%%%%%%% 画图 %%%%%%%%%%%%%%%semilogy(SNR_db,BEP,'b*-','linewidth',2) %semilogy函数实现单轴对数坐标转换grid onxlabel('SNR(dB)') %x轴标题ylabel('BEP') %y轴标题title('Bit error probability for differnet SNR'); %图片标题
