2013-07-21 66 views
1

我試圖一段在Python代碼的出現誤導result.i只是想確認np.randn的功能是一樣的Matlab的randn plzz helpppMatlab的隨機VS np.randn

S=[ 3.+3.j 1.-3.j -3.+1.j 1.+3.j 1.-1.j] 
SNR=arange(6,23,1) 

BER=zeros(len(SNR)) 
Es=10 


for ii in arange(0,len(SNR)): 

    variance=Es*(10**(-SNR[ii]/10)) 
    std_dev=cmath.sqrt(variance/2) 
    noise=(np.random.randn(len(S))+cmath.sqrt(-1)*np.random.randn(len(S))) *std_dev 
    S_noisy=S+noise 


print(noise) 

MATLAB代碼

SNR=6:22; 
display(SNR) 
display(length(SNR)) 
BER=zeros(1,length(SNR)); 

display(BER) 
display(length(BER)) 
Es=10; 


for ii=1:length(SNR) 
    variance=Es*10^(-SNR(ii)/10); 
    std_dev=sqrt(variance/2); 
    noise=(randn(1,length(S))+sqrt(-1)*randn(1,length(S)))*std_dev; 
    S_noisy=S+noise; 


end 

display(noise) 

結果應該是

[0.1150 + 0.1889i -0.0756 + 0.2055i 0.1862 + 0.0094i 0.1174 - 0.2288i 

0.4456 - 0.0659i] 
+0

如果我添加在matlab中生成的確切噪聲序列,即使它沒有給出正確的答案 –

回答

4

與NumPy的np.random.randn回報樣本來自標準的正態分佈。運行結果將不一樣。您可以通過設置種子來獲得可重複的結果:

np.random.seed(123) 

但是,這不一定會產生與從Matlab獲得的結果相同的結果。 Matlab使用自己的隨機數生成器,據我所知,沒有辦法將Matlab的隨機數與NumPy同步。

如果您想得到完全相同的結果,請將Matlab生成的隨機數保存到文件中,然後將這些數字加載到NumPy中。

+0

我應該使用什麼來獲得相同的結果 –

+0

您可以編寫自己的隨機數生成器並在MATLAB和Python中實現它。 – HyperCube