MATLAB-信道

信道

2.1 加性高斯白噪声信道

加性高斯白噪声的均值为0,方差是噪声功率的大小。

2.1.1 awgn函数

MATLAB提供了awgn函数来在输入信号中叠加一定强度的高斯白噪声信号,噪声强度由强度决定

  1. awgn(x, snr)
    在正弦信号上叠加功率为-20dB的高斯白噪声
clear all
t = 0:0.001:10;
x = sin(2*pi*t);
snr = 20;
y = awgn(x,snr);

subplot(2,1,1);plot(t,x);title('正弦信号x')
subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声的正弦信号')

z = y - x ;
var(z)

  1. awgn(x, snr, sigpower)
    与第一种不同之处在假设了输入信号的功率为sigpower ,单位为dBW
    假设信号功率为10dBW,snr保持不变
clear all
t = 0:0.001:10;
x = sin(2*pi*t);
snr = 20;
y = awgn(x,snr,10);  %这里多了一个输入信号的功率10dBW

subplot(2,1,1);plot(t,x);title('正弦信号x')
subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声的正弦信号')

z = y - x ;
var(z)


  1. awgn(x,snr,‘measured’)
    首先计算输入信号x 的功率,根据snr添加高斯白噪声
clear all
t = 0:0.001:10;
x = sin(2*pi*t);
snr = 20;
y = awgn(x,snr,'measured');  % 首先计算输入信号x 的功率,根据snr添加高斯白噪声

subplot(2,1,1);plot(t,x);title('正弦信号x')
subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声的正弦信号')

z = y - x ;
var(z)



2.1.2 randn函数

  • randn(n)
    产生一个随机的n行n列的矩阵,每一行、每一列都服从均值为0,方差为1的正态分布
  • randn(m,n)
    产生一个随机的m行n列的矩阵,每一行、每一列都服从均值为0,方差为1的正态分布
  • randn(‘state’,seed)
    randn(‘state’,seed)把随机数种子设定为seed,相同的state产生相同的随机数序列

2.1.3 AWGN信道仿真

  • 仿真正交相移键控QPSK调制的基带数字通信系统通过AWGN信道的误符号率SER和误比特率BER,假设发射端信息比特采用Gray编码映射,基带脉冲采用矩阵脉冲,仿真时每个脉冲的抽样点数为8,接收端采用匹配滤波器进行相干解调。
clear all
nSamp = 8;              %矩形脉冲的取样点数
numSymb = 1000000;       %每种SNR下的传输的符号数
M=4;                    %QPSK的符号类型数
SNR=-3:3;               %SNR的范围
grayencod=[0 1 3 2];    %Gray编码格式
for ii=1:length(SNR)
    msg=randsrc(1,numSymb,[0:3]);           %产生发送符号
    msg_gr=grayencod(msg+1);                %进行Gray编码影射
    msg_tx=pskmod(msg_gr,M);                %QPSK调制
    msg_tx=rectpulse(msg_tx,nSamp);         %矩形脉冲成形
    msg_rx=awgn(msg_tx,SNR(ii),'measured'); %通过AWGN信道
    msg_rx_down = intdump(msg_rx,nSamp);    %匹配滤波相干解调    
    msg_gr_demod = pskdemod(msg_rx_down,M); %QPSK解调
    [dummy graydecod] = sort(grayencod); graydecod = graydecod - 1;
    msg_demod = graydecod(msg_gr_demod+1); %Gray编码逆映射
    [errorBit BER(ii)] = biterr(msg, msg_demod, log2(M)); %计算BER
    [errorSym SER(ii)] = symerr(msg, msg_demod);          %计算SER
end
scatterplot(msg_tx(1:100))                  %画出发射信号的星座图
title('发射信号星座图')
xlabel('同相分量')
ylabel('正交分量')
scatterplot(msg_rx(1:100))                  %画出接收信号的星座图
title('接收信号星座图')
xlabel('同相分量')
ylabel('正交分量')
figure
semilogy(SNR,BER,'-ro',SNR,SER,'-r*')       %画出BER和SNR随SNR变化的曲线
legend('BER','SER')
title('QPSK在AWGN信道下的性能')
xlabel('信噪比(dB)')
ylabel('误符号率和误比特率')


2.1.4 Simulink中的AWGN模块仿真

1.TX模块:负责产生原始数据
TX模块

2.Rx模块:负责解调通过AWGN信道后的数据
Rx
3.AWGN信道模块:将噪声叠加到Tx模块产生的调制信号中
AWGN模块
4.误比特率与误符号率计算模块
误比特率与误符号率计算模块

AWGN信道的仿真图

clear all
snr=-3:3;               %SNR的范围
SimulationTime=10;  %仿真结束时间
for ii=1:length(snr)
    SNR=snr(ii);        %赋值给AWGN信道模块中的SNR
    sim('ex7');         %运行仿真模型
    ber(ii)=BER(1);     %保存本次仿真得到的BER
    ser(ii)=SER(1);     %保存本次仿真得到的SER
end
figure
semilogy(snr,ber,'-ro',snr,ser,'-r*')
legend('BER','SER')
title('QPSK在AWGN信道下的性能')
xlabel('信噪比(dB)')
ylabel('误符号率和误比特率')

QPSK在AWGN信道下的性能
比较上面的信号仿真实例的仿真图二者仿真结果一致。

2.2 多径衰落信道

2.2.1 Simulink中的多径衰落信道模块仿真

现在的MATLAB2018,2020版本的多径衰落信道模块(multipath rayleigh fading channel)已经改名为SISO Fading Channel 。

  • 模块图

  • 脚本程序
clear all
snr=-3:3;               %SNR的范围
SimulationTime=0;       %仿真结束时间
ex7main;                %运行示例4.7
ser1=ser;ber1=ber;      %保存示例4.7的结果
for ii=1:length(snr)
    SNR=snr(ii);        %赋值给AWGN信道模块中的SNR
    sim('ex11');        %运行仿真模型
    ber(ii)=BER(1);     %保存本次仿真得到的BER
    ser(ii)=SER(1);     %保存本次仿真得到的SER
end
semilogy(snr,ber,'-rs',snr,ser,'-r^',snr,ber1,'-ro',snr,ser1,'-r*')
legend('Rayleigh衰落+AWGN信道BER','Rayleigh衰落+AWGN信道SER','AWGN信道BER','AWGN信道SER')
title('QPSK在AWGN和多径Rayleigh衰落信道下的性能')
xlabel('信噪比(dB)')
ylabel('误符号率和误比特率')
  • 仿真结果

猜你喜欢

转载自blog.csdn.net/qq_40843903/article/details/117917788