matlab仿真 信道(上)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真   刘学勇编著第四章内容,有兴趣的读者请阅读原书)

1.加性高斯白噪声信道(AWGN )

clear all
t=0:0.001:10;
x=sin(2*pi*t);%原始信号
snr=20;%设定加性白噪声的功率
y1=awgn(x,snr);%在原始信号上叠加白噪声
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y1);title('叠加了高斯白噪声后的正弦信号');
z=y1-x;
var(z);%计算方差

figure
y2=awgn(x,snr,10);%在y1的基础上设定了输入信号的功率为10
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y2);title('叠加了高斯白噪声后的正弦信号');

figure
y3=awgn(x,snr,'measured');%将10改为measured,添加的噪声功率根据实际的信号功率计算得到
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y3);title('叠加了高斯白噪声后的正弦信号');

y4=awgn(x,snr,'measured',10)%添加随机数种子,当种子相同时,产生的加性白噪声的结果相同,所以y4和y6相同
y5=awgn(x,snr,'measured',9)
y6=awgn(x,snr,'measured',10)

 

 

clear all
nSamp=8;%矩形脉冲的取样点数,基带脉冲就是数字信号,每个数字信号都采用8个采样点
numSymb=200000; %每种信噪比下传输的符号数
M=4;%QPSK的符号类型数
SNR=-3:3;%信噪比的范围
grayencod=[0 1 3 2];%gray编码形式,00,01,11,10
for ii=1:length(SNR)%每个信噪比都循环一次
    msg=randsrc(1,numSymb,[0:3]);%产生发送符号,因为采用QPSK进行调制,每2个比特映射一个发送符号,因此共有4种类型
    %的发送符号,分别用0-3代表发送比特00、01、11、10
  
    msg_gr=grayencod(msg+1);%加1是因为matlab中的数组索引值不能是0,所以+1确保索引值是正整数
    msg_tx=pskmod(msg_gr,M);%4PSK就是QPSK
    msg_tx=rectpulse(msg_tx,nSamp);%矩形脉冲成形函数,每个脉冲用8个采样点进行采样
    msg_rx=awgn(msg_tx,SNR(ii),'measured');%添加高斯白噪声
    msg_rx_down=intdump(msg_rx,nSamp);%匹配滤波相干解调
    %y = intdump(x,nsamp) 对信号 x 进行一个符号周期的积分,然后将平均后的一个值输出到 Y 中。对于二维信号,函数将每列视为一个通道
    %个人理解是将8个采样点中的平均值作为解调的结果,与rectpulse函数对应
    msg_gr_demod=pskdemod(msg_rx_down,M);%qpsk解调,与pskmod函数相对应
    [dummy graydecod]=sort(grayencod);
     %[B,I] = sort(___) 还会为上述任意语法返回一个索引向量的集合。I 的大小与 A 的大小相同,
    %它描述了 A 的元素沿已排序的维度在 B 中的排列情况。例如,如果 A 是一个向量,则 B = A(I)。I是索引数组
    graydecod=graydecod-1;%索引数组[1-4]->[0-3]

    msg_demod=graydecod(msg_gr_demod+1);%gray解码,用索引数组进行映射实现gray的反映射
    [errorBit BER(ii)]=biterr(msg,msg_demod,log2(M));
    [errorSym SER(ii)]=symerr(msg,msg_demod);%BER和SER的求解
end
scatterplot(msg_tx(1:100));
title('发射信号星座图');
xlabel('同相分量');
ylabel('正交分量');
scatterplot(msg_rx(1:100));
title('接收信号星座图');

2.加性高斯白噪声信道(randn )

 

clear all
t=0:0.001:10;
x=sin(2*pi*t);
px=norm(x).^2/length(x);%计算信号x的功率
snr=20;%信噪比,dB形式
pn=px./(10.^(snr./10));%db公式:10 lg(SNR)=DB,倒推得到噪声公式
n=sqrt(pn)*randn(1,length(x));%由噪声功率得到高斯白噪声序列,因为计算功率时需要幅度平方,所以在求幅度时需要功率开根号
y=x+n;
subplot(2,1,1);plot(t,x);title('正弦信号x');
subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声的正弦信号');

var(n);

3.simulink中的AWGN模块仿真

(见下一篇)

4.多径衰落信道

(这里的书上的定义较多,此处不进行摘录)

 

fuction [h]=rayleigh(fd,t)
%该程序利用改进的jakes模型来产生单径的平坦型瑞利衰落信道
%输入变量说明
%fd:信道的最大多普勒频移,单位HZ
%t:信号的抽样时间序列
%h:输出的瑞利信道函数,是一个时间函数复序列

    %假设的入射波数目
    N=40;
    
    wm=2*pi*fd;
    %每个象限的入射波数目即振荡器数目
    N0=N/4;
    %信道函数的实部
    Tc=zeros(1,length(t));
    %信道函数的虚部
    Ts=zeros(1,length(t));
    %归一化功率系数
    P_nor=sqrt(1/N0);
    %区别各条路径的均匀分布随机相位
    theta=2*pi*rand(1,1)-pi;
    for ii=1:N0
        %第i条入射波的入射角
        alfa(ii)=(2*pi*ii-pi+theta)/N
        %对每个子载波而言在(-pi,pi)之间均匀分布的随机相位
        fi_tc=2*pi*randn(1,1)-pi;
        fi_ts=2*pi*randn(1,1)-pi;
        %计算冲击响应函数
        Tc=Tc+cos(cos(alfa(ii))*wm*t+fi_tc);
        Ts=Ts+cos(cos(alfa(ii))*wm*t+fi_ts);
    end
    %乘归一化功率系数得到传输系数
    h=P_nor*(Tc+j*Ts);

 这里的代码是书上直接给出的,本人还不能理解,这里直接将其作为产生瑞利衰落的已知函数进行使用(后面瑞利衰落信号的产生都需要用到这个代码

clear all
fd=10;
ts=1/1000;
t=0:ts:1;
h1=rayleigh(fd,t);

fd=20;
h2=rayleigh(fd,t);
subplot(2,1,1),plot(20*log10(abs(h1(1:1000))));
title('fd=10Hz时的信道功率曲线')
xlabel('时间');ylabel('功率')
subplot(2,1,2),plot(20*log10(abs(h2(1:1000))));%20lg()是信道公式
title('fd=20Hz时的信道功率曲线')
xlabel('时间');ylabel('功率')

 

clear all
nSamp=8;%矩形脉冲的取样点数,基带脉冲就是数字信号,每个数字信号都采用8个采样点
numSymb=10000; %每种信噪比下传输的符号数
M=4;%QPSK的符号类型数
SNR=-3:3;%信噪比的范围
ts=1/(numSymb*nSamp);
t=(0:numSymb*nSamp-1)*ts;
grayencod=[0 1 3 2];%gray编码形式,00,01,11,10
for ii=1:length(SNR)%每个信噪比都循环一次
    msg=randsrc(1,numSymb,[0:3]);%产生发送符号,因为采用QPSK进行调制,每2个比特映射一个发送符号,因此共有4种类型
    %的发送符号,分别用0-3代表发送比特00、01、11、10
  
    msg_gr=grayencod(msg+1);%加1是因为matlab中的数组索引值不能是0,所以+1确保索引值是正整数
    msg_tx=pskmod(msg_gr,M);%4PSK就是QPSK
    msg_tx=rectpulse(msg_tx,nSamp);%矩形脉冲成形函数,每个脉冲用8个采样点进行采样
    h=rayleigh(10,t);
    msg_tx1=h.*msg_tx;
    msg_rx=awgn(msg_tx,SNR(ii));%添加高斯白噪声
    msg_rx1=awgn(msg_tx1,SNR(ii));%添加高斯白噪声
    msg_rx_down=intdump(msg_rx,nSamp);%匹配滤波相干解调
    msg_rx_down1=intdump(msg_rx1,nSamp);
    msg_gr_demod=pskdemod(msg_rx_down,M);
    msg_gr_demod1=pskdemod(msg_rx_down1,M);
    [dummy graydecod]=sort(grayencod);

    graydecod=graydecod-1;%索引数组[1-4]->[0-3]

    msg_demod=graydecod(msg_gr_demod+1);
    msg_demod1=graydecod(msg_gr_demod1+1);
    
    [errorBit BER(ii)]=biterr(msg,msg_demod,log2(M));
    [errorBit1 BER1(ii)]=biterr(msg,msg_demod1,log2(M));
    [errorSym SER(ii)]=symerr(msg,msg_demod);
    [errorSym SER1(ii)]=symerr(msg,msg_demod1);
end
figure
semilogy(SNR,BER,'-ro',SNR,SER,'-r*',SNR,BER1,'-r.',    SNR,SER1,'-r^')
legend('AWGN信道BER','AWGN信道SER','瑞利衰落+AWGN信道BER','瑞利衰落+AWGN信道SER')
title('QPSK在AWGN和瑞利衰落信道下的性能')
xlabel('信噪比(dB)')
ylabel('误符号率和误比特率')

 

这里和4.6不同的地方在于,我们在采用瑞利噪声时需要设置时间变量,这里题目已经写明信号的抽样时间间隔为1/80000s,

因为我们每个脉冲设置8个抽样点,这里发送时间只有一秒,所以就是在1秒钟发送10000个符号,每个符号采样8次,所以每次差1/80000秒,也就是信号的抽样时间间隔(这里个人理解书上的题目可能是多写了一个0,那里的多普勒频移也是多写了一个0).

之后就是瑞利衰落的影响是乘性干扰,所以这里采用点乘的方式将瑞利干扰叠加在信号上。

 个人理解为,

rayleigh函数施加影响需要点乘

rayleighchan函数需要利用filter进行滤波,两者函数底层代码的实现方式不同,所以使用的方式也不同

5.simulink中的多径衰落信道模块仿真

(见下一篇文章)

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab是一种功能强大的数值计算和仿真软件,可以用于模拟和分析各种类型的信道,包括水下信道。 水下信道是指在水下传输数据的通信路径。由于水下环境的特殊性,信号在水中传播受到许多因素的影响,例如水质、水深、湍流等。仿真水下信道可以帮助我们理解信号在水中的传播过程,并优化通信系统的设计。 Matlab提供了许多工具和函数,可以用于建立水下信道模型并进行仿真。首先,我们可以使用Matlab中的统计工具来分析和建模水下传播环境的参数。根据水下环境的特性,我们可以选择合适的传播模型,例如光传播模型或声波传播模型。 然后,我们可以使用Matlab的信号处理和通信工具箱来模拟和分析数据传输过程。我们可以生成水下信道中的信号,并将其传输到接收端。接收端可以模拟各种接收策略,例如使用均衡器或解码算法来恢复传输的数据。 通过使用Matlab进行水下信道仿真,我们可以实现以下目标: 1. 评估不同传输参数对信号质量和传输速率的影响。例如,我们可以分析水深、湍流强度等因素对信号损失和传输延迟的影响。 2. 比较不同调制和编码方案在水下环境中的性能。通过模拟各种调制方案,我们可以找到适合水下信道的最佳方案。 3. 优化通信系统的设计。通过使用Matlab仿真水下信道,我们可以优化传输参数和算法,以提高数据传输的可靠性和速度。 综上所述,Matlab可以通过提供各种工具和函数来支持水下信道仿真,从而帮助我们研究和优化水下通信系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值