2014-09-28 7 views
1

我新手朱莉婭和我有這個錯誤下面的代碼:朱莉婭方法誤差轉換複合物{} Float64

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 

由於這是在朱莉婭的第一天節目,我很努力地揭示了錯誤的沒有成功的源泉。我也嘗試儘可能優化和初始化數組,但是當我計算代碼時,我意識到它遠沒有達到最優。我感謝您的幫助。

回答

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

+0

非常乾淨,直觀。我現在得到了上述錯誤的來源。它是'rand(1:4,1)',與'rand(1:4)'一樣,它返回一個Int32數組而不是Int32類型的元素。你的代碼工作正常,但我需要優化建議。你能幫我嗎?非常感謝。 – AboAmmar 2014-09-28 15:42:05

+0

你應該接受這個答案,因爲它解決了這個問題中的問題,並且詢問關於代碼性能的新問題 - 你會以這種方式得到更好的答案。 – IainDunning 2014-09-28 15:43:48

+0

我接受了答案,謝謝。但是在優化方面還有什麼幫助? – AboAmmar 2014-09-28 15:45:38