सबसे सरल तरीका यह है कि जिम क्ले सुझाव (रैखिक या अन्यथा) की तरह किसी तरह का अंतर प्रक्षेप करना है । हालाँकि, यदि आपके पास बैच प्रोसेसिंग का लक्ज़री है, और विशेषकर यदि आपके पास नॉनफ़ॉर्म सैंपल का ओवरडाइटेड सेट है, तो एक "परफेक्ट रीकंस्ट्रक्शन" एल्गोरिथम है जो बेहद एलिगेंट है। संख्यात्मक कारणों से, यह सभी मामलों में व्यावहारिक नहीं हो सकता है, लेकिन यह कम से कम वैचारिक रूप से जानने योग्य है। मैंने पहली बार इस पत्र में इसके बारे में पढ़ा ।
चाल गैर-वर्दी नमूनों के आपके सेट पर विचार करने के लिए है क्योंकि पहले से ही सिनकोप प्रक्षेप के माध्यम से वर्दी नमूनों से पुनर्निर्माण किया गया है । कागज में संकेतन के बाद:
y( t ) = ∑के = १एनy( के टी) पाप( π( t - k T) / टी)π( t - k T) / टी= ∑के = १एनy( के टी) s i n c ( t - k Tटी) का है ।
ध्यान दें कि यह रेखीय समीकरणों का एक सेट प्रदान करता है, प्रत्येक गैर-वर्दी नमूना , जहां अज्ञात समान-समान नमूने , जैसे:y ( k T )y( टी )y(kT)
⎡⎣⎢⎢⎢⎢y(t0)y(t1)⋯y(tm)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢sinc(t0−TT)sinc(t1−TT)⋯sinc(tm−TT)sinc(t0−2TT)sinc(t1−2TT)⋯sinc(tm−2TT)⋯⋯⋯⋯sinc(t0−nTT)sinc(t1−nTT)⋯sinc(tm−nTT)⎤⎦⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢y(T)y(2T)⋯y(nT)⎤⎦⎥⎥⎥⎥.
उपरोक्त समीकरण में, अज्ञात वर्दी नमूनों की संख्या है, समान नमूना दर का व्युत्क्रम है, और गैर-समान नमूने (जो से अधिक हो सकता है ) की संख्या है। उस प्रणाली के कम से कम वर्गों के समाधान की गणना करके , समान नमूनों को फिर से संगठित किया जा सकता है। तकनीकी तौर पर, केवल असमान नमूने जरूरी हैं, लेकिन पर कैसे "बिखरे" निर्भर करता है कि वे कर रहे हैं समय में, प्रक्षेप मैट्रिक्स बुरी तरह हो सकता है बीमार वातानुकूलित । जब ऐसा होता है, तो अधिक गैर-समान नमूनों का उपयोग आमतौर पर मदद करता है।टी एम एन एनnTmnn
एक खिलौने के उदाहरण के रूप में, यहाँ उपरोक्त विधि और क्यूबिक स्पलाइन प्रक्षेप के बीच तुलनात्मक रूप से तुलनात्मक रूप से एक तुलना की जाती है :
(इस उत्तर के अंत में उपरोक्त कथानक को पुन: प्रस्तुत करने के लिए कोड शामिल किया गया है)
कहा जा रहा है कि उच्च गुणवत्ता वाले, मजबूत तरीकों के लिए, निम्नलिखित में से किसी एक पेपर में कुछ के साथ शुरू करना संभवतः अधिक उचित होगा:
ए। अल्डरौबी और कार्ल्हिन्ज ग्रोचिग, नॉनफिफॉर्म नमूना और शिफ्ट-इनवेरिएंट स्पेस में पुनर्निर्माण , SIAM Rev., 2001, सं। 4, 585-620। ( pdf लिंक )।
के। ग्रोचेन और एच। श्वाब, शिफ्ट-इनवेरिएंट रिक्त स्थान में गैर- वर्दी नमूनाकरण के लिए तेजी से स्थानीय पुनर्निर्माण के तरीके , सियाम जे मैट्रिक्स एनल। Appl।, 24 (2003), 899- 913।
-
import numpy as np
import pylab as py
import scipy.interpolate as spi
import numpy.random as npr
import numpy.linalg as npl
npr.seed(0)
class Signal(object):
def __init__(self, x, y):
self.x = x
self.y = y
def plot(self, title):
self._plot(title)
py.plot(self.x, self.y ,'bo-')
py.ylim([-1.8,1.8])
py.plot(hires.x,hires.y, 'k-', alpha=.5)
def _plot(self, title):
py.grid()
py.title(title)
py.xlim([0.0,1.0])
def sinc_resample(self, xnew):
m,n = (len(self.x), len(xnew))
T = 1./n
A = np.zeros((m,n))
for i in range(0,m):
A[i,:] = np.sinc((self.x[i] - xnew)/T)
return Signal(xnew, npl.lstsq(A,self.y)[0])
def spline_resample(self, xnew):
s = spi.splrep(self.x, self.y)
return Signal(xnew, spi.splev(xnew, s))
class Error(Signal):
def __init__(self, a, b):
self.x = a.x
self.y = np.abs(a.y - b.y)
def plot(self, title):
self._plot(title)
py.plot(self.x, self.y, 'bo-')
py.ylim([0.0,.5])
def grid(n): return np.linspace(0.0,1.0,n)
def sample(f, x): return Signal(x, f(x))
def random_offsets(n, amt=.5):
return (amt/n) * (npr.random(n) - .5)
def jittered_grid(n, amt=.5):
return np.sort(grid(n) + random_offsets(n,amt))
def f(x):
t = np.pi * 2.0 * x
return np.sin(t) + .5 * np.sin(14.0*t)
n = 30
m = n + 1
# Signals
even = sample(f, np.r_[1:n+1] / float(n))
uneven = sample(f, jittered_grid(m))
hires = sample(f, grid(10*n))
sinc = uneven.sinc_resample(even.x)
spline = uneven.spline_resample(even.x)
sinc_err = Error(sinc, even)
spline_err = Error(spline, even)
# Plot Labels
sn = lambda x,n: "%sly Sampled (%s points)" % (x,n)
r = lambda x: "%s Reconstruction" % x
re = lambda x: "%s Error" % r(x)
plots = [
[even, sn("Even", n)],
[uneven, sn("Uneven", m)],
[sinc, r("Sinc")],
[sinc_err, re("Sinc")],
[spline, r("Cubic Spline")],
[spline_err, re("Cubic Spline")]
]
for i in range(0,len(plots)):
py.subplot(3, 2, i+1)
p = plots[i]
p[0].plot(p[1])
py.show()