কলম্যান ফিল্টার - বাস্তবায়ন, পরামিতি এবং সুরকরণ


10

প্রথমত, এই প্রথম আমি কলম্যান ফিল্টার তৈরির চেষ্টা করব।

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

এক্স ------- Y
16 --- 233.75
24 --- 234.01
26 --- 234.33
32 --- 234.12
36 --- 233.85
39 --- 233.42
47 --- 233.69
52 --- 233.68
55 --- 233.76
60 --- 232.97
66 --- 233.31
72 --- 233.99

এই টিউটোরিয়াল অনুসারে আমি আমার কালম্যান ফিল্টার প্রয়োগ করেছি: কলমি ফিল্টার ফর ডামিজ

আমার বাস্তবায়ন দেখতে এটির মতো (সিউডোকোড)।

//Standard deviation is 0.05. Used in calculation of Kalman gain

void updateAngle(double lastAngle){
  if(firsTimeRunning==true)
     priorEstimate = 0;               //estimate is the old one here
     priorErrorVariance = 1.2;        //errorCovariance is the old one
  else
     priorEstimate = estimate;              //estimate is the old one here
     priorErrorVariance = errorCovariance;  //errorCovariance is the old one
  rawValue = lastAngle;          //lastAngle is the newest Y-value recieved
  kalmanGain = priorErrorVariance / (priorErrVariance + 0.05);
  estimate = priorEstimate + (kalmanGain * (rawValue - priorEstimate));
  errorCovariance = (1 - kalmanGain) * priorErrVariance;
  angle = estimate;              //angle is the variable I want to update
}                                //which will be lastAngle next time

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

আমি এটি ব্যবহার করতে কেবল একটি চলমান গড় (সাধারণ এবং ঘাঁটিঘাঁটিযুক্ত ভারযুক্ত) ব্যবহার করে চলেছি। এই মুহুর্তে আমি এর মতো ভাল ফলও পেতে পারি না।

আমার প্রশ্নটি হ'ল যদি এটি সঠিক প্রয়োগ হয় এবং আমার পোস্টের নমুনা মান অনুসারে যদি আমার পূর্ববর্তী ত্রুটির বৈকল্পিকতা এবং মানক বিচ্যুতি ভাল দেখাচ্ছে? আমি কিছু ভাল ফলাফল পেতে পারি কিনা তা দেখার জন্য আমার পরামিতিগুলি কেবল এলোমেলোভাবে বেছে নেওয়া হয়েছে। আমি বেশ কয়েকটি বিভিন্ন রেঞ্জ চেষ্টা করেছি কিন্তু খারাপ ফলাফল দিয়েছি। আমি যে পরিবর্তন করতে পারি সে সম্পর্কে আপনার কাছে যদি কোনও পরামর্শ থাকে তবে এটি সত্যই প্রশংসিত হবে। আমি যদি কিছু স্পষ্ট জিনিস হারিয়ে না যায় তবে দুঃখিত। এখানেও প্রথমবারের মতো পোস্টিং।

উত্তর:


5

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

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

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


+1: বিশেষত শেষ অনুচ্ছেদ। কেএফ ডিজাইনে কোলাহলীয় সমবায়কে "নোবস" ট্যুইডল হিসাবে ভাবেন।
পিটার কে

4

যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে আপনার কাছে এমন কিছু আছে যা চলমান এবং আপনি গতিটি পর্যবেক্ষণ করতে পারেন এবং এই গতি শোরগোল। আপনার পরিমাপ থেকে আপনি 2 ধরণের বৈচিত্রগুলি পর্যবেক্ষণ করেন \

  1. গোলমাল দ্বারা সৃষ্ট বিভিন্নতা
  2. তারতম্য কারণ বস্তুটি সত্যই গতি পরিবর্তন করছে (যেমন বাঁক)

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

" আরে, আমার কাছে একটি অবজেক্ট রয়েছে যা একটি ধ্রুবক গতিতে চলেছে এবং আমি এই ধ্রুবক গতিটি অনুমান করতে চাই "

যেখানে আপনার মডেল, ভালো হয় সময়ে গতি এবং সংশ্লিষ্ট পরিমাপ।xkkyk

xk=xk1
yk=xk+qk

তবে আপনার অবজেক্টটি সেভাবে চলছে না। এটির গতি পরিবর্তন হচ্ছে এবং কখন এবং কখন এটি পরিবর্তন হতে চলেছে তা আপনি জানেন না।

পরিবর্তে আপনাকে যা বলতে হবে তা হ'ল:

" আরে, আমার কাছে একটি অবজেক্ট আছে যা গতিবেগে চলছে, তবে এটির গতি কীভাবে পরিবর্তন হচ্ছে সে সম্পর্কে আমি নিশ্চিত নই "

আপনি এটি করতে পারেন এমন অনেকগুলি উপায় রয়েছে: সবচেয়ে সহজ উপায় হ'ল আপনার রাজ্যের অনিশ্চয়তা যুক্ত করা।

xk=xk1+vk1you add uncertainty
yk=xk+qk
যেখানে এবং হোয়াইট শব্দের বলে মনে করা হয়।qkvk

আপনার কলম্যান ফিল্টার সমীকরণগুলি দেখতে এরকম হবে:

y^k|k1=x^k|k1
Kk=Pk|k1Pk|k1+Qo
x^k|k=x^k|k1+Kk(yky^k|k1)
Pk|k=Pk|k1KkPk|k1
Pk+1|k=Pk|k+Qs

আপনার ক্ষেত্রে 0.05মান হ'ল পর্যবেক্ষণের শব্দ সমবায়, । এই পরিবর্তনটি করতে আপনাকে যা করতে হবে তা হল , , রাষ্ট্রীয় শব্দের কোভেরিনেস (আপনার রাজ্যে অনিয়ন্ত্রিত) কিছু ধ্রুবক মান হিসাবে সেট করা।QoQs

আপনার কোডে সামান্য পরিবর্তনটি হবে:

stateVariance = 0.5

errorCovariance = (1 - kalmanGain) * priorErrVariance + stateVariance;

আপনার কোডে stateVarianceবা যোগ না করে আপনি ধরে নিয়েছেন যে এটি শূন্য।Qs

এই stateVarianceমানটি আপনার পছন্দসই কিছু হতে পারে। এটি গতি আসলে কতটা পরিবর্তিত হবে তার আপনার আত্মবিশ্বাসের ভিত্তিতে। যদি আপনি ভাবেন যে গতি মোটামুটি স্থির থাকবে, তবে এটি একটি অল্প সংখ্যায় সেট করুন।

এইভাবে আপনার কলমন গেইন শূন্যে যাবে না।


3

কলম্যান ফিল্টার ব্যবহার করার জন্য আপনার একটি গতিশীল সিস্টেম দরকার।

স হ্র হ

y=i=0naixi

a[k+1]=a[k]+w
cov(w)=Q
পরিমাপ:
z=i=0naixi=y

সুতরাং হিসাবে রাষ্ট্র হিসাবে ব্যবহার না করে সহগ ( ) হিসাবে রাজ্য হিসাবে পরিচয় করিয়ে দিনxa


1

আমি তোমাদের শাস্ত্রীয় নিয়ন্ত্রণ তত্ত্ব, যেমন থেকে কিছু ধারনা ব্যবহার করতে পারে মনে PID, নিয়ামক

আপনার সিগন্যাল ওয়াই নিয়ামক ইউ (টি) এর সেটপয়েন্ট হতে পারে। প্রক্রিয়া প্ল্যান্টটি মাত্র 1 এবং y (টি) ফিল্টার আউটপুট হবে। আপনাকে যা করতে হবে তা হ'ল আপনি যা চান তা পাওয়ার জন্য প্যারামিটার (টিউন) সেট করুন D

আউটপুট y (t) ইনপুটটি u (t) "অনুসরণ" করার চেষ্টা করবে, তবে এই ট্র্যাকিংটি কীভাবে হবে তা পরামিতিগুলি নিয়ন্ত্রণ করে।

ডিফারেনশিয়াল লাভ ডি আপনার প্রতিক্রিয়া দ্রুত ত্রুটির পরিবর্তনের জন্য সংবেদনশীল করে তুলবে। আপনার ক্ষেত্রে, আমি মনে করি ডি ছোট হওয়া উচিত। আপনি (টি) হঠাৎ করে পরিবর্তিত হলে আপনি (টি) পরিবর্তন করতে চান না।

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

পি লাভ একটি সূক্ষ্ম সুর দিতে পারে। যাইহোক, পরামিতিগুলি নিয়ে খেলতে চেষ্টা করুন এবং দেখুন কী পান।

টিউন করার জটিল পদ্ধতি রয়েছে তবে আমি বিশ্বাস করি না যে আপনার এটির প্রয়োজন হবে।

শুভকামনা।


আসলে, আরও ভাল পদ্ধতির আছে। এই পোস্টটি দেখুন ।
ড্যানিয়েল আর পিপা


1

এখানে কলমান ফিল্টারটির একটি সহজ এবং পরিষ্কার প্রয়োগ রয়েছে যা উইকিপিডিয়া পৃষ্ঠার মতো স্বীকৃতিগুলি অনুসরণ করে। https://github.com/zziz/kalman-filter

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.