2017-06-22 151 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