Matlab中rand、randn、randi、rands的区别以及用randn生成白噪声的示例

2020-05-30 20:42:05

Matlab中生成随机数的函数有多个:rand、randn、randi、rands,其简要说明和区别如下:


rand(m,n)                        : 在 ( 0~1 ) 内生成m行n列均匀分布的伪随机数矩阵;
randn (m,n)                     : 生成m行n列标准正态分布 ( 均值为0,方差为1 ) 的伪随机数矩阵;
rands(m,n)                      : 在 ( -1~1 ) 内生成m行n列均匀分布的伪随机数;
randi( [min,max] , m , n) : 在 [min,max] 内生成m行n列的均匀分布的随机整数矩阵;

下面重点讨论randn函数:

randn用法详细说明:

x = randn——返回一个伪随机数x,其值来自于均值为0,标准差为1的正态分布;

x = randn(n)——返回一个n x n的矩阵,其元素值来自于均值为0,标准差为1的正态分布;

x = rand( m ,n ) 或 x = x = rand( [m ,n] ),——返回一个 m x n的矩阵,其元素值来自于均值为0,标准差为1的正态分布。

在音频算法测试中,常常要用到白噪声(例如给纯净音频叠加白噪声等),由于白噪声的定义和特性:

白噪声一种功率谱密度为常数的随机信号,换言之,白噪声在各个频段上的功率相等(若不满足以上条件,则不是白噪声,而被称为“有色噪声”),百度百科:白噪声

因此,由于白噪声的功率谱是正态分布的,所以要用randn来生成白噪声,Matlab中生成幅值为0~1的白噪声的代码如下:

1 noise_white=randn(1,wav_len);                     % 生成长度为wav_len的白噪声,满足正态分布;
2 noise_white=noise_white/max(abs(noise_white));    % 白噪声信号幅度归一化,此处白噪声幅值范围:0~1;