matlab中用randn加入高斯白噪声而不使用awgn函数。SNR、EbN0

文章详细解释了如何在MATLAB中将SNR转换为EbN0,并通过示例展示了如何计算信号功率和噪声功率,进而模拟加噪过程。SNR等于信号功率除以噪声功率,而EbN0可以通过SNR乘以比特时间(Tb)获得。文章强调理解这些概念对于通信系统建模的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要明确SNR、EbN0之间的转换,通过EbN0得到SNR。这个可以看我另一篇文章:
链接: link
拿到SNR之后可以开始下一步,
首先明确:
MATLAB中对调制后的数据求模的平方再取平均求得的是信号的功率,公式如下:
平均功率 P = (1/N) * Σ|s(n)|^2 ,
其中 N 是采样点数量,s(n) 是信号的离散时间序列。
****
为什么该式得到的是功率而不是能量呢,因为这是一个采样点单位时间的能量求和,所以不用再除以Tb啥的了,反而是能量应该用这个P乘以Tb去获得比特能量Eb。
同时:
**高斯白噪声的能量方差(σ^2)**就是噪声功率。在高斯白噪声模型中,噪声是一个随机过程,其每个样本都服从独立同分布的高斯分布。噪声的方差(即能量的方差)可以表示为: σ^2 = E[(n(t) - μ)^2],其中 n(t) 是噪声信号,μ 是噪声的均值,E[] 表示期望操作。 对于高斯白噪声,通常假设噪声均值为零(μ = 0)。因此,噪声的方差就是噪声信号的平均功率。
获得了SNR,首先SNR = S/N,(dB到实数的转换这里就略去了)
就可以得到N,那么N = (S/SNR);
那么在matlab中如果想要加入一个EbN0(dB)这么大的噪声时,

这里默认SNR已经获得了
SNR = 5;#举例
signal = randi([0 1],1,10000);
#这一步之间可以加上编码以及调制等等过程
S = mean(signal.^2); #信号功率
N = S/SNR;#噪声功率
# 如果是实数过程
signal_noise = signal + sqrt(N)*randn(1,length(signal ));#加噪过程
# 如果是复数过程
signal_noise = signal + sqrt(N/2)*randn(1,length(signal ))+ sqrt(-1)*sqrt(N/2)*randn(1,length(signal ));#加噪过程

这样就获得了一个EbN0,或者说为信噪比为SNR的加噪信号,当然直接用awgn得到的效果是一样的,但是有些时候不是有限制不让用comm嘛,主要是要理解这两个之间的关系,才能得心应手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值