2009-06-10 12 views
7

मुझे आश्चर्य है कि अगर किसी को तेज स्क्वायर फंक्शन फ़ंक्शन (एएसडीएफ) या औसत परिमाण अंतर फ़ंक्शन (एएमडीएफ) की गणना करने के लिए किसी तेज (यानी ओ (एन लॉग (एन)) विधि की विधि है, तो मुझे आश्चर्य हो रहा है आवधिक संकेत, या यह भी संभव है।फास्ट औसत स्क्वायर अंतर समारोह

मुझे पता है कि कोई आवधिक क्रॉस सहसंबंध की गणना करने के लिए एफएफटी का उपयोग कर सकता है। उदाहरण के लिए, मैटलैब कोड में,

for i=1:N 
xc(i)=sum(x1*circshift(x2,i-1)); 
end 

बहुत तेजी से

xc=ifft(fft(x1).*conj(fft(x2)); 

के बराबर है वहाँ

for i=1:N 
ASDF(i)=sum((x1-circshift(x2,i-1)).^2)/N; 
end 

या

for i=1:N 
AMDF(i)=sum(abs(x1-circshift(x2,i-1)))/N; 
end 
के लिए एक समान "तेज" एल्गोरिथ्म है

?

उत्तर

6

आप इस प्रकार ASDF की अपनी परिभाषा का विस्तार कर सकते हैं:

for i = 1:N 
    asdf(i) = (sum(x1.^2) - 2*sum(x1*circshift(x2,i-1)) + sum(x2.^2))/N; 
end 

जो सरल

को
asdf = (-2*ifft(fft(x1).*conj(fft(x2))) + sum(x1.^2) + sum(x2.^2))/N; 
+1

बहुत बढ़िया। उत्तम। आपका कोड एन = 1024 के लिए मैटलैब पर 550 गुना तेजी से चलता है। धन्यवाद – tkw954

संबंधित मुद्दे