1

我正在尝试将 Matlab 代码转换为 Python。我的代码将复数解码为位,当我传递一个复数数组时它工作正常,但是当我通过编码算法生成复数时它给了我一个错误。请告诉我可能是什么原因。

错误:

theta_1[k-1]=angle(Cp[k]*conj(Cp[k-1]))

TypeError: 'int' object is not callable 

蟒蛇代码:

T=20e-3
sampling_rate=8
convfac=7.13 
N_bits=1e2
SNR=40
angle=40
tau=38

a=N_bits/4+1
Fc=sampling_rate/T
dt=1/sampling_rate/Fc

a1=array([0,0,1])

N_bits=1e5
a2=arange(0,2,1)
## Transmitter ##
bits1=ceil(len(a2)*rand(N_bits))

bits=a1[array(bits1,dtype=int)]
print(bits)
zer=[0,0,0,0,0,0,0,0]

bits=np.concatenate(([0,0,0,0,0,0,0,0],bits))
N_bits=len(bits)

delta1=zeros(((N_bits/4)+1) , dtype=np.complex)
delta2=zeros(((N_bits/4)+1) , dtype=np.complex)

k=1

C=zeros(((N_bits/4)+1) , dtype=np.complex)
D=zeros(((N_bits/4)+1) , dtype=np.complex)

C[0]=2+2j  
D[0]=1+1j


for l in arange(0,N_bits,4):
    if (bits[l]==0 & bits[l+1]==0):
         delta1[k]=0
    elif(bits[l]==0 & bits[l+1]==1):
         delta1[k]=np.pi/2
    elif (bits[l]==1)&(bits[l+1]==1):
        delta1[k]=np.pi
    else:
       delta1[k]=3*(np.pi/2)
    if (bits[l+2]==0)&(bits[l+3]==0):
         delta2[k]=0
    elif(bits[l+2]==0)&(bits[l+3]==1):
        delta2[k]=np.pi/2
    elif (bits[l+2]==1)& (bits[l+3]==1):
         delta2[k]=np.pi;
    else:
     delta2[k]=3* np.pi/2

    C[k]=C[k-1]*(np.cos(delta1[k])+1j*np.sin(delta1[k]))
    D[k]=D[k-1]*(np.cos(delta2[k])+1j*np.sin(delta2[k]))    
    k=k+1
S=C+D


S_real=S.real
S_imag=S.imag
a=len(S)
N_bits=(len(S)-1)*4
retrieved_bits=zeros(N_bits)
Cp=zeros(a+1,dtype=np.complex)
Dp=zeros(a+1,dtype=np.complex)

theta_1=zeros((N_bits/4)+1,dtype=np.complex)
theta_2=zeros((N_bits/4)+1,dtype=np.complex)

Cp[0]=2+2j
Dp[0]=1+1j

for k in arange(1,a):
   Cp[k]= 2*complex(sign(S_real[k]), sign(S_imag[k]) )
   Dp[k]=complex(sign(real(S[k]-Cp[k])),sign(imag(S[k]-Cp[k])))
   theta_1[k-1]=angle(Cp[k]*conj(Cp[k-1]))
   theta_2[k-1]=angle(Dp[k]*conj(Dp[k-1]))

test=angle(S[0])-angle(3+3j)
theta1=theta_1[0]
theta2=theta_2[0]

############################################
if (test==90*(pi/180)):
    if (theta_1[0]==-test):
        theta_1[0]=test+abs(theta_1[0])
else:
        theta_1[0]=theta_1[0]-test

 ##############################################

if(theta_2[0]==-test):
    theta_2[0]=test+abs(theta_2[0])
else:
    theta_2[0]=theta_2[0]-test

###############################################
if (abs(test)==180*(pi/180)):
    theta_1[0]=theta_1[0]-abs(test)
    theta_2[0]=abs(theta_2[0])-abs(test)
j=0

for k in arange(0,a-1):
    if (theta_1[k]==0):
        retrieved_bits[j]=0
        retrieved_bits[j+1]=0
    elif(theta_1[k]==pi/2):
        retrieved_bits[j]=0
        retrieved_bits[j+1]=1
    elif(theta_1[k]==pi):
        retrieved_bits[j]=1
        retrieved_bits[j+1]=1
    else:
        retrieved_bits[j]=1
        retrieved_bits[j+1]=0

    if(theta_2[k]==0):
        retrieved_bits[j+2]=0
        retrieved_bits[j+3]=0
    elif(theta_2[k]==pi/2):
        retrieved_bits[j+2]=0
        retrieved_bits[j+3]=1
    elif(theta_2[k]==pi):
        retrieved_bits[j+2]=1
        retrieved_bits[j+3]=1
    else:
        retrieved_bits[j+2]=1
        retrieved_bits[j+3]=0
    j=j+4


scatter(S.real,S.imag)
grid(True)
show()

S=array([ 3.+3.j , 1.-3.j, -3.+1.j,3.+3.j , 1.-3.j, -3.+1.j,3.+3.j , -3.+1.j, 1.-3.j])它工作得很好时。

4

1 回答 1

4

您为 分配了一个整数angle

angle=40

但然后尝试将其用作函数:

angle(Cp[k]*conj(Cp[k-1]))

也许您想重命名该变量;大概您想在那里使用该numpy.angle()功能

于 2013-08-15T12:51:47.567 回答