信噪比SNR , Eb/N0 , Es/N0区别与联系之深入剖析

      通信方向在做仿真时经常用到信噪比这个参数,而对于不同形式的信号所用到的信噪比的形式往往不同,所以有必要信噪比这一概念做深入的区分,避免混淆。

 

首先明确几个符号的意义

S:信号的平均功率                                        N: 噪声的平均功率

Eb: 每bit信号能量                                       N0:噪声的功率谱密度

Es:信号(符号)的能量                              Rb:传信率(每秒传输的bit数)

W: 信号带宽                                                T:  符号周期

Ts: 采样点间隔                                            k: 每个符号包含的bit数

 

SNR与S/N: 

      SNR 为S/N的dB形式,即      SNR=10lg(S/N) .

S/N与Eb/N0和Ex/N0

     S=Eb*Rb , N=N0*W         

     S/N=(Eb/N0)*(Rb/W) 

     Rb=k/T, 单位为bit/s,Rb/W 表示频谱效率,上式可以看出S/N与Eb/N0是一个线性的关系,仿真时候可以当成一个参数看待,它们的dB形式一般用SNR和ebno表示。

     Es=Eb*k ,  Rb=k/T    

     对于复信号:Es/N0=(S/R)*(T/Ts) 

     对于实信号:Es/N0=0.5*(S/R)*(T/Ts)       

    此处复信号与实信号差一个系数的原因是复信号的功率谱密度为单边,实信号的功率谱密度为双边,所以在相同功率的前提下复信号的带宽减半,它的功率谱密度为双边功

    率谱密度的二倍。

 

SNR,ebno和esno:

    我们在仿真过程中往往更多用到的是dB形式的信噪比,下面继续明确几个概念

    Eb/N0:比特信噪比,它的dB形式为ebno ,即ebno=10lgEb/N0

    Es/N0:符号信噪比,它的dB形式为esno ,即esno=10lgEs/N0  

    由Es=Eb*k  可知  Es/N0=k*Eb/N0    ,则有  esno=ebno+10lg(k)

    最后我们有:

     ebno=SNR-10lg(Rb/W);

     esno=SNR-10lg(1/T*W);

    下面给出一个计算Eb/N0和SNR的简列:

     本人所用到的仿真信号为超宽带信号,发送的是一系列经过调制的窄脉冲,考虑一个最简单的情况,发送的符号内只有1bit信息,脉冲的持续时间为 T=0.5ns,

     采样频率为1/Ts=20GHz,此时由于k=1, 有

                                                           Es/N0=Eb/N0=S/R*(0.5*(10^-9)) *(20*(10^9) )   =10*S/N .

                                                           esno=ebno=SNR-10lg[1/(0.5*(10^-9)) *(20*(10^9) ) ]=SNR+10 .

 

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的MATLAB程序,用于仿真4PAM和4QAM调制信号在高斯信道下的性能。程序流程如下: 1. 生成长度为N的随机比特序列。 2. 将比特序列分组成M个符号,每个符号用2个比特表示(4PAM)或4个比特表示(4QAM)。 3. 将符号映射到相应的调制信号点。 4. 生成高斯白噪声并将其加到调制信号上。 5. 对接收信号进行软输出检测,并将检测结果与原始比特序列进行比较,以计算错误比特率和误符号率。 6. 重复步骤2-5,直到达到指定的误比特率或达到指定的信噪比范围。 程序中的模拟误差率和理论误差率都被记录在数组中,并且用图形表示。程序中也包含了一些与理论误差率比较的注释。 ```matlab clear all; close all; % 模拟参数 nbits = 100000; % 比特序列长度 M = 4; % 调制阶数 SNR_dB_start = 0; % 开始信噪比 SNR_dB_end = 14; % 结束信噪比 SNR_points = SNR_dB_end - SNR_dB_start + 1; % 信噪比点数 EbN0_dB = SNR_dB_start:SNR_dB_end; % 信噪比Eb/N0EsN0_dB = EbN0_dB + 10*log10(log2(M)); % 信噪比Es/N0) % 生成随机比特序列 bits = randi([0 1], nbits, 1); % 生成码元 if M == 4 % 4PAM symbols = zeros(nbits/2, 1); for i = 1:nbits/2 symbols(i) = bits(2*i-1)*2 + bits(2*i); end elseif M == 16 % 16QAM symbols = zeros(nbits/4, 1); for i = 1:nbits/4 symbols(i) = bits(4*i-3)*8 + bits(4*i-2)*4 + bits(4*i-1)*2 + bits(4*i); end end % 生成调制信号点 if M == 4 % 4PAM x = [-3 -1 1 3]; elseif M == 16 % 16QAM x = [-3 -1 1 3]; y = [-3 -1 1 3]; [X,Y] = meshgrid(x,y); x = reshape(X,1,M); y = reshape(Y,1,M); end % 模拟误差率和理论误差率 BER_sim = zeros(1, SNR_points); BER_theory = zeros(1, SNR_points); SER_sim = zeros(1, SNR_points); SER_theory = zeros(1, SNR_points); % 模拟循环 for i = 1:SNR_points % 信噪比 EsN0 = 10^(EsN0_dB(i)/10); sigma = sqrt(1/(2*EsN0)); % 重复次数 N = ceil(10^6 / nbits); % 初始化 BER_sim_total = 0; SER_sim_total = 0; % 循环 for j = 1:N % 加入高斯白噪声 if M == 4 % 4PAM noise = sigma * randn(nbits/2, 1); elseif M == 16 % 16QAM noise = sigma * (randn(nbits/2, 1) + 1i*randn(nbits/2, 1))/sqrt(2); end r = x(symbols+1)' + noise'; % 软输出检测 if M == 4 % 4PAM r_hat = zeros(size(r)); r_hat(r < -2) = -3; r_hat(r >= -2 & r < 0) = -1; r_hat(r >= 0 & r < 2) = 1; r_hat(r >= 2) = 3; llr = zeros(size(r)); llr(r < -2) = -2*(r(r < -2)+3)/sigma^2; llr(r >= -2 & r < 0) = -2*(r(r >= -2 & r < 0)+1)/sigma^2; llr(r >= 0 & r < 2) = 2*(r(r >= 0 & r < 2)-1)/sigma^2; llr(r >= 2) = 2*(r(r >= 2)-3)/sigma^2; bits_hat = zeros(nbits, 1); for k = 1:nbits/2 bits_hat(2*k-1) = (r_hat(k)+3)/2; bits_hat(2*k) = mod(r_hat(k), 2); end elseif M == 16 % 16QAM r_hat = zeros(size(r)); for k = 1:M r_hat(abs(r-(x(k)+y(k)*1i))<sigma/2) = x(k)+y(k)*1i; end llr = zeros(size(r)); for k = 1:M llr(abs(r-(x(k)+y(k)*1i))<sigma/2) = -(abs(r(abs(r-(x(k)+y(k)*1i))<sigma/2)-x(k)-y(k)*1i)/sigma)^2; end bits_hat = zeros(nbits, 1); for k = 1:nbits/4 d = r_hat(k); bits_hat(4*k-3) = (real(d)>0); bits_hat(4*k-2) = (imag(d)>0); bits_hat(4*k-1) = (abs(real(d))>1); bits_hat(4*k) = (abs(imag(d))>1); end end % 计算误差率 BER_sim_total = BER_sim_total + sum(bits ~= bits_hat); SER_sim_total = SER_sim_total + sum(symbols ~= (r_hat-x+1)'); end % 计算平均误差率 BER_sim(i) = BER_sim_total / (nbits*N); SER_sim(i) = SER_sim_total / (nbits/2*N); if M == 4 % 4PAM BER_theory(i) = qfunc(sqrt(2*EsN0)); SER_theory(i) = 2*(1-qfunc(sqrt(3*EsN0/2))); elseif M == 16 % 16QAM BER_theory(i) = 1/2*qfunc(sqrt(2*EsN0/5)) + 1/2*qfunc(sqrt(2*EsN0/10)); SER_theory(i) = 4*(1-qfunc(sqrt(2/5*EsN0))); end % 输出 fprintf('Eb/N0 = %0.2f dB, BER = %0.5f (sim) / %0.5f (theory), SER = %0.5f (sim) / %0.5f (theory)\n', ... EbN0_dB(i), BER_sim(i), BER_theory(i), SER_sim(i), SER_theory(i)); end % 绘图 figure; semilogy(EbN0_dB, BER_sim, 'bo-', EbN0_dB, BER_theory, 'r.-'); legend('Simulated', 'Theoretical'); xlabel('Eb/N0 (dB)'); ylabel('Bit Error Rate (BER)'); title('4PAM and 4QAM Modulation Performance in Gaussian Channel'); figure; semilogy(EbN0_dB, SER_sim, 'bo-', EbN0_dB, SER_theory, 'r.-'); legend('Simulated', 'Theoretical'); xlabel('Eb/N0 (dB)'); ylabel('Symbol Error Rate (SER)'); title('4PAM and 4QAM Modulation Performance in Gaussian Channel'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值