我是朱莉娅的新手,我有以下代码出现此错误:
MethodError(convert,(Complex{Float64},[-1.0 - 1.0im]))
。
我想知道错误的来源以及如何针对速度优化这段代码。
这是我的代码:
function OfdmSym()
N = 64
n = 1000
symbol = convert(Array{Complex{Float64},2},ones(n,64)) # I need Array{Complex{Float64},2}
data = convert(Array{Complex{Float64},2},ones(1,48)) # I need Array{Complex{Float64},2}
const unused = convert(Array{Complex{Float64},2},zeros(1,12))
const pilot = convert(Array{Complex{Float64},2},ones(1,4))
const s = convert(Array{Complex{Float64},2},[-1-im -1+im 1-im 1+im])# QPSK Complex Data
for i=1:n # generate 1000 symbols
for j = 1:48 # generate 48 complex data symbols whose basis is s
r = rand(1:4,1) # 1, 2, 3, or 4
data[j] = s[r]
end
symbol[i,:]=[data[1,1:10] pilot[1] data[1,11:20] pilot[2] data[1,21:30] pilot[3] data[1,31:40] pilot[4] data[1,41:48] unused]
end
end
由于这是朱莉娅的第一天编程,我非常努力地揭示了错误的来源而没有成功。我也尝试尽可能地优化和初始化数组,但是当我对代码计时时,我意识到它远非最佳。感谢您的帮助。
答案 0 :(得分:3)
尝试这个更简单的代码
function OfdmSym()
N = 64
n = 1000
symbol = ones(Complex{Float64}, n, 64)
data = ones(Complex{Float64}, 1, 48)
unused = zeros(Complex{Float64}, 1, 12)
pilot = ones(Complex{Float64}, 1, 4)
s = [-1-im -1+im 1-im 1+im]
for i=1:n # generate 1000 symbols
for j = 1:48 # generate 48 complex data symbols whose basis is s
r = rand(1:4) # 1, 2, 3, or 4
data[j] = s[r]
end
symbol[i,:]=[data[1,1:10] pilot[1] data[1,11:20] pilot[2] data[1,21:30] pilot[3] data[1,31:40] pilot[4] data[1,41:48] unused]
end
end
OfdmSym()
在你让它正常工作之前,我不会过分担心优化问题。你现在设置它的方式似乎因为所有的数组切片而效率低下 - 尝试直接构建symbol
会更好。