2010-08-18 48 views
0

我想知道在Matlab中是否存在最小二乘法程序,以便將模板信號按時間標定爲測量信號。假設我的模板是一個大約的信號。 1秒,但測量中的相應部分爲1.2秒。現在我想將我的模板縮放到1.2秒。當然,可以簡單地在幾個步驟中重新縮放模板,與每個步驟的信號互相關並找到最大值。然而,這會大大減慢我的計劃。 Matlab的lsqcurvefit需要兩個長度相等的向量,其中一個向量的長度正是我想要改變的。 有沒有人有想法? 謝謝!最小二乘法適合在Matlab中進行時間標定的程序

+0

我不明白的地方優化進入它。如果你有模板的長度和所需的長度,除了拉伸或壓縮它(還可能做一些插值)之外,還有什麼可以改變的? – 2010-08-18 16:58:16

+0

難道你不能把你的模板時間向量乘以1.2嗎?我不確定我是否明白你在問什麼。你想「拉伸」信號,還是想推斷? – Doresoom 2010-08-18 17:18:33

+0

問題是我不知道信號的相應長度。模板是標準化步態模式中一步的加速度信號。我想交叉關聯幾個模板(即正常步態,爬樓梯和下降)與包含多個步驟的加速度信號。但是,此信號中的步驟可能比模板更長或更短(持續時間)。所以我想將我的模板(拉伸/壓縮)適合測量信號中的步驟,並對互相關的每個「延遲」執行此操作。 希望澄清一點。 – user424127 2010-08-19 07:55:42

回答

0

你真的嘗試過簡單的fminsearch函數嗎?它可能不如你想象的那麼慢。

例如(未經測試 - 只爲圖)

x=template; y=data; 
[email protected](p)sum((x(:)-y(1+max(0,min(length(y),floor([0:(length(x)-1)]-p(1)).*p(2))))).^2) 
b=fminsearch(fn,[0 1]); % [offset, scale] 

你可能需要調整限制等!

它它不適合,你也可以看看CPM工具箱(雖然它可能是你需要太複雜) http://www.cs.toronto.edu/~jenn/alignmentStudy/