c语言编程高斯白噪声信号,关于产生高斯白噪声

1. 环境工具

语言:c语言

作图:gnuplot

2. 高斯白噪声

[ 1] 为什么要产生高斯白噪声

在分析一个系统的抗噪声性能或者是一种对信号的调制方式分析的时候,在模拟信号通过信道的时候,使用的是高斯白噪声来模拟信道中的噪声模型,由此,在固定信噪比下,可以分析不同调制手段最终解调后受干扰的程度好坏,通信系统中的噪声是热噪声,而白噪声是近似于白噪声的,当对白噪声取值的时候,我们发现它符合高斯分布,故而出现了高斯白噪声,对于高斯白噪声,其频谱符合均匀分布。

[ 2] 如何产生高斯白噪声

对于离散时间点的高斯白噪声的产生,可以使用其研究信号的传输特性,对于高斯白噪声的产生即是产生一些离散的高斯随机数,matlab中对于高斯随机数的产生有特定的函数,一行代码即可搞定,但是对于使用c语言编程实现,就使用到很多关于统计数学方面的知识。

方法一:包括使用c语言自带的产生随机数函数,产生n多个随机数,然后将这很多个随机数加起来,当作一个样本,然后产生很多个这样的样本,这些数据的和或者均值就会趋近于高斯分布,最后可以使用归一化处理方式将数据映射至某个特定的数据区间,这种方法实现起来比较简单。

方法二:这种方法是使用著名的Box-Muller方法,这是一种实现起来也比较简单但是分析其真正算法实现方法时候十分的复杂,它的原理是产生两个满足[0,1]上均匀分布的数据x,y,然后通过两个设定的公式让其转换为相互独立的高斯分布数据X,Y,这两个公式使用一个即可:

7c43bed1a71a3ee104a67b30b2a0c8b3.png

a2ed7d1cb3b1e50fb27b865bf4f837a3.png

怎样产生利用循环产生多个高斯随机数,再将每个数据进行归一化映射,映射至某个需要的幅度值区域,对于给定的均值m和标准偏差sd的情况下的高斯随机数,只需要在此基础上再做如下运算处理:

e44d3208a9204265372e55393a2f4cb2.png

c编程实现如下(代码没有完全展示):

080a0883b764aff9fc95d8daf99012b0.png

产生数据写入文本中,为了方便作图,同时产生一列x坐标的数据:

d17530101d714d6ba2f08de0b4a4ab9e.jpg

3. gnuplot绘图

上面产生了区间为[-2:2]的高斯随机数,产生了512个数据,利用gnuplot画出它的散点分布图如下:

7395b3a973644162b7b345dc595ab66a.png

连续高斯白噪声图如下:

ee4cc2a8b39aca7d9b7a74757dd6fdea.png

将产生的高斯随机数进行fft变换,利用gnuplot观察高斯随机数的频谱图;

3719410fd71943499091ebab2b8810d3.jpg

由上面的频谱图分析来看,生产的高斯随机数的频谱满足近似于均匀分布,当然,在频率分辨率更高和高斯随机数点数更多的时候,均匀分布更明显。

信号通过信道传输就是在远离啊信号中叠加上高斯白噪声信号,下图绘制处AM信号中叠加高斯白噪声的模拟图像:

05b0a65bd0091d58045d2b825bd13b54.png

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值