EbNo(EbN0)和SNR
SNR = EbN0 + 10log10(nBits*coderate) - 10log10(0.5or1 * upfactor)
参数说明:
Coderate:编码码率
nBits:每个符号或者码元中的信息比特数目
例如:BPSK的nBits为1、QPSK的nBits为2、8PSK的nBits为3……
BPSK中把1,0映射为±1时,为实数,最后一项为0.5*……
若把1,0映射为1+j和-1-j,则为复数,最后一项为1*……
Q1:为什么要将EbNo转换为SNR呢?
A1:因为要加入高斯白噪声信道,高斯白噪声信道(awgn)的噪声参数是与SNR直接相关的,所以要将EbNo转换为SNR。
Q2:为什么仿真要用EbNo,而不用SNR呢?
A1:因为用EbNo可以直观的看到系统性能,比如采用只采用QPSK,那么BER达到千分之一时,EbNo大约为7,如果采用单用户,进行了信道编码又进行了均衡,也采用QPSK星座映射,但EbNo为7时,BER为百分之一,那就证明系统设计有问题或者仿真出错了。因为SNR和EbNo是线性关系,所以用SNR为参数看BER只能看到大概的趋势,不能看到系统性能到底如何。
SNR到底怎么用EbNo表示,举个例子来说明。
假如要传送一些速率为1kb/s的数据,信道编码采用1/3卷积编码,每秒在这些编码数据前添加200bit的训练序列,星座映射采用QPSK,波形成形采用因子为0.25的升余弦函数,上采样倍数为10。
首先来看一下经过各模块速率的变化,原始信息速率为1kb/s,1/3卷积编码后变为3kb/s,也就是每秒传3000bit数据,添加200bit的训练序列后,变为每秒传3200bit,此时速率变为3.2kb/s,采用QPSK调制后,速率变为1.6ksymble/s。
再来看看EbNo和SNR的单位。
EbNo就是Eb/No。 Eb表示单位比特的能量,单位是焦耳(Joules)。No表示功率谱密度,单位是瓦特/赫兹(Watts/Hz)。SNR就是S/R。S表示信号功率,单位是瓦特(Watts)。N表示噪声功率,单位是瓦特(Watts)。显然SNR单位是无量纲的。EbNo的单位是Joules·Hz/ Watts,其实也是无量纲的。因为Watts表示是焦耳/秒(Joules /s),而1 Hz=1/s。这样可以得到下式。Joules·Hz/ Watts=Joules·(1 /s)/(Joules /s)=1
就前面的例子来说,可以EbNo和SNR是这样转换的。
SNR=EbNo·(1/3)·(3000/3200)·2·(1/10)·(1/1+0.25)用dB表示,就是
SNR=EbNo+10log(1/3)+10log(3000/3200)+10log(2)-10log(10)-10log(1+0.25)
此处log以10为底,其中1/3是卷积码引入的,3000/3200是因为添加了训练序列这个额外的开销而引入,2是QPSK引入的, 10是成形前上采样引入的, 1是因为QPSK为复数调制,0.25是升余弦波形引入的。
一般很容易忘记考虑训练序列或者保护间隔,一般影响不大,本例中10log(3000/3200)接近0,但其他各项影响都很大,如果仿真结果性能超好,应该看看是否忘记哪项了。
如果系统还进行了扩频,比如添加训练序列后进行了16倍扩频,那么还要考虑扩频增益带来的影响,应该还要加上10log(1/16)。
验证两个程序的snr性能时,两个程序里定义相同的snr,然后分别加awgn(x,snr,'measured'),画图用snr作x轴
验证两个程序的ebn0性能时,两个程序里定义相同的ebn0,然后分别写出其和snr的关系式,然后分别加awgn(x,snr,'measured'),画图用ebn0作x轴
对于复数调制加噪声时,对I、Q路分别用awgn和对I+j*Q用awgn加噪声后再取实部和虚部结果相同
用bertool得到BPSK和QPSK在ebn0下的ber性能相同;
自己验证ebn0下的ber时,对于BPSK加snr=ebn0-10log10(0.5),对于QPSK加snr=ebn0+10log10(2)-10log10(1)得到相同ber,
或者对BPSK加snr=ebn0-10log10(1)对BPSK用复数调制,也可以得到和QPSK相同的ber