多径造成频率选择性衰落影响评估(matlab)

老师布置的作业,在网上四处搜索,稍作修改后学习总结如下,仅供个人学习参考使用:
一、
0:公共信息,假设qpsk调制解调的映射图为下图,多径造成频率选择性衰落影响评估(matlab)_第1张图片

  1. 随机产生40个0/1 bit,然后按照定义qpsk映射图,试求出20个调制符号(复数),然后在I/Q平面图上,标出这20个符号对应的位置。
    (1)自己写的映射语句,方形星座图,调制后复数为1.0000 + 1.0000i 这种
close all
clear 
sum=20;
data= randsrc(sum,2,[0 1]); %使用[0 1]生成20 * 2随机矩阵,sum行,2列

[a1,b1]=find(data(:,1)==0&data(:,2)==0);  %find返回返回不为0的元素的位置索引
%[a1,b1]为矩阵中非零元素的行和列的索引值
message(a1)=-1-j; % map [ 0 0] to 225°    %把message的第a1行的数据写为-1-j
[a2,b2]=find(data(:,1)==0&data(:,2)==1);
message(a2)=-1+j; % map [ 0 1] to 135°
[a3,b3]=find(data(:,1)==1&data(:,2)==0);
message(a3)=1-j; % map [ 1 0] to 275°
[a4,b4]=find(data(:,1)==1&data(:,2)==1);
message(a4)=1+j;% map [ 1 1] to 45°

disp(message);
scatterplot(message);
axis([-1.2,1.2,-1.2,1.2]);
title('qpsk的星座图');

运行结果
多径造成频率选择性衰落影响评估(matlab)_第2张图片多径造成频率选择性衰落影响评估(matlab)_第3张图片
(2)同上(1)

clear all
n=40;
bit=randint(1,n);%随机产生0 1
s=reshape(bit,20,2);%分成两列
%调制
for i=1:20
    y(i)=cos(pi+s(i,1)*pi)+j*sin((3/2)*pi+s(i,2)*pi);%加pi改变了iq向量图的位移
end
disp(y);
scatterplot(y);%散点图
title('发射信号星座图');xlabel('同相分量');ylabel('正交分量');

运行结果
多径造成频率选择性衰落影响评估(matlab)_第4张图片
多径造成频率选择性衰落影响评估(matlab)_第5张图片
(3)使用MATLAB自带的pskmod函数,星型星座图,调制后复数为0.7071 + 0.7071i 这种(但是结果是四十个复数??)

clear all;
msg = randi([0,1],1,40); % 40个随机0/1 ,生成(1 x 40)的[0, 1]的随机数
figure(1);stem(msg);
msg1 = pskmod(msg,4,pi/4); % 4psk调制  初始相位为 pi/4
disp(msg1);
scatterplot(msg1); axis([-1.2,1.2,-1.2,1.2]);% 画星座图
hold on;
rectangle('Position',[-1, -1, 2, 2],'Curvature',[1, 1]);axis equal; % 画圆

运行结果
多径造成频率选择性衰落影响评估(matlab)_第6张图片
多径造成频率选择性衰落影响评估(matlab)_第7张图片
多径造成频率选择性衰落影响评估(matlab)_第8张图片
2. 依旧还是上述那40bit,调制得到20个符号后,假定每个符号的发射时间间隔为50us,进一步通过2条多径,多径信息为,功率:【0 0】dB,时延为:【0 100】us,试求出接收端此时得到的接收复数值,并在I/Q平面上标出复数位置,并与1的结果对比,理解多径产生码间干扰的过程。

(1)在通信上码间干扰就是卷积,卷积是线性叠加。根据题意,发射时间间隔是50,第二个时延是100,就相当于是间隔两个单位的卷积。将第一题的代码融合了一下,如下:

%多径产生码间干扰
clear 
sum=10000;
data= randsrc(sum,2,[0 1]); %使用[0 1]生成20 * 2随机矩阵

%调制
for i=1:20
    message(i)=cos(pi+data(i,1)*pi)+j*sin((3/2)*pi+data(i,2)*pi);%加pi改变了iq向量图的位移
end
scatterplot(message); axis([-2,2,-2,2]); title('发射信号星座图');

%加多径
w=conv(message,[1 0 1]);%将原信号卷积,时延100,发射间隔50 ,即101,时移为2
scatterplot(w); axis([-3,3,-3,3]); title('多径下接收信号星座图');

(2)运行结果
多径造成频率选择性衰落影响评估(matlab)_第9张图片
多径造成频率选择性衰落影响评估(matlab)_第10张图片
3. 基于蒙特卡洛统计法,仿真QPSK调制/解调系统,通过高斯白噪声信道的误符号率和误码率曲线,其中SNR范围为:【-10:2:10】dB。~注:为了统计稳定,建议每个snr下,bit数不得少于20000bit。

(1)我也不知道蒙特拉蒙统计法是啥=-=?

%QPSK调制/解调
close all
clear 

SNR_DB=[-10:2:10]; %信噪比逐渐提高
sum=10000;
data= randsrc(sum,2,[0 1]); %使用[0 1]生成10000 * 2随机矩阵
% 调制
for i=1:sum
    message(i)=cos(pi+data(i,1)*pi)+j*sin((3/2)*pi+data(i,2)*pi);%加pi改变了iq向量图的位移
end

%加噪
i=0;
for SNR = -10:2:10
    i=i+1;
    %在原始信号中添加高斯白噪声
    receive = awgn(message,SNR);
    resum=0; 
    total=0; 

    m1=find(angle(receive)<=pi/2&angle(receive)>0);  %0~90° :解调[1 1]模式
    % find返回不为0的元素的位置索引==>相当于找到0~90°的复数,重新定义
    remessage(1,m1)=1+j;   %重新定义复数
    redata(m1,1)=1;             %重新定义数据,以备对照原数据
    redata(m1,2)=1;             %比如第m1行的两个数都为1
    m2= find( angle(receive)>pi/2&angle(receive)<=pi); %解调[0 1]模式
    remessage(1,m2)=-1+j;
    redata(m2,1)=0;
    redata(m2,2)=1;
    m3=find( angle(receive)>-pi&angle(receive)<=-pi/2); %解调[0 0]模式
    remessage(1,m3)=-1-j;
    redata(m3,1)=0;
    redata(m3,2)=0;
    m4=find( angle(receive)>-pi/2&angle(receive)<=0);  %解调[1 0]模式
    remessage(1,m4)=1-j;
    redata(m4,1)=1;
    redata(m4,2)=0;

    [resum,ratio1]=symerr(data,redata); % symerr计算符号错误数(相当于bit数,[1,1]逐bit比较的)和符号错误率
    pbit(i)=resum/(sum*2);      %错误bit数/总bit数,误比特率
    [total,ratio2]=symerr(message,remessage); %计算符号错误数和符号错误率([1+j],逐个比较)
    pe(i)=total/sum;                             %错误复数/总复数,误码率
end

%Pe=1-(1-1/2*erfc(sqrt(10.^(SNR_DB/10)/2))).^2;
%Pbit=1/2*erfc(sqrt(10.^(SNR_DB/10)/2));
figure(3);
%semilogy(SNR_DB,pe,':s',SNR_DB,Pe,'-*',SNR_DB,pbit,'-o',SNR_DB,Pbit,':+');
%legend('QPSK仿真误码率','QPSK理论误码率','QPSK仿真误比特率','QPSK理论误比特率',1);
semilogy(SNR_DB,pe,':s',SNR_DB,pbit,'-o');
legend('QPSK仿真误码率','QPSK仿真误比特率',1);
xlabel('信噪比/dB');
ylabel('概率P');
grid on

(2)运行结果
多径造成频率选择性衰落影响评估(matlab)_第11张图片.进一步,假如QPSK调制信号先通过2中定义的多径信道,然后再通过3中定义的高斯噪声,试重新仿真此时的误块率和误码率曲线。
(1)把二三题结合了一下,我也不知道结果对不对

%多径,噪声
close all
clear 

sum =10000;
data= randsrc(sum,2,[0 1]); %使用[0 1]生成1000 * 2随机矩阵
message=[];
rec1message=[];
%调制
for i=1:sum
    message(i)=cos(pi+data(i,1)*pi)+j*sin((3/2)*pi+data(i,2)*pi);%加pi改变了iq向量图的位移
    recmessage=conv(message,[1 0 1]); %将原信号卷积,时延100,发射间隔50 ,即101,时移为2
    rec1message=[rec1message,recmessage(i)]; %按行存储
end
scatterplot(message); axis([-2,2,-2,2]); title('发射信号星座图');
scatterplot(rec1message); axis([-3,3,-3,3]); title('多径接收信号星座图');

%加噪
i=0;
for SNR = -10:2:10
    i=i+1;
    %在原始信号中添加高斯白噪声
    receive = awgn(message,SNR);
    resum=0; 
    total=0; 
   
    m1=find(angle(receive)<=pi/2&angle(receive)>0);  %解调[1 1]模式
    remessage(1,m1)=1+j;
    redata(m1,1)=1;
    redata(m1,2)=1;
    m2= find( angle(receive)>pi/2&angle(receive)<=pi); %解调[0 1]模式
    remessage(1,m2)=-1+j;
    redata(m2,1)=0;
    redata(m2,2)=1;
    m3=find( angle(receive)>-pi&angle(receive)<=-pi/2); %解调[0 0]模式
    remessage(1,m3)=-1-j;
    redata(m3,1)=0;
    redata(m3,2)=0;
    m4=find( angle(receive)>-pi/2&angle(receive)<=0);  %解调[1 0]模式
    remessage(1,m4)=1-j;
    redata(m4,1)=1;
    redata(m4,2)=0;

    [resum,ratio1]=symerr(data,redata); % 'symerr'计算符号错误数和符号错误率
    pbit(i)=resum/(sum*2); %10000个符号-> 20000个位QPSK:每个符号2个bit位
    [total,ratio2]=symerr(message,remessage); %计算符号错误数和符号错误率
    pe(i)=total/sum; %根据定义计算
end

%Pe=1-(1-1/2*erfc(sqrt(10.^(SNR_DB/10)/2))).^2;  %计算理论误码率
%Pbit=1/2*erfc(sqrt(10.^(SNR_DB/10)/2)); %计算理论误比特率
figure;
%semilogy(SNR_DB,pe,':s',SNR_DB,Pe,'-*',SNR_DB,pbit,'-o',SNR_DB,Pbit,':+')
%legend('QPSK仿真误码率','QPSK理论误码率','QPSK仿真误比特率','QPSK理论误比特率',1)
semilogy(SNR_DB,pe,':s',SNR_DB,pbit,'-o');
legend('QPSK仿真误码率','QPSK仿真误比特率',1);
xlabel('信噪比/dB')
ylabel('概率P')
grid on

(2)运行结果
多径造成频率选择性衰落影响评估(matlab)_第12张图片
多径造成频率选择性衰落影响评估(matlab)_第13张图片
多径造成频率选择性衰落影响评估(matlab)_第14张图片

二、另一个同学做的作业
(1)一二题

clc
clear all
len = 40;
bitStream = randi([0 1], 1, len);
qpskMod = [];
for i=1:2:len
    if bitStream(i) == 0
        if bitStream(i + 1) == 0
           qpskMod = [qpskMod exp(j * 5 * pi / 4)];  
        else
            qpskMod = [qpskMod exp(j * 3 * pi / 4)];  
        end
    else
        if bitStream(i + 1) == 0
            qpskMod = [qpskMod exp(j * 7 * pi / 4)]; 
        else 
            qpskMod = [qpskMod exp(j * pi / 4)];     
        end
    end
end
scatterplot(qpskMod);
title('发射信号星座图');xlabel('同相分量');ylabel('正交分量');
qpskMod1 = conv(qpskMod,[1 0 1]);
     for i=1:len/2
         out(i) = qpskMod1(i);
     end 
scatterplot(out);
title('接收信号星座图');
xlabel('同相分量');ylabel('正交分量');

运行结果
多径造成频率选择性衰落影响评估(matlab)_第15张图片
多径造成频率选择性衰落影响评估(matlab)_第16张图片
(2)三四题

clc
clear 
len = 20000; M = 4; 
bitStream = randi([0 1], 1, len); 
qpskMod = [];
for i=1:2:len
    if bitStream(i) == 0
        if bitStream(i + 1) == 0
            qpskMod = [qpskMod exp(j * 5 * pi / 4)];  
        else
            qpskMod = [qpskMod exp(j * 3 * pi / 4)]; 
        end
    else
        if bitStream(i + 1) == 0
            qpskMod = [qpskMod exp(j * 7 * pi / 4)];  
        else 
            qpskMod = [qpskMod exp(j * pi / 4)];    
        end
    end
end
scatterplot(qpskMod);
title('发射信号星座图');xlabel('同相分量');ylabel('正交分量');
 
 for SNR = -10:2:10
     qpskMod1 = conv(qpskMod,[1 0 1]);
     for i=1:len/2
         out(i) = qpskMod1(i);
     end 
     qpskDemod = awgn(out,SNR); 
     bitStreamDemod = [];
     for i=1:length(qpskDemod)
         if real(qpskDemod(i)) >= 0   
             if imag(qpskDemod(i)) >= 0 
                 bitStreamDemod = [bitStreamDemod 1 1];  
             else
                 bitStreamDemod = [bitStreamDemod 1 0];  
             end
         else
             if imag(qpskDemod(i)) >= 0
                 bitStreamDemod = [bitStreamDemod 0 1];  
             else
                 bitStreamDemod = [bitStreamDemod 0 0]; 
             end
         end
     end
     scatterplot(qpskDemod); hold on;axis;
     title(['SNR = ',num2str(SNR)])
     xlabel('同相分量');ylabel('正交分量');
   
     figure(13)
     [errorBit,BER] = biterr(bitStream,bitStreamDemod,log2(M));
     [errorSym,SER] = symerr(bitStream,bitStreamDemod); 
     hold on;
     semilogy(SNR,BER,'-r*',SNR,SER,'-b*');  
     legend('BER','SER');
     title('QPSK在AWGN信道下的性能');
     xlabel('信噪比(dB)');ylabel('误符号率和误比特率');
 end

运行结果
多径造成频率选择性衰落影响评估(matlab)_第17张图片
多径造成频率选择性衰落影响评估(matlab)_第18张图片

多径造成频率选择性衰落影响评估(matlab)_第19张图片

多径造成频率选择性衰落影响评估(matlab)_第20张图片

多径造成频率选择性衰落影响评估(matlab)_第21张图片

多径造成频率选择性衰落影响评估(matlab)_第22张图片
多径造成频率选择性衰落影响评估(matlab)_第23张图片
多径造成频率选择性衰落影响评估(matlab)_第24张图片

多径造成频率选择性衰落影响评估(matlab)_第25张图片

多径造成频率选择性衰落影响评估(matlab)_第26张图片

多径造成频率选择性衰落影响评估(matlab)_第27张图片

多径造成频率选择性衰落影响评估(matlab)_第28张图片

多径造成频率选择性衰落影响评估(matlab)_第29张图片

参考博客如下:

  1. Matlab画星座图 https://www.cnblogs.com/htj10/p/8609291.html
  2. QPSK系统的误码率和星座图MATLAB仿真 http://anony3721.blog.163.com/blog/static/5119742011522101559221/
  3. MATLAB程序:BPSK/QPSK的调制与解调 https://blog.csdn.net/sinat_38151275/article/details/83622688
  4. 【通信原理 入坑之路】—— 详解IQ调制以及星座图原理 https://blog.csdn.net/weixin_44586473/article/details/104066625?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158625445019195162540821%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158625445019195162540821&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-all_SOOPENSEARCH-12

你可能感兴趣的:(多径造成频率选择性衰落影响评估(matlab))