Python 加性高斯白噪声 AWGN

高斯白噪声

概念

加性高斯白噪声(Additive White Gaussian Noise,简写AWGN)
"白"是指功率谱恒定;
高斯指的是概率p (x)满足高斯函数。
在百度百科中的概念是,加性高斯白噪声在通信领域中指的是一种各频谱分量服从均匀分布(即白噪声),且幅度服从高斯分布的噪声信号。

公式推导

matlab的库中有AWGN这个库,如果要使用Python进行实现,要按照信噪比SRN公式进行推导:
在这里插入图片描述
其中x为原始信号,n为噪声信号。
推导可得噪声信号公式,其中N为原始信号长度:
在这里插入图片描述
最后服从高斯分布对噪声信号进行放大,可以得到最终的噪声信号:在这里插入图片描述

代码实现

假设我的原始信号single,与时间t的关系为:
在这里插入图片描述
其中t的取值为{0,1,2,3…,3998,3999},因此一共有4000个信号。得到的信号时域波形图:Python 加性高斯白噪声 AWGN_第1张图片
假设当前信噪比为10db,那么得到信号加入AWGN的时域波形图为:
Python 加性高斯白噪声 AWGN_第2张图片

import numpy as np

def awgn(x, snr, seed=7):
    '''
    加入高斯白噪声 Additive White Gaussian Noise
    :param x: 原始信号
    :param snr: 信噪比
    :return: 加入噪声后的信号
    '''
    np.random.seed(seed)  # 设置随机种子
    snr = 10 ** (snr / 10.0)
    xpower = np.sum(x ** 2) / len(x)
    npower = xpower / snr
    noise = np.random.randn(len(x)) * np.sqrt(npower)
    return x + noise

你可能感兴趣的:(Python,SRN,awgn)