函数中for循环中的语句没有缩进。
我想把Matlab改成Python,z是随机复数的列表]
#Original Matlab code
function h = fdpara(D,a) % D column vector
if nargin == 1 a = 0.5; end % default value
h = [a*D.*D-a*D -a*D.*D-(1-a)*D+1 -a*D.*D+(1+a)*D a*D.*D-a*D];
mu1_tr = 0
reg = zeros(1,4)
for k = 1:length(z)
reg = [reg(2:4) z(k)]; % shift left
st_vec = [st_vec k-2+mu2_tr]; % symbol timing collection
r2 = fdpara(mu2_tr,0.5) * reg.';
reg结果
[-4.82211315e-08-2.41742009e-08j 1.04728867e-07-2.54491011e-07j, ....]
st_vec = 2, r2 = 8.367019142510646e-10 - 1.120440214253980e-07i
我在Python 中尝试了这两种方法
def fdpara(D,a=0.5):
h = [a*D*D-a*D, -a*D*D-(1-a)*D+1, -a*D*D+(1+a)*D,a*D*D-a*D]
return h
def shift(narr):
for i in range(1,len(narr)):
narr[i-1]=narr[i]
return narr
mu1_tr = 0
reg = np.zeros(4)
for k in range(z.size):
reg = shift(reg)
reg[3] = z[k]
st_vec=[st_vec,k-2+mu2_tr]
r2=fdpara(mu2_tr,0.5)*reg.T
reg结果
[-4.82211315e-08 1.04728867e-07 2.99251106e-07 1.97052411e-07]
看起来不一样,所以我改变了注册
reg1 = np.append(reg1, z[k])
reg1 = np.delete(reg1, [0], 0)
reg结果
[-4.82211315e-08-2.41742009e-08j 1.04728867e-07-2.54491011e-07j, ....]
reg看起来是正确的,但其他变量不同。
st_vec = [[], 1]
r2 = [-0.00000000e+00 1.04728867e-07 0.00000000e+00 0.00000000e+00]
Python代码正在工作,所以我认为它是相同的代码,但我不明白为什么r2和st_vec的值不同
请告诉我你的建议。我想检查2个代码是否产生了相同的结果
试着这样缩进,看看会发生什么:
def shift(narr):
for i in range(1,len(narr)):
narr[i-1]=narr[i] return narr