Re: [問題]是否有更快的做法?

看板MATLAB作者 (郝渴連)時間11年前 (2014/04/30 19:57), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《k0939620064 (skan)》之銘言: : 標題: [問題]是否有更快的做法? : 時間: Wed Apr 30 17:59:24 2014 : : 各位大大 : 小弟目前遇上一個問題就是用for迴圈做訊號處理時,往往都要跑個1.20分鐘以上 : 想請問各位大大是否有更快的方法? : : 以下是小弟的程式碼 : : for m=1:4 : for n=1:500000 在迴圈中動態的擴大矩陣會有數量未知的記憶體配置動作, 所以迴圈中的變數需要再迴圈外先配置好確定大小的記憶體。 p.s. matlab editor 右邊有一堆橘色的提示,看一下好嗎.... : signal_square(n,m)=sum(sig((n-1)+1:n,m).^2); ~~~~~~~~~ 啊不就是n,你多做了一次加法與建立矩陣的動作,而且一個數字不需sum : % 將收到的訊號平方 : phase_noise(n,m) = angle(signal_square(n,m))./2; : % 將平方的訊號取角度後除2 = phase noise : phase_sig((n-1)+1:n,m) = (((angle(sig((n-1)+1:n,m)))- phase_noise(n,m))); : % 原始訊號= arg(收下來的訊號)-phase noise : phase_comp((n-1)+1:n,m) = exp(j*phase_sig((n-1)+1:n,m)); : % 原始訊號 : end : end : 整個程式可寫成: signal_square = sig.^2; phase_noise = angle(signal_square)/2; phase_sig = angle(sig) - phase_noise; phase_comp = exp(j*phase_sig); 其實完全不用迴圈的, 用matlab就要用matlab的精神來寫阿。 p.s. 你若是想把原來的 sig 用大小和相位來表示的話, signal_square 不是應該為 abs(sig).^2 嗎? : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.163.74 : ※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1398851967.A.95F.html : → celestialgod:寫MEX or 用GPU 04/30 18:58 : 推 sunev:(n-1)+1:n ? 04/30 19:29 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.67.62.134 ※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1398859031.A.B76.html

05/01 18:10, , 1F
感謝大大花時間回覆我的問題,小弟獲益良多 感謝!
05/01 18:10, 1F
文章代碼(AID): #1JOEKNjs (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1JOEKNjs (MATLAB)