一、从“数据比特”到“符号”再到“采样点”
探讨题目中SNR、Eb/N0 、Es/N0 的关系,必须要对“数据比特”到“符号”再到“采样点”这数据的三种形态有清楚的认知,明白各个参量在发送端处于什么样的位置/状态。
首先是数据比特(信息比特),就是我们想要传输的二进制数据 ,速率(信息速率)为
R
b
R_{b}
Rb?
数据比特需要经过信道编码、多进制映射变成一个个 符号(信道符号),速率(符号速率)为
R
s
R_{s}
Rs?
这些符号经过 (上)采样(采样速率往往是符号速率的整数倍)得到采样点,速率为采样速率
f
s
f_{s}
fs?
下图为三种数据状态的关系
由图可知,三种数据状态存在一定的数学转换关系
(1)、数据比特 到 符号: 我们定义 变量
k
k
k 为:一个符号对应的数据比特的数量 。 即
k
=
R
b
R
s
k=\frac{R_{b}}{R_{s}}
k=Rs?Rb??
如果数据比特到符号要经过码率为
R
R
R的信道编码,以及
M
M
M进制的调制,易得
k
=
R
?
l
o
g
2
M
k=R\cdot log_{2}M
k=R?log2?M 如:数据比特经过了码率为4/7的汉明码,以及4进制的QPSK调制,那么
k
=
4
7
?
l
o
g
2
4
=
8
7
k=\frac{4}{7}\cdot log_{2}4=\frac{8}{7}
k=74??log2?4=78?
(2)、符号 到 采样点: 定义变量:sps(sample per symbol)为,每个 符号 对应的采样点数,或者说每个符号采几次样。 即
s
p
s
=
f
s
R
s
sps=\frac{f_{s}}{R_{s}}
sps=Rs?fs??
则易得:
f
s
R
b
=
s
p
s
k
\frac{f_{s}}{R_{b}}=\frac{sps}{k}
Rb?fs??=ksps?
二、S/N、Eb/N0 、Es/N0 的关系
在模拟通信中SNR是一个衡量信噪比常用的指标,但在数字通信系统中,我们将传输的数据分割成一个个码元,用码元能量
E
s
E_{s}
Es?,码元速率
R
s
R_{s}
Rs?来描述一个离散的数据系统更为妥当。鉴于不同系统采用的编码方式以及调制方式不同,为了统一,在 比特级(比特能量
E
b
E_{b}
Eb?,比特速率
R
b
R_{b}
Rb?) 角度来分析信噪比更为“公平”。
(1)、S/N 到 Es/N0 根据定义S/N是信号功率与
E
s
?
R
s
E_{s}\cdot R_{s}
Es??Rs? 噪声功率
N
0
?
W
N_{0}\cdot W
N0??W之比,即
S
N
=
E
s
?
R
s
N
0
?
W
\frac{S}{N}=\frac{E_{s}\cdot R_{s}}{N_{0}\cdot W}
NS?=N0??WEs??Rs?? 注意:
- (1)
N
0
N_{0}
N0?为高斯白噪声功率谱密度,这是相对于复信号来说的;对于实信号,功率谱密度为
N
0
/
2
N_{0}/2
N0?/2。
- (2)
W
W
W为信号带宽,常常用
f
s
f_{s}
fs?替代,(这是为什么?我可以给大家提供一个“线索”,大家看看我在第三部分第二个方法模拟高斯白噪声时的思路。 或者 有知道的小伙伴可以在评论区留言)
那么;
S
N
=
E
s
?
R
s
N
0
?
f
s
=
E
s
N
0
?
1
s
p
s
\frac{S}{N}=\frac{E_{s}\cdot R_{s}}{N_{0}\cdot f_{s}}=\frac{E_{s}}{N_{0}}\cdot \frac{1}{sps}
NS?=N0??fs?Es??Rs??=N0?Es???sps1?
(2)、 Es/N0 到 Eb/N0 由于一个信号的功率S可以表示为
S
=
E
s
?
R
s
=
E
b
?
R
b
S=E_{s}\cdot R_{s}=E_{b}\cdot R_{b}
S=Es??Rs?=Eb??Rb? 由第一节中Rs与Rb的关系,则可以得到
E
s
E
b
=
k
\frac{E_{s}}{E_{b}}=k
Eb?Es??=k
E
s
N
0
=
E
b
N
0
?
k
\frac{E_{s}}{N_{0}}=\frac{E_{b}}{N_{0}}\cdot k
N0?Es??=N0?Eb???k
则易得:
S
N
=
E
b
N
0
?
k
s
p
s
\frac{S}{N}=\frac{E_{b}}{N_{0}} \cdot \frac{k}{sps}
NS?=N0?Eb???spsk?
至此我们得到了S/N与Eb/N0的关系;
三、在仿真工作中如何应用?(以matlab为例)
仿真过程中一般画的都是Eb/N0(dB)为横轴的误码率曲线图,如图 这里的应用就是将Eb/N0(dB)转化为S/N在添加,再根据S/N添加高斯白噪声。 在matlab中添加高斯白噪声的方式有两种: 无论哪种都得先将Eb/N0转化为S/N: 由于
S
N
=
E
b
N
0
?
k
s
p
s
\frac{S}{N}=\frac{E_{b}}{N_{0}} \cdot \frac{k}{sps}
NS?=N0?Eb???spsk?所以,
S
N
(
d
B
)
=
E
b
N
0
(
d
B
)
+
10
?
l
o
g
2
k
s
p
s
\frac{S}{N} (dB)=\frac{E_{b}}{N_{0}}(dB)+10\cdot log_{2} \frac{k}{sps}
NS?(dB)=N0?Eb??(dB)+10?log2?spsk?
- 1 matlab自带awgn()函数
具体用法我就不详细说了,大家 用help awgn命令看看就好
signal_addnoise=awgn(your_signal,snrdB,'measured');
注意:这里的yoursignal 是采样过后的信号,下同。
- 2 用随机序列模拟
由S/N (dB)的定义易得:
N
0
=
S
×
1
0
?
S
N
(
d
B
)
10
N_{0}=S×10^{-\frac{\frac{S}{N} (dB)}{10}}
N0?=S×10?10NS?(dB)? S是采样点的平均能量
signal_addnoise=your_signal+randn(size(your_signal)).*sqrt(N0/2)+1i*randn(size(your_signal)).*sqrt(N0/2);
注意,这里我都是默认信号为复信号,如果是实信号,实现方式又是怎样呢?欢迎大家在继续讨论,我这里就抛砖引玉啦
|