সবচেয়ে সহজ পদ্ধতির মধ্যে হ'ল জিম ক্লে প্রস্তাবিত (লিনিয়ার বা অন্যথায়) কিছু ধরণের স্প্লাইন ইন্টারপোলেশন করা । তবে, যদি আপনার কাছে ব্যাচ প্রসেসিংয়ের বিলাসিতা থাকে এবং বিশেষত আপনার যদি অযৌক্তিক নমুনাগুলির একটি অতিমাত্রায় সেট থাকে তবে একটি "নিখুঁত পুনর্গঠন" অ্যালগরিদম রয়েছে যা অত্যন্ত মার্জিত। সংখ্যাগত কারণে, এটি সব ক্ষেত্রে ব্যবহারিক নাও হতে পারে তবে ধারণাগত সম্পর্কে এটি কমপক্ষে জানার পক্ষে মূল্যবান। আমি প্রথম এই কাগজে এটি সম্পর্কে পড়তে ।
কৌশলটি হ'ল আপনার নন-ইউনিফর্ম নমুনাগুলির সেটটিকে বিবেচনা করা যেমন ইতিমধ্যে সিনপ ইন্টারপোলেশনের মাধ্যমে অভিন্ন নমুনাগুলি থেকে পুনর্গঠন করা হয়েছে । কাগজে স্বরলিপি অনুসরণ:
y(t)=∑k=1Ny(kT)sin(π(t−kT)/T)π(t−kT)/T=∑k=1Ny(kT)sinc(t−kTT).
নোট করুন যে এটি লিনিয়ার সমীকরণগুলির একটি সেট সরবরাহ করে, প্রতিটি নন-ইউনিফর্ম নমুনা যেখানে অজানাগুলি সমান-ব্যবধানযুক্ত নমুনা y ( কে টি ) এর মতো:y(t)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)⎤⎦⎥⎥⎥⎥.
উপরের সমীকরণে, অজানা ইউনিফর্ম নমুনার সংখ্যা, টি হ'ল ইউনিফর্ম নমুনা হারের বিপরীতমুখী, এবং মি হ'ল নুনিফর্ম নমুনার সংখ্যা (যা n এর চেয়ে বেশি হতে পারে )। সেই সিস্টেমের সর্বনিম্ন বর্গক্ষেত্রের সমাধান গণনা করে , অভিন্ন নমুনাগুলি পুনর্গঠন করা যায়। টেকনিক্যালি, শুধুমাত্র এন nonuniform নমুনা প্রয়োজনীয়, কিন্তু কীভাবে "বিক্ষিপ্ত" নির্ভর করে তারা হয় সময়, ক্ষেপক ম্যাট্রিক্স ভয়ঙ্করভাবে হতে পারে অসুস্থ নিয়ন্ত্রিত । যখন এটি হয়, তখন আরও নন ইউনিফর্ম নমুনাগুলি ব্যবহার করা সাধারণত সহায়তা করে।nTmnn
খেলনার উদাহরণ হিসাবে, এখানে উপরোক্ত পদ্ধতি এবং একটি হালকা জিটটার গ্রিডে কিউবিক স্প্লাইন ইন্টারপোলেশন এর মধ্যে একটি তুলনা ( ন্যাম্পি ব্যবহার করে ) দেওয়া হয়েছে:
(উপরের প্লটটি পুনরুত্পাদন করার কোডটি এই উত্তরের শেষে অন্তর্ভুক্ত করা হয়েছে)
নিম্নমানের শক্তিশালী পদ্ধতির জন্য নিম্নোক্ত কাগজগুলির যে কোনও একটি দিয়ে শুরু করা সম্ভবত সম্ভবত আরও উপযুক্ত হবে:
উঃ আলড্রোবি এবং কার্লেইঞ্জ গ্রোচেনিগ, শিফট-ইনগ্রেন্টেট স্পেসসে নন-ইউনিফর্ম স্যাম্পলিং এবং পুনর্গঠন , সিয়াম রেভ।, ২০০১, নং। 4, 585-620। ( পিডিএফ লিঙ্ক )।
কে। গ্রোচেনিগ এবং এইচ। সোয়াব, শিফ্ট- ইনগ্রায়েন্ট স্পেসসে ননুনিফর্ম স্যাম্পলিংয়ের জন্য দ্রুত স্থানীয় পুনর্গঠন পদ্ধতি , সিয়াম জে ম্যাট্রিক্স অ্যানাল। অ্যাপ্লিকেশন।, 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()