একটি পরিবর্তনীয় হার থেকে একটি নির্দিষ্ট হারে পুনঃ-নমুনার জন্য একটি অ্যালগরিদম কী?


27

আমার একটি সেন্সর রয়েছে যা তার স্টাডিংয়ের সাথে টাইম স্ট্যাম্প এবং মান দিয়ে রিপোর্ট করে। তবে এটি নির্দিষ্ট হারে পাঠ্য উত্পন্ন করে না।

আমি ভেরিয়েবল রেট ডেটা মোকাবেলা করতে অসুবিধা পেয়েছি। বেশিরভাগ ফিল্টার একটি নির্দিষ্ট নমুনার হার আশা করে। অঙ্কিত অঙ্কনগুলি স্থির নমুনার হারের সাথেও সহজ।

একটি পরিবর্তনশীল নমুনা হার থেকে একটি নির্দিষ্ট নমুনা হারে পুনরায় নমুনার জন্য কি অ্যালগরিদম আছে?


এটি প্রোগ্রামারদের ক্রস পোস্ট। আমাকে বলা হয়েছিল এটি জিজ্ঞাসার জন্য আরও ভাল জায়গা। প্রোগ্রামার্স.স্ট্যাক্কেঞ্জঞ্জ
প্রশ্নগুলি

সেন্সর কখন একটি পঠন রিপোর্ট করবে তা নির্ধারণ করে? পড়ার পরিবর্তন হলেই কি এটি পাঠানো পাঠায়? একটি সহজ পদ্ধতির হ'ল "ভার্চুয়াল নমুনা ব্যবধান" (টি) চয়ন করা যা উত্পন্ন পাঠকের মধ্যে স্বল্পতম সময়ের চেয়ে সামান্য। অ্যালগরিদম ইনপুটটিতে, কেবলমাত্র সর্বশেষ রিপোর্ট করা পঠন (কারেন্টরেডিং) সংরক্ষণ করুন। অ্যালগরিদম আউটপুটগুলিতে, প্রতি টি সেকেন্ডে "নতুন নমুনা" হিসাবে কারেন্টরেডিংয়ের প্রতিবেদন করুন যাতে ফিল্টার বা গ্রাফিং পরিষেবা স্থির হারে (প্রতিটি টি সেকেন্ডে) রিডিং গ্রহণ করে। যদিও এটি আপনার ক্ষেত্রে এটি পর্যাপ্ত কিনা তা ধারণা নেই।
ব্যবহারকারী 2718

এটি প্রতি 5ms বা 10 মিমি নমুনার চেষ্টা করে। তবে এটি নিম্ন অগ্রাধিকারের কাজ, সুতরাং এটি মিস বা বিলম্বিত হতে পারে। আমার টাইমিংটি সঠিকভাবে 1 এমএসে। প্রসেসিংটি পিসিতে করা হয়, রিয়েল টাইমে নয়, তাই এটি কার্যকর করা সহজ হলে ধীর অ্যালগরিদম ঠিক আছে।
ফিগব্যাগ

1
আপনি কি ফিউরিয়ার পুনর্গঠনটি একবার দেখেছেন? অসম নমুনাযুক্ত তথ্যের ভিত্তিতে একটি ফুরিয়ার রূপান্তর রয়েছে। সাধারণ অ্যাওপ্রোচ হ'ল এক ফুরিয়ার চিত্রকে সমানভাবে নমুনাযুক্ত সময় ডোমেনে রূপান্তর করা।
mbaitoff

3
আপনি নমুনা নিচ্ছেন এমন অন্তর্নিহিত সংকেতের কোনও বৈশিষ্ট্য কি জানেন? যদি নিয়মিতভাবে ব্যবধানযুক্ত ডেটা সিগন্যালের ব্যান্ডউইথের সাথে পরিমাপের তুলনায় যথাযথভাবে উচ্চতর নমুনার হারে থাকে তবে একটি সমান-ব্যবধান সময় গ্রিডে বহুভৌমিক অন্তরঙ্গকরণের মতো সহজ কিছু কাজ করতে পারে।
জেসন আর

উত্তর:


21

সবচেয়ে সহজ পদ্ধতির মধ্যে হ'ল জিম ক্লে প্রস্তাবিত (লিনিয়ার বা অন্যথায়) কিছু ধরণের স্প্লাইন ইন্টারপোলেশন করা । তবে, যদি আপনার কাছে ব্যাচ প্রসেসিংয়ের বিলাসিতা থাকে এবং বিশেষত আপনার যদি অযৌক্তিক নমুনাগুলির একটি অতিমাত্রায় সেট থাকে তবে একটি "নিখুঁত পুনর্গঠন" অ্যালগরিদম রয়েছে যা অত্যন্ত মার্জিত। সংখ্যাগত কারণে, এটি সব ক্ষেত্রে ব্যবহারিক নাও হতে পারে তবে ধারণাগত সম্পর্কে এটি কমপক্ষে জানার পক্ষে মূল্যবান। আমি প্রথম এই কাগজে এটি সম্পর্কে পড়তে ।

কৌশলটি হ'ল আপনার নন-ইউনিফর্ম নমুনাগুলির সেটটিকে বিবেচনা করা যেমন ইতিমধ্যে সিনপ ইন্টারপোলেশনের মাধ্যমে অভিন্ন নমুনাগুলি থেকে পুনর্গঠন করা হয়েছে । কাগজে স্বরলিপি অনুসরণ:

y(t)=k=1Ny(kT)sin(π(tkT)/T)π(tkT)/T=k=1Ny(kT)sinc(tkTT).

নোট করুন যে এটি লিনিয়ার সমীকরণগুলির একটি সেট সরবরাহ করে, প্রতিটি নন-ইউনিফর্ম নমুনা যেখানে অজানাগুলি সমান-ব্যবধানযুক্ত নমুনা y ( কে টি ) এর মতো:y(t)y(kT)

[y(t0)y(t1)y(tm)]=[sinc(t0TT)sinc(t02TT)sinc(t0nTT)sinc(t1TT)sinc(t12TT)sinc(t1nTT)sinc(tmTT)sinc(tm2TT)sinc(tmnTT)][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()

tj=jT

যেহেতু আমি এটি বুঝতে পেরেছি, ওপির প্রশ্নটি সেই নমুনাগুলি সম্পর্কে যা বাদ পড়ে এবং / অথবা বিলম্বিত হয়। এই পদ্ধতিটি মূলত কেবল সমীকরণের একটি ওভারডিটারমিনেড সিস্টেম, সুতরাং বাদ দেওয়া নমুনাগুলি কেবল অজানা হিসাবে প্রদর্শিত হয় (0 এর মান সহ ডেটা পয়েন্ট হিসাবে নয়)। অথবা সম্ভবত আপনি যা জিজ্ঞাসা করছেন তা নয়?
ডেটাজিস্ট

tjj,yjjJy0=0yj

যদি নমুনার হারগুলি হুবহু অভিন্ন (ডাব্লু / অনুপস্থিত পয়েন্ট) হয় তবে ইন্টারপোলেশন ম্যাট্রিক্স বিচ্ছিন্ন হবে (কারণ প্রতিটি আউটপুট কেবল একটি ইনপুট নির্ভর করে)। সাধারণভাবে, নন-ইউনিফর্ম নমুনার গড় নমুনার হার অভিন্ন পুনর্নির্মাণ হারের চেয়ে বেশি হওয়া দরকার। অন্য কথায়, "শূন্যস্থান পূরণ" (আপনার উদাহরণের জন্য টি> 1) আপনাকে কম হারে পুনর্গঠন করতে হবে। আমি যদিও আপনার পয়েন্ট দেখতে।
ডেটাজিস্ট

2
এর মতো উত্তরগুলি খাঁটি সোনার।
আহমেদ ফসিহ

6

এটি অ্যাসিক্রোনাস নমুনা হার রূপান্তর সমস্যার মত মনে হচ্ছে। একটি নমুনা হার থেকে অন্যটিতে রূপান্তরিত করতে, আমরা সংক্ষেপের বিরক্তি সম্পাদন করে সংকেতের অবিচ্ছিন্ন সময় উপস্থাপনা গণনা করতে পারি, তারপরে আমাদের নতুন নমুনা হারে পুনরায় নমুনা করতে পারি। আপনি যা করছেন তা খুব আলাদা নয়। নমুনার সময় স্থির করার জন্য আপনার সিগন্যালের পুনরায় নমুনা প্রয়োজন।

অবিচ্ছিন্ন সময় সংকেত একটি নমুনা ফাংশন সঙ্গে প্রতিটি নমুনা সংশ্লেষ করে গণনা করা যেতে পারে। যেহেতু সিনক ফাংশন অনির্দিষ্টকালের জন্য অব্যাহত থাকে, আমরা ব্যবহারিক সীমাবদ্ধ দৈর্ঘ্যের উইন্ডোড সিনকের মতো আরও ব্যবহারিক কিছু ব্যবহার করি। জটিল অংশটি হ'ল আপনার নমুনাগুলি সময়মতো ঘুরে বেড়ায়, পুনরায় মডেল করার সময় প্রতিটি নমুনার জন্য অফসেটের একটি ভিন্ন ধরণের অফসেট ব্যবহার করা প্রয়োজন।

নমুনাযুক্ত সিগন্যাল থেকে অবিচ্ছিন্ন সময় সংকেত:

x(t)=n=x[n]sinc(tnTsTs)

Ts

x(t)=n=x[n]sinc(tnTs[n]Ts[n])

এটি থেকে আপনি সংকেতটি পুনরায় নমুনা করতে পারেন:

y[n]=x(nTns

Tns

এগুলি একসাথে রাখলে আপনি পাবেন:

y[m]=n=x[n]sinc(mTnsnTs[n]Ts[n])

যেহেতু এটি কার্যকরী বা ট্র্যাকটেবল নয়, তাই সংশ্লেষের সীমাবদ্ধ সমর্থন এবং একটি সামঞ্জস্যের সীমা অনুসারে সামঞ্জস্য করা যায় function

কার্নেল (টি) এর পরে উইন্ডোযুক্ত সিঙ্ক বা অন্য 2 মিল দৈর্ঘ্যের অনুরূপ ফাংশন হতে দিন:

y[m]=n=kkx[n]kernel(mTnsnTs[n]Ts[n])

আমি আশা করি এটি সাহায্য করে ..., তবে আমি হয়ত পথে ভুল করেছি এবং এটি কিছুটা গণিত নিবিড় হতে পারে। আমি আরও তথ্যের জন্য নমুনা হার রূপান্তর গবেষণা সুপারিশ করব। সম্ভবত এখানে অন্য কেউ আরও ভাল ব্যাখ্যা বা সমাধান দিতে পারে।


একটি সংকেতের অবিচ্ছিন্ন সংস্করণ পুনর্গঠন করার জন্য একটি সিনক ফাংশন ব্যবহার করে নমুনাগুলি সমানভাবে ফাঁক করা প্রয়োজন, সুতরাং সিন্ক ফাংশনটি আরবিট্রে নমুনা ব্যবধানের সাথে মানিয়ে নিতে হবে। বাস্তবায়ন করা বরং কঠিন হতে পারে।
ব্যবহারকারী 2718

হ্যাঁ, এখানে যেমন দেখা যায় ঠিক তেমন করতে এটি খুব দক্ষ হবে না। এটি প্রতিটি পৃথক নমুনা সময়ের জন্য নতুন কার্নেল সহগের গণনা করা প্রয়োজন। বেশ কয়েকটি কার্নেলের সংকলনটি গণনা করা যেতে পারে এবং এর মধ্যে একটিতে সময় নির্ধারিত ছিল। কোয়ান্টাইজেশন ত্রুটির তুলনায় একটি পারফরম্যান্স হিট হবে।
জ্যাকব

আপনি একটি একক সিন লুচিং টেবিলের প্রাক-গণনা করতে পারেন এবং সেই অনুসন্ধান সারণির পয়েন্টগুলির মধ্যে ইন্টারপোলেট করতে পারেন।
জেএমএস

5

আমি মনে করি জ্যাকবের উত্তরটি খুব কার্যকর।

বিকৃতি প্রবর্তনের ক্ষেত্রে সম্ভবত এতটা সহজ নয় এমন একটি সহজ পদ্ধতি হ'ল বহুপক্ষীয় অন্তরঙ্গকরণ। আপনার স্বেচ্ছাসেবী সময়ের নমুনাগুলি থেকে যে কোনও সময় আপনি চান নমুনা তৈরি করতে আমি লিনিয়ার ইন্টারপোলেশন (সহজ, ভাল সংকেত পারফরম্যান্স অনুযায়ী নয়) বা কিউবিক স্প্লাইস (এখনও খুব শক্ত নয়, ভাল সংকেত পারফরম্যান্স) ব্যবহার করব।


1
আপনি উত্তরটি জ্যাকব এর চেয়ে প্রয়োগ করা অনেক সহজ বলে মনে হচ্ছে, তাই আমি প্রথমে এটি নিয়ে চলেছি। মনে হচ্ছে এটি কাজ করছে, তবে আমি এখনও পরীক্ষার পুরো সেট চালাচ্ছি না।
ফিগব্যাগ

1
@ ফিগব্যাগ - আপনার যদি সময় থাকে তবে আপনার চূড়ান্ত সমাধানের সাথে একটি মন্তব্য যুক্ত করুন।
ব্যবহারকারী 2718

2


Nnear

Nnear
y1y1
y0(y1+y1)/2
[xi,yi]xi=0
y0yi
[xi,yi]
a+bxy0a
চতুর্ভুজ, ঘনকক্ষেত্র, সাইন-কোসিনগুলি একইভাবে ফিট করা যায়।



2πftf


4 বা 6 বা 8 প্রতিবেশীর সাথে লিনিয়ার সংযোগ আপনার ডেটার জন্য যথেষ্ট ভাল কাজ করতে পারে।
আমি এমন একটি পদ্ধতি দিয়ে শুরু করার পরামর্শ দেব যা আপনি স্প্লাইংগুলিতে ডুব দেওয়ার আগে পুরোপুরি বুঝতে পেরেছেন, সিনক-জাতীয় ... যদিও এটি মজাদারও হতে পারে।


আরেকটি, বেশ আলাদা পদ্ধতি হ'ল বিপরীত দূরত্বের ওজন । এটি কার্যকর করা সহজ ( এসও- তে পাইথন-সহ আইডাব্লু-ইন্টারপোলেশন দেখুন ), 2 ডি 3 ডি এবং তারও বেশি কাজ করে তবে তাত্ত্বিকভাবে বিশ্লেষণ করা আফিক কঠিন।

(স্পষ্টতই, কোনও একক দ্বিখণ্ডক পদ্ধতি
বাস্তবে ঘটে যাওয়া [সংকেত, গোলমাল, ত্রুটি মেট্রিক, পরীক্ষা ফাংশন] এর মিলিয়ন মিলিয়নগুলিতে সম্ভবত ফিট করতে পারে test
বিশ্বে আরও অনেক পদ্ধতি রয়েছে, পরীক্ষার ফাংশনগুলির চেয়ে আরও বেশি গিরিযুক্ত।
তবে তবুও একটি গ্যালারী পদ্ধতি এবং পরীক্ষা ফাংশন দরকারী হতে পারে।)


1

আপনি যদি মাতলাব নিয়ে কাজ করেন তবে টাইমসারিগুলির সাথে কাজ করে এটি করতে পারেন।

time  % is your starting vector of time

data % vector of data you want to resample 

data_TS = timeseries(data,time); % define the data as a timeseries 

new_time = time(0):dt:time(end); % new vector of time with fixed dt=1/fs

data_res = resample(data_TS,new_time); % data resampled at constant fs

0

আপনি কিছু বিদেশী প্রক্রিয়াকরণ করার আগে আপনি এর মতো সহজ কিছু চেষ্টা করতে পারেন (সিউডো কোড - কোনও প্রক্ষেপণ নয়, তবে এটি যুক্ত করা যেতে পারে)

TimeStamp[]  //Array of Sensor TimeStamps -NULL terminated – TimeStamp[i] corresponds to Reading[i]
Reading[]      //Array of Sensor Readings       -NULL terminated

AlgorithmOut   //Delimited file of of readings in fixed sample time (5ms) 
CurrentSavedReading = Reading[0]

SampleTime=TimeStamp[0] //ms virtual sample time, 5ms fixed samples

i = 0 // loop index
While(TimeStamp[i] != NULL)
{
   FileWrite (CurrentSavedReading, AlgorithmOut)//write value to file
   SampleTime = SampleTime + 5//ms
   if(SampleTime > TimeStamp[i])
   {
      i++
      CurrentSavedReading = Reading[i]
   }
}

0

আইএমএইচও ডেটাজেস্টের উত্তর সঠিক, জ্যাকবের উত্তর নেই। এটি যাচাই করার একটি সহজ উপায় হ'ল ডেটাজেস্টের প্রস্তাবিত অ্যালগরিদমটি মূল নমুনাগুলির (বিস্মৃত সংখ্যাসম্য নির্ভুলতা অনুমান করে) বিভক্ত হওয়ার নিশ্চয়তা দেওয়া হয়েছে, তবে জ্যাকবের উত্তর তা দেয় না।

  • ইউনিফর্ম স্যাম্পলিংয়ের ক্ষেত্রে, সিনক ফাংশনগুলির সেটটি অরথোগোনাল: প্রতিটি স্থানান্তরিত সিনক ফাংশন যদি ইনপুট নমুনাগুলির চেয়ে আলাদা হয় তবে তারা একটি অসীম পরিচয় ম্যাট্রিক্স গঠন করে। এটি কারণ n = 0 ব্যতীত সমস্ত এন এর জন্য sin (n pi) / (n pi) শূন্য।
  • যাইহোক, এই সম্পত্তিটি অ-ইউনিফর্মের ক্ষেত্রে কেবল বহিঃপ্রকাশ করা যায় না: একই ধরণের সিন্ক ফাংশনগুলি, ইনপুট নমুনাগুলির চেয়ে পৃথক হয়ে একটি নন্ট্রাইভিয়াল ম্যাট্রিক্স উপার্জন করবে। সুতরাং, পার্শ্ববর্তী নমুনাগুলির থেকে অবদানগুলি শূন্য হবে না এবং পুনর্নির্মাণটি আর ইনপুট নমুনাগুলির মাধ্যমে বিচ্ছিন্ন হবে না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.