对信噪比SNR、EbN0、EsN0的个人详细理解

前言

最近在看信噪比方面的知识,看了不少文章和几篇论文,发现对信噪比的理解和公式不尽相同,下面根据自己理解做一下总结。
在通信系统的接收端,噪声会随着信号一起进入接收机,这时就会判断在信噪比为多少的情况下误码率是多少,这时SNR、Eb/N0、Es/N0都可能用到。SNR 也即信噪比,是接收端模拟信号的重要测量指标,可以通过频谱仪等仪器实际测量接收端的模拟信号得到。而Eb/N0 是指通信系统传输一比特信息所需要的能量和噪声功率谱密度的比值,是衡量整个通信系统性能归一化的一个系统指标。一般情况下,模拟通信系统常采用SNR-BER来衡量通信系统的性能,数字通信系统常采用Eb/N0-BER 来衡量通信系统的性能。由于数字通信系统常采用Eb/N0 作为衡量系统的性能指标,但实际测量Eb/N0 比较困难,故而研究Eb/N0 与SNR 的转化关系变的十分重要。

S/N,SNR

SNR:Signal-to-Noise Ratio,是信号功率与噪声功率的比值,SNR 为S/N的dB形式,如下式,其中S:信号功率,N:噪声功率
S N R = 10 l g ( S / N ) SNR=10lg(S/N) SNR=10lg(S/N) 此2个功率在实际通信或仿真中都可以计算或监测到,实际试验可以用频率分析系测得;Matlab中是给定Eb/N0,求出噪声功率,具体可见参考文献;GNURadio中的模拟信道中噪声是用电压幅值表示的,如下式,其中VSVN分别为信号和噪声的电压均方值。 S N R = 20 l g ( V S / V N ) SNR=20lg(V_S/V_N) SNR=20lg(VS/VN)

Eb/N0、Es/N0

Eb/N0:Ratio of bit energy to noise power spectral density,每个二进制bit能量与噪声功率谱密度的比值。
Es/N0:Ratio of symbol energy to noise power spectral density,每个符号能量与噪声功率谱密度的比值。
这里的Eb和Es是平均bit和平均符号能量,不同的bit可能有不同的能量。先看几个概念:

  • N0:噪声的单边功率谱密度

  • Rb:比特率,即每秒传输多少个bit的二进制数

  • Rs:符号率,每秒传输多少个符号的数据

  • K:每个符号所承载的二进制bit数。

  • Tsym:符号周期,每个符号持续的时间,易知Tsym = 1/Rs,单位秒。

  • Tsamp:采样周期,每个采样点持续的时间,Tsamp = 1/Fs,其中Fs为采样率。

  • Bn:噪声带宽,单位赫兹,对于awgn噪声,有 Bn=Fs=1/Tsamp 。

  • sps:每个符号的采样个数,显然sps=Fs/Rs

有如下关系,其中k为每个符号包含的bit数,这个很容易理解。
E s / N 0 = E b / N 0 ∗ k E_s/N_0=E_b/N_0*k Es/N0=Eb/N0k 与S/N的关系如下,其中Tsym
E s = S ∗ T s y m , N 0 = N / B n E_s=S∗T_{sym}, N_0=N/B_n Es=STsymN0=N/Bn 上式容易理解,能量=功率*时间,功率谱=功率/带宽。
但我一直纠结的地方在于Bn如何确定:

  1. 有的文章写Bn是信号带宽,如果用根升余弦发送滤波器的话就是(1+α)Rs(这个在普通通信原理书上都可以找到),这种是从实际出发,因为实际测得的噪声带宽就是信号带宽,那么Bn当然是信号带宽,具体参考《数字通信系统中Eb/N0 与SNR 转换方法的研究》,知网上可以找到。截取部分公式如下,从下面公式可以看出,Eb/N0好像跟采样率Fs没有什么关系,这在很多通信原理书上介绍误码率的时候是符合的。

    文章也介绍了Matlab中信噪比的表示方法:
    在这里插入图片描述在这里插入图片描述
    这里的insValue是平方根升余弦滚降成型滤波器的插值倍数,做过仿真的人都知道,这就是sps。个人对上面这段话不是非常理解。
  2. 下面这种方法也是很多博客上介绍的方法,对于实信号,Bn=Fs/2。当实数连续信号被采样后,在频域上就是周期的频谱,我们只处理-Fs/2至Fs/2范围内的频谱,那么噪声也就包含在频谱-Fs/2至Fs/2内,此时带宽Bn就是Fs/2(带宽只考虑正频域)。为方便考虑,所以有如下公式:

E s / N 0 = S ∗ T s y m / ( N / B n ) = ( T s y m ∗ 0.5 F s ) ∗ ( S / N ) 实 信 号 E_s/N_0=S∗T_{sym}/(N/B_n)=(T_{sym}∗0.5F_s)∗(S/N) 实信号 Es/N0=STsym/(N/Bn)=(Tsym0.5Fs)(S/N) 而对于复信号(此复信号是带通信号对应的复低通信号),Bn=Fs,采样频率小一倍,所以有如下公式:
E s / N 0 = S ∗ T s y m / ( N / B n ) = ( T s y m ∗ F s ) ∗ ( S / N ) 复 信 号 E_s/N_0=S∗T_{sym}/(N/B_n)=(T_{sym}∗F_s)∗(S/N)复信号 Es/N0=STsym/(N/Bn)=(TsymFs)(S/N)
《https://ww2.mathworks.cn/help/comm/ug/awgn-channel.html?s_tid=srchtitle》中解释如下:
在这里插入图片描述
从上图可以看出,对于复信号,采样率为B/2*2=B,对于实信号,采样率为2B.

总结

转换为dB单位则为:
对于复信号: Es/N0(dB)=10log10(Tsym/Tsamp)+SNR(dB);
对于实信号:Es/N0(dB)=10log10(0.5*Tsym/Tsamp)+SNR(dB);

参考文献

https://ww2.mathworks.cn/help/comm/ug/awgn-channel.html?s_tid=srchtitle
《数字通信系统中Eb/N0 与SNR 转换方法的研究》-论文
《Bit-Error-Rate (BER) Simulation Using MATLAB》-论文

以下是一个简单的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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值