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;