Matlab通信仿真系列——加性高斯白噪声信道(AWGN)

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、加性高斯白噪声信道(AWGN)
1、awgn(x,snr)
2、awgn(x,snr,sigpower)
3、awgn(x,snr,'measured')
4、awgn(x,snr,…,state)
5、randn函数
6、各类函数Matlab仿真验证
二、加性高斯白噪声信道(AWGN)的Matlab仿真
三、Matlab源码
1、各类函数Matlab仿真源码
2、加性高斯白噪声信道(AWGN)的Matlab仿真源码

本节内容
信道是将来自发送端的信号传送到接收端的物理媒质,可以分为有线信道和无线信道。信道的质量影响信号的接收和解调,体现在两个方面:一是信号在实际信道中传输时,由于信道特性不理想会引起信号波形的失真;二是信道中存在各种噪声会干扰信号的传输。
信道通常可以分为加性高斯白噪声信道AWGN、多径瑞利Rayleigh衰落信道和莱斯Rician衰落信道。
一、加性高斯白噪声信道(AWGN)
加性高斯白噪声(Additive White Gaussian Noise,AWGN)是最常见的一种噪声,存在与各种传输媒质中。具体表现为信号围绕平均值的一种随机波动过程,均值为0,方差是噪声功率的大小。
Matlab提供了agwn函数来实现在输入信号中叠加一定强度的高斯白噪声信号,噪声信号的强度由输入参数确定。
1、awgn(x,snr)
函数awgn(x,snr),把加性高斯白噪声叠加到输入信号x中,snr以dB的形式制定噪声的功率。若信号x的功率假设为0dBW,噪声的功率实际上为-snrdBW。
2、awgn(x,snr,sigpower)
函数awgn(x,snr,sigpower),把加性高斯白噪声叠加到输入信号x中,snr以dBW的形式制定噪声的功率,输入信号的功率为sigpower,单位dBW。
3、awgn(x,snr,‘measured’)
awgn(x,snr,‘measured’),首先计算输入x信号的功率,按照snr添加相应功率的高斯白噪声。
4、awgn(x,snr,…,state)
Matlab可以将随机数种子设置为state,其中…支持sigpower或’measured’。随机数是根据一定算法产生的伪随机数,把产生的伪随机数的初始条件(即随机数种子)设为一致,也就是前后两次调用state相同,则产生的加性高斯白噪声结果也一致。
5、randn函数
randn(n),返还一个n行n列的随机矩阵,其中每一行和每一列都服从均值为0,方差为1的正态分布。
randn(m,n),返还一个m行n列的随机矩阵,其中每一行和每一列都服从均值为0,方差为1的正态分布。
randn(‘state’,seed)把随机数种子设定为seed,相同的state产生相同的随机数序列。
6、各类函数Matlab仿真验证
在这里插入图片描述

信号x和叠加awgn的信号y1
在这里插入图片描述

信号x和叠加awgn的信号y2
在这里插入图片描述

信号x和叠加awgn的信号y3
在这里插入图片描述

随机数序列y4,y5,y6
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、加性高斯白噪声信道(AWGN)的Matlab仿真

matlab代码示例:
对正交相移键控(QPDK)调制的基带数字通信系统
通过AWGN信号的误符号率SER和误比特率BER进行仿真验证,
发射端信息比特采用Gray编码,
基带脉冲采用矩阵脉冲,
仿真每个脉冲的抽样点数为10,
接收端采用匹配滤波器进行相干解调。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Matlab源码
1、各类函数Matlab仿真源码

clear all;
clc;
t=0:0.001:10;
x=sin(2*pi*t);
snr=20;
y1=awgn(x,snr);
y2=awgn(x,snr,10);
y3=awgn(x,snr,'measured');
x1=ones(1,10);
y4=awgn(x1,snr,'measured',5);
y5=awgn(x1,snr,'measured',10);
y6=awgn(x1,snr,'measured',5);

subplot(2,1,1);
plot(t,x);
title('信号x');
axis([0 10 -2 2]);
subplot(2,1,2);
plot(t,y1);
title('叠加awgn的信号y1');
axis([0 10 -2 2]);
figure;
subplot(2,1,1);
plot(t,x);
title('信号x');
axis([0 10 -2 2]);
subplot(2,1,2);
plot(t,y2);
title('叠加awgn的信号y2');
axis([0 10 -2 2]);
figure;
subplot(2,1,1);
plot(t,x);
title('信号x');
axis([0 10 -2 2]);
subplot(2,1,2);
plot(t,y3);
title('叠加awgn的信号y3');
axis([0 10 -2 2]);

2、加性高斯白噪声信道(AWGN)的Matlab仿真源码

clear all;
clc;
%矩阵脉冲的抽样点数
n_samp=10;    
%传输的符合数      
num_symb=200000;     
%QPDK的符合类型数  
M=4;   
%SNR的范围                 
SNR=-3:3;               
%Gray编码格式
grayencod=[0 1 3 2]     
for ii=1:length(SNR)
    %产生发送符合
    msg=randsrc(1,num_symb,[0:3])   
    %进行Gray编码映射
    msg_gr=grayencod(msg+1);        
    %进行QPSK调制
    msg_tx=pskmod(msg_gr,M);        
    %矩形脉冲成形
    msg_tx=rectpulse(msg_tx,n_samp);
    %通过awgn信道
    msg_rx=awgn(msg_tx,SNR(ii),'measured');       
    %匹配滤波相关解调
    msg_rx_down=intdump(msg_rx,n_samp);
    %QPSK解调    
    msg_gr_demod=pskdemod(msg_rx_down,M);    
    [dummp graydecod]=sort(grayencod);            
    graydecod=graydecod-1;
    %Gray编码逆映射    
    msg_demod=graydecod(msg_gr_demod+1);
    %计算BER    
    [error_bit BER(ii)]=biterr(msg,msg_demod,log2(M)); 
    %计算SER
    [error_sym SER(ii)]=symerr(msg,msg_demod);       
end
%画出发送信号的星座图
scatterplot(msg_tx(1:100));        
title('发射信号星座图');
xlabel('同相分量');
ylabel('正交分量');
%画出接收信号的星座图
scatterplot(msg_rx(1:100));         
title('接收信号星座图');
xlabel('同相分量');
ylabel('正交分量');
figure;
%画出BER和SER随SNR变换的曲线
semilogy(SNR,BER,'-r*',SNR,SER,'-r*')   
legend('BER','SER');
title('QPSK在awgn信道下的性能');
xlabel('信噪比(dB)');
ylabel('误符号率和误比特率');
  • 5
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我了解了你的要求。下面是基于MPSK的数字通带传输系统的构建方法以及MATLAB仿真步骤: 1. 构建基带信号 假设要传输的数字信号为二进制位序列,将其进行调制,得到基带信号。MPSK调制的基带信号可以表示为: $$ s(t)=\sum_{i=1}^{N}s_{i}(t)=\sum_{i=1}^{N}A_{i}\cos(2\pi f_{c}t+\phi_{i}) $$ 其中,$N$为符号数,$A_i$表示第$i$个符号的振幅,$f_c$为载波频率,$\phi_i$表示第$i$个符号的相位。 2. 添加高斯白噪声信道传输过程中,由于各种噪声的影响,接收信号会与发送信号有所不同。在这里,我们考虑加性高斯白噪声信道条件下的数字通带传输系统。因此,我们可以使用MATLAB中的awgn函数来添加高斯白噪声: ``` r = awgn(s,SNR); ``` 其中,$s$为发送信号,$SNR$为信噪比,$r$为接收信号。 3. 进行相干解调 在接收端,我们需要对接收信号进行解调,以得到原始的二进制位序列。由于MPSK调制是相干调制,因此我们可以使用相干解调的方法。相干解调的过程可以用下面的公式表示: $$ z_{i}=\int_{(i-1)T_{s}}^{iT_{s}}r(t)\cos(2\pi f_{c}t+\phi_{i}){\rm d}t $$ 其中,$T_s$为采样周期。 解调后的输出可以表示为: $$ b_{i}=\begin{cases} 1, & \text{if $z_i>0$}\\ 0, & \text{if $z_i<0$} \end{cases} $$ 4. 计算误码率 为了评估数字通带传输系统的性能,我们需要计算误码率。误码率可以表示为: $$ BER=\frac{1}{N}\sum_{i=1}^{N}[b_{i}\neq b_{i}^{'}] $$ 其中,$N$为比特数,$b_i$为发送的比特,$b_i^{'}$为接收的比特。 下面是MATLAB代码实现: ```matlab % 参数设置 SNR = 10; % 信噪比 M = 4; % 4PSK调制 N = 10000; % 比特数 fc = 1000; % 载波频率 Tb = 1/100; % 比特周期 Ts = Tb/10; % 采样周期 t = 0:Ts:(N*Tb-Ts); % 时间序列 % 生成随机比特序列 b = randi([0 1],1,N); % 4PSK调制 s = pskmod(b,M); % 生成载波信号 c = cos(2*pi*fc*t); % 带通调制 x = s .* c; % 添加高斯白噪声 r = awgn(x,SNR); % 相干解调 z = zeros(1,N); for i = 1:N t1 = (i-1)*Tb; t2 = i*Tb; tc = t1:Ts:(t2-Ts); I = r(find(tc <= t2 & tc >= t1)) .* cos(2*pi*fc*tc); Q = r(find(tc <= t2 & tc >= t1)) .* sin(2*pi*fc*tc); z(i) = sum(I) - sum(Q); end bhat = (z > 0); % 计算误码率 BER = sum(b ~= bhat)/N; ``` 这样,我们就完成了基于MPSK的数字通带传输系统的构建和MATLAB仿真
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值