2017-06-22 71 views
0

我試圖從Matlab的代碼中獲得一個類似的信號與python。同樣的噪聲信號,Matlab vs Python

代碼在MATLAB:

Fs = 1e3;    % sampling frequency (in Hz) 
L = 1e5;    % signal length (number of samples) 
f0 = 0.1*Fs;   % cycle frequency (in Hz) 

x = rand(L, 1); 
a = [1 -2*cos(2*pi*.2)*.9 .9^2]; 
x = filter(1,a,x); 
x = x.*(1 + sin(2*pi*(0:L-1)'*f0/Fs)); 
x = x +std(x)*rand(L,1); 
histogram(x,100); 

代碼在Python:

Fs=10**3 
L=10**5 
f0=0.1*Fs 
x=np.random.normal(0,1,L) 
a=[1,-2*np.cos(2*np.pi*.2)*.9,.9**2] 
x=sps.lfilter([1],a,x) 
Random_modulated_signal=x*(1+np.sin(2*np.pi*np.arange(0,L)*f0/Fs)) 
Rms_Whitenoise=x+np.std(x)*np.random.normal(0,1,L) 
plt.hist(Rms_Whitenoise,bins=100,edgecolor='k') 
plt.show() 

如果我畫出兩個信號的直方圖,他們不共享相同的行爲。信號不同時,我加std(x)*rnd(L,1)

奇怪的是,我使用了與前面顯示的代碼相同的代碼,但是使用rand('twister', 2)np.random.seed(2)在兩個程序中生成相同的值,並且它工作正常。

請有人澄清我在做什麼錯了?

兩個信號 Histogram of both signals

+1

這些直方圖是什麼?左邊的MATLAB,對吧Python?你期望兩個看起來像是右手? – Wolfie

回答

0

Matlab的rand的直方圖是均勻隨機分佈,而不是正態分佈。 matlab中相當於numpy.random.normal的是randn。 matlab的rand的numpy相當於numpy.random.random