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

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

首先需要明确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嘛,主要是要理解这两个之间的关系,才能得心应手。

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是BPSK和QPSK在AWGN信道下的SNR对比的MATLAB代码: ```matlab % BPSK和QPSK在AWGN信道下的SNR对比 clear all; close all; % 设置参数 N = 100000; % 发送符号的数量 EbN0dB = 0:2:20; % 信噪比范围 EbN0 = 10.^(EbN0dB/10); % 生成随机的二进制序列 data = randi([0,1],1,N); % BPSK调制 bpsk_data = 1-2*data; % QPSK调制 qpsk_data = 1/sqrt(2)*(1-2*data(1:2:end)) + 1i*1/sqrt(2)*(1-2*data(2:2:end)); % 计算理论误码率 Pb_bpsk = 0.5*erfc(sqrt(EbN0)); Pb_qpsk = 0.5*erfc(sqrt(EbN0/2)); % 产生高斯白噪声 for ii = 1:length(EbN0dB) % 计算噪声功率 N0 = 1/EbN0(ii); % 产生高斯白噪声 noise_bpsk = sqrt(N0/2)*(randn(1,N)+1i*randn(1,N)); noise_qpsk = sqrt(N0/2)*(randn(1,N/2)+1i*randn(1,N/2)); % 添加噪声 received_bpsk = bpsk_data + noise_bpsk; received_qpsk = qpsk_data + noise_qpsk; % BPSK解调 bpsk_demod = real(received_bpsk)<0; % QPSK解调 qpsk_demod = zeros(1,N); qpsk_demod(1:2:end) = real(received_qpsk)<0; qpsk_demod(2:2:end) = imag(received_qpsk)<0; % 计算实际误码率 Pe_bpsk(ii) = sum(bpsk_demod~=data)/N; Pe_qpsk(ii) = sum(qpsk_demod~=data)/N; end % 绘制误码率曲线 figure; semilogy(EbN0dB,Pb_bpsk,'r-','LineWidth',2); hold on; semilogy(EbN0dB,Pe_bpsk,'ro-','LineWidth',1); semilogy(EbN0dB,Pb_qpsk,'b-','LineWidth',2); semilogy(EbN0dB,Pe_qpsk,'bo-','LineWidth',1); grid on; xlabel('Eb/N0(dB)'); ylabel('误码率'); title('BPSK和QPSK在AWGN信道下的SNR对比'); legend('BPSK理论误码率','BPSK实际误码率','QPSK理论误码率','QPSK实际误码率'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值