24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2025级博士研究生招生报考通知
查看: 7291  |  回复: 2
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

Ra_50914

金虫 (初入文坛)

Ra

[交流] 如何给图像添加高斯噪声(MATLAB)已有2人参与

噪声分两种性质,加性噪声和乘性噪声。加性噪声一般指热噪声、散弹噪声等,它们与信号的关系是相加,不管有没有信号,噪声都存在。而乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,信号在它在,信号不在他也就不在。一般通信中把加性随机性看成是系统的背景噪声;而乘性随机性看成系统的时变性(如衰落或者多普勒)或者非线性所造成的。
       白噪声,是一种功率频谱密度为常数的随机信号或随机过程,是功率谱密度在整个频域内均匀分布的噪声。此信号在各个频段上的功率是一样的,由于白光是由各种频率(颜色)的单色光混合而成,因而此信号的这种具有平坦功率谱的性质被称作是“白色的”,此信号也因此被称作白噪声。相对的,其他不具有这一性质的噪声信号(功率谱密度不均匀分布)被称为有色噪声。理想的白噪声具有无限带宽,因而其能量是无限大,这在现实世界是不可能存在的。实际上,我们常常将有限带宽的平整讯号视为白噪音,因为这让我们在数学分析上更加方便。然而,白噪声在数学处理上比较方便,因此它是系统分析的有力工具。一般,只要一个噪声过程所具有的频谱宽度远远大于它所作用系统的带宽,并且在该带宽中其频谱密度基本上可以作为常数来考虑,就可以把它作为白噪声来处理。
      MATLAB中产生高斯白噪声可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于将高斯白噪声加入到某一信号中 。
      1. WGN:产生高斯白噪声
          y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dB为单位指定输出噪声的强度。
          y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。
                   在数值变量后还可附加一些标志性参数:
          y = wgn(…,powertype) 指定p的单位。powertype可以是'dBW', 'dBm'或'linear'。线性强度(linear power)以瓦特(Watt)为单位。
          y = wgn(…,outputtype) 指定输出类型。outputtype可以是'real'或'complex'。
      2. AWGN:在某一信号中加入高斯白噪声
          y = awgn(x,snr) 在信号x中加入高斯白噪声。信噪比snr以dB为单位。x的强度假定为0dBW。如果x是复数,则加入复噪声。
          y = awgn(x,snr,sigpower) 如果sigpower是数值,则其代表以dBE为单位的信号强度;如果sigpower为'measured',则函数将在加入噪声之前测定信号强度。
          y = awgn(…,powertype) 指定snr和sigpower的单位。powertype可以是'dB'或'linear'。如果powertype是'dB',那么snr以dB为单位,而sigpower以dBW为单位。如果powertype是'linear',那么snr作为比值来度量,而sigpower以瓦特为单位。


顺带说明: 事实上,无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即,wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。下面就我熟悉的“向已知信号添加某个信噪比(SNR)的高斯白噪声”来说明一下,不过如果大家阅读过awgn的实现代码就不用看下去了,呵呵。从上述可知,这个任务可以使用awgn函数实现,具体命令是:awgn(x,snr,’measured’,'linear’),命令的作用是对原信号f(x)添加信噪比(比值)为SNR的噪声,在添加之前先估计信号f的强度。这里涉及三个问题:在awgn这个函数中,SNR是如何计算的?什么是信号的强度?awgn函数具体是如何添加噪声的?事实上,前两个问题是相关的,因为根据定义,SNR就是信号的强度除以噪声的强度,所以,首先来讲讲信号的强度。其实信号的强度指的就是信号的能量,在连续的情形就是对f(x)平方后求积分,而在离散的情形自然是求和代替积分了。在matlab中也是这样实现的,只不过多了一个规范化步骤罢了:
sigPower = sum(abs(sig(: )).^2)/length(sig(: ))
这就是信号的强度。至此,SNR的具体实现也不用多说了(注:由于采用的是比值而非db,所以与下面“计算信噪比”所使用的方式不同,即没有求对数步骤)。
最后说说awgn函数具体是如何添加噪声的。事实上也很简单,在求出f的强度后,结合指定的信噪比,就可以求出需要添加的噪声的强度noisePower=sigPower/SNR。由于使用的是高斯白噪声即randn函数,而randn的结果是一个强度为1的随机序列(自己试试sum(randn(1000,1).^2)/1000就知道了,注意信号的长度不能太小)。于是,所要添加的噪声信号显然就是:sqrt(noisePower)*randn(n,1),其中n为信号长度。
回复此楼
生活,学习。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

怪侠一晒黑

新虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
楼主,我一直有个困惑,在wgn函数是一个矩阵,这个矩阵在加入信号后是怎样进行计算的?或者说这个矩阵上每一行每一列具体有什么物理意义呢?

发自小木虫Android客户端
3楼2016-08-24 08:48:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 3 个回答

feixiaolin

荣誉版主 (文坛精英)

优秀版主


小木虫: 金币+0.5, 给个红包,谢谢回帖
噪声两种加法:
S‘ = S + N;  SNR=(S'-S)/N
S‘ = S*(1 + N); SNR同上,因为图像有一个范围,如0-255灰度限制。
2楼2016-08-23 08:58:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见