2017-06-22 7 views
0

私はPythonでMatlabのコードから同様の信号を得ようとしています。 MATLABで同じノイズの多い信号、Matlab対Python

コード:Pythonで

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); 

コード:

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です。