সরাসরি দুটি স্পেকট্রার মধ্যে সাবপিক্সেল শিফ্টের তুলনা করুন - এবং বিশ্বাসযোগ্য ত্রুটি পান


9

আমার একই জ্যোতির্বিদ্যা সংক্রান্ত দুটি জিনিস রয়েছে spect অপরিহার্য প্রশ্নটি হ'ল: আমি কীভাবে এই বর্ণালীর মধ্যে আপেক্ষিক স্থানান্তরটি গণনা করতে পারি এবং সেই শিফটে একটি সঠিক ত্রুটি পেতে পারি?

আপনি এখনও আমার সাথে থাকলে আরও কিছু বিশদ। প্রতিটি বর্ণালী একটি এক্স মান (তরঙ্গদৈর্ঘ্য), y মান (ফ্লাক্স), এবং ত্রুটি সহ একটি অ্যারে হবে। তরঙ্গদৈর্ঘ্য শিফট সাব পিক্সেল হতে চলেছে। অনুমান করুন যে পিক্সেলগুলি নিয়মিতভাবে ব্যবধানে থাকে এবং পুরো স্পেকট্রামে কেবল একটি একক তরঙ্গদৈর্ঘ্য শিফট প্রয়োগ করা হবে। সুতরাং শেষের উত্তরটি এমন হবে: 0.35 +/- 0.25 পিক্সেল।

দুটি বর্ণালী বেশ কয়েকটি বৈশিষ্ট্যযুক্ত ধারাবাহিক হতে চলেছে যা কিছু জটিল শোষণ বৈশিষ্ট্য (ডিপস) দ্বারা বিরামচিহ্ন হয় যা সহজেই মডেল হয় না (এবং পর্যায়ক্রমে হয় না)। আমি এমন একটি পদ্ধতি খুঁজে পেতে চাই যা সরাসরি দুটি বর্ণের সাথে তুলনা করে।

প্রত্যেকের প্রথম প্রবৃত্তিটি ক্রস-পারস্পরিক সম্পর্ক স্থাপন করা হয় তবে সাবপিক্সেল শিফটগুলির সাথে আপনাকে স্পেকট্রার মধ্যে বিভক্ত হতে হবে (প্রথমে স্মুথিং দ্বারা?) - ত্রুটিগুলি সঠিকভাবে পেতে খারাপ লাগবে।

আমার বর্তমান পদ্ধতিটি হ'ল গাউসিয়ান কার্নেলের সাথে সংশ্লেষ করে ডেটা মসৃণ করা, তারপরে স্মুথযুক্ত ফলাফলটি ছড়িয়ে দেওয়া এবং দুটি স্প্লাইড বর্ণালির তুলনা করা - তবে আমি এটি বিশ্বাস করি না (বিশেষত ত্রুটিগুলি)।

কেউ কি সঠিকভাবে এটি করার কোনও উপায় জানেন?

এখানে একটি সংক্ষিপ্ত পাইথন প্রোগ্রাম রয়েছে যা আপনার সাথে খেলতে পারে এমন দুটি খেলনা বর্ণালী তৈরি করবে যা 0.4 পিক্সেল দ্বারা স্থানান্তরিত হবে (toy1.ascii এবং toy2.ascii এ লিখিত)। যদিও এই খেলনা মডেলটি একটি সাধারণ গাউসীয় বৈশিষ্ট্য ব্যবহার করে তবে ধরে নিন যে আসল ডেটা কোনও সাধারণ মডেলের সাথে মানানসই নয়।

import numpy as np
import random as ra
import scipy.signal as ss
arraysize = 1000
fluxlevel = 100.0
noise = 2.0
signal_std = 15.0
signal_depth = 40.0
gaussian = lambda x: np.exp(-(mu-x)**2/ (2 * signal_std))
mu = 500.1
np.savetxt('toy1.ascii', zip(np.arange(arraysize), np.array([ra.normalvariate(fluxlevel, noise) for x in range(arraysize)] - gaussian(np.arange(arraysize)) * signal_depth), np.ones(arraysize) * noise))
mu = 500.5
np.savetxt('toy2.ascii', zip(np.arange(arraysize), np.array([ra.normalvariate(fluxlevel, noise) for x in range(arraysize)] - gaussian(np.arange(arraysize)) * signal_depth), np.ones(arraysize) * noise))

যদি আমি সঠিকভাবে বুঝতে পারি তবে সমস্যাটি চিত্র নিবন্ধের অনুরূপ, যদি আপনার কাছে কেবল একটি অক্ষরেখায় একটি লিনিয়ার সাব-পিক্সেল শিফ্ট থাকে। হতে পারে স্ট্যান্ড রিলেশন সম্পর্কিত স্ট্যান্ডার্ড ইমেজ রেজিস্ট্রেশন কৌশল চেষ্টা করুন?
পল আর

যদি আপনার একটি সিগন্যালে খাঁটি দেরি হয় (যেমন আপনি যে তরঙ্গদৈর্ঘ্য প্যারামিটারের কথা বলছেন) তবে আপনি ফুরিয়ার ট্রান্সফর্ম সম্পত্তিটি কাজে লাগাতে পারবেন যা সময়ের বিলম্বকে ফ্রিকোয়েন্সি ডোমেনে রৈখিক পর্যায়ে অফসেটে রূপান্তরিত করে। দুটি পরিমাপ বিভিন্ন মাপের শব্দের বা হস্তক্ষেপ দ্বারা দূষিত না হলে এটি কাজ করতে পারে।
জেসন আর

1
এই থ্রেডটি কার্যকর হতে পারে
জিম ক্লে

1
পরীক্ষার জন্য আপনার কাছে কি সত্যিকারের ডেটা আছে? আপনি যে গোলমাল মূল্য দিয়েছেন তা ক্রম-সম্পর্কের পক্ষে সাব-নমুনাটি নির্ভুল হতে পারে। এটি কয়েকটি গোলমাল 2.0 এর রান করে এবং এটি 0.7 (= 1000.7 এর প্লটটির এক্স-অক্ষে) অফসেট করে, এটি উদাহরণস্বরূপ: i.stack.imgur.com/UK5JD.png
এন্ডোলিথ

উত্তর:


5

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

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

এখানে আরও জটিল, তবে আরও সঠিক অনুমানের একটি তালিকা রয়েছে। "উপরোক্ত পদ্ধতিগুলির মধ্যে কুইনের দ্বিতীয় অনুমানকারীর মধ্যে কমপক্ষে আরএমএস ত্রুটি রয়েছে।"

আমি গণিত জানি না, তবে এই গবেষণাপত্রে বলা হয়েছে যে তাদের প্যারাবোলিক ইন্টারপোলেশনে একটি এফএফটি বিনের প্রস্থের 5% তাত্ত্বিক নির্ভুলতা রয়েছে।

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

এটি কেবলমাত্র প্যারাবোলিক ফিট ব্যবহার করে তবে শব্দটি কম থাকলে এটি অফসেটের জন্য সঠিক মানটিকে ছাড়িয়ে যায়:

def parabolic_polyfit(f, x, n):
    a, b, c = polyfit(arange(x-n//2, x+n//2+1), f[x-n//2:x+n//2+1], 2)
    xv = -0.5 * b/a
    yv = a * xv**2 + b * xv + c

    return (xv, yv)

arraysize = 1001
fluxlevel = 100.0
noise = 0.3 # 2.0 is too noisy for sub-sample accuracy
signal_std = 15.0
signal_depth = 40.0
gaussian = lambda x: np.exp(-(mu-x)**2/ (2 * signal_std))
mu = 500.1
a_flux = np.array([ra.normalvariate(fluxlevel, noise) for x in range(arraysize)] - gaussian(np.arange(arraysize)) * signal_depth)
mu = 500.8
b_flux = np.array([ra.normalvariate(fluxlevel, noise) for x in range(arraysize)] - gaussian(np.arange(arraysize)) * signal_depth)

a_flux -= np.mean(a_flux)
b_flux -= np.mean(b_flux)

corr = ss.fftconvolve(b_flux, a_flux[::-1])

peak = np.argmax(corr)
px, py = parabolic_polyfit(corr, peak, 13)

px = px - (len(a_flux) - 1)
print px

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

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

শব্দ = 0.2 এবং 3-পয়েন্ট ফিটের সাথে এটি অফসেট = 0.4 এর জন্য 0.398 এবং 0.402 এর মতো মান দেয়।

গোলমাল = ২.০ এবং ১৩-পয়েন্টের ফিট সহ এটি অফসেট = 0.4 এর জন্য 0.156 এবং 0.595 এর মতো মান দেয়।


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

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

হ্যাঁ, আমি লিনিয়ার এবং ২ য় অর্ডার ইন্টারপোলশনে অগ্রহণযোগ্য পক্ষপাতিত্ব পেয়েছি। আমি এফএফটি শূন্য-প্যাডিং চেষ্টা করেছি, তবে ফলাফলটি উচ্চ-ফ্রিকোয়েন্সি রিংয়ের দ্বারা প্রাধান্য পেয়েছে ... কোনও সম্ভাবনা আপনি শূন্য-প্যাডিং উদাহরণ যোগ করতে পারেন?
কেফলাভিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.