Python numpy:没有给出正确的负幂
我正在尝试用numpy转换一个matlab代码来计算误码率,一段代码给我带来了麻烦 这是我想转换的matlab代码Python numpy:没有给出正确的负幂,python,matlab,numpy,Python,Matlab,Numpy,我正在尝试用numpy转换一个matlab代码来计算误码率,一段代码给我带来了麻烦 这是我想转换的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
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(variance)
python代码
SNR=arange(6,23,1)
方差的答案应该是0.063 bt,在python中它给出了0.01
plzz帮助SNR是默认的数据类型
int32
。在Python2中,将int
除以int
会得到int
(或引发ZeroDivisionError
)。所以
SNR[ii]/10
给出了错误的结果:
In [15]: SNR
Out[15]: array([ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22])
In [16]: SNR/10
Out[16]: array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2])
要修复,请将
from __future__ import division
在python代码的开头(在导入语句之前),或者使用
variance = Es*10**(-SNR[ii]/10.0)
通过此更改,最终结果是0.06309573448
注意:在Python3中,int
除以int
将默认返回浮点值
为了在使用NumPy时获得更好的性能,您可能希望在可能的情况下将Python循环替换为对整个NumPy数组的操作。 您的代码将这样编写:
import numpy as np
SNR = np.arange(6, 23)
BER = np.zeros(len(SNR))
print(BER)
Es = 10
variance = Es * 10 ** (-SNR / 10.0)
std_dev = np.sqrt(variance / 2)
noise = (np.random.randn(len(SNR)) + 1j * np.random.randn(len(SNR))) * std_dev
S_noisy = SNR + noise
print(variance[-1])
import numpy as np
SNR = np.arange(6, 23)
BER = np.zeros(len(SNR))
print(BER)
Es = 10
variance = Es * 10 ** (-SNR / 10.0)
std_dev = np.sqrt(variance / 2)
noise = (np.random.randn(len(SNR)) + 1j * np.random.randn(len(SNR))) * std_dev
S_noisy = SNR + noise
print(variance[-1])