নন-ইই, সফ্টওয়্যার এপিআই প্রসঙ্গে "লো-পাস ফিল্টার"


12

আমি একজন অভিজ্ঞ সফটওয়্যার ইঞ্জিনিয়ার এবং স্মার্টফোনের সেন্সরগুলিতে কাজ করছি। আমি ডিএসপিতে মৌলিক EE ক্লাস নিয়েছি এবং আমার জ্ঞান প্রয়োগের চেষ্টা করছি। আমি বিশ্বাস করি যে আমি কনভলশন, ট্রান্সফার ফাংশন, জেড-ট্রান্সফর্ম ইত্যাদি বুঝতে পারি FIR আমি এফআইআর এবং আইআইআর ফিল্টারগুলি সম্পর্কে কিছুটা জানি।

এখন, সফ্টওয়্যার এপিআই এবং ডকুমেন্টেশনের মাধ্যমে পড়ার সময় আমি দেখতে পাচ্ছি যে লোকেরা সময় ডোমেনে সেন্সর ডেটাতে এলপিএফ প্রয়োগ করছে। আমি জানি যে আপনি পার্থক্য সমীকরণের ব্যবহারের মাধ্যমে এটি করেন (যেমন y [i] = y [i-1] + 2 * x [i]), কিন্তু আমি আমার ইই ক্লাসে শিখেছি যে সাধারণত এলপিএফ কনভলিউশন অপারেশনের মাধ্যমে প্রয়োগ করা হয় যেখানে আপনি সংকেত তরঙ্গ (উদাহরণস্বরূপ) এর সহগ এবং একটি নির্দিষ্ট কাট-অফ ফ্রিকোয়েন্সি সহ সময় সংকেতকে সমাধান করুন। সুতরাং "লো-পাস ফিল্টার" এর बोलचाল ব্যবহার আমার পক্ষে যথেষ্ট নয়।

উদাহরণস্বরূপ, গুগল অ্যান্ড্রয়েড এপিআইয়ের এই ডকুমেন্টেশন রয়েছে: http://developer.android.com/references/android/hardware/SensorEvent.html#values

 public void onSensorChanged(SensorEvent event)
 {
      // alpha is calculated as t / (t + dT)
      // with t, the low-pass filter's time-constant
      // and dT, the event delivery rate

      final float alpha = 0.8;

      gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
      gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
      gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

      linear_acceleration[0] = event.values[0] - gravity[0];
      linear_acceleration[1] = event.values[1] - gravity[1];
      linear_acceleration[2] = event.values[2] - gravity[2];
 }

আমি কীভাবে এই লো-পাস ফিল্টারটি ব্যাখ্যা করব? কাট অফ ফ্রিকোয়েন্সি কি? ট্রানজিশন ব্যান্ডউইথ কী? তারা কি এই এলপিএফকে কেবলমাত্র গড় হিসাবে ব্যবহার করছে?


ভাল এটি আমাকেও বিরক্ত করে
সিবস জুবিলিং

উত্তর:


11

আপনার উদাহরণের ফিল্টারটি প্রথম-অর্ডার অসীম ইমালস প্রতিক্রিয়া (আইআইআর) ফিল্টার। এটির স্থানান্তর ফাংশনটি হ'ল:

H(z)=1α1αz1

যা একটি পার্থক্য সমীকরণের সাথে মিলে যায়:

y[n]=αy[n1]+(1α)x[n]

x[n]y[n]

αα[0,1)α=0αα=1

α1α

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

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

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


ধন্যবাদ! কিছু ফলো-আপ প্রশ্ন: (1) আপনি বলেছেন আপনার সমীকরণ H (z) = ... একটি পার্থক্য সমীকরণ; এটা সত্যিই একটি স্থানান্তর ফাংশন, তাই না? আমি ভেবেছিলাম একটি পার্থক্য সমীকরণ কঠোরভাবে সময় ডোমেন জন্য। (২) আপনার ফাঁস ইন্টিগ্রেটারে, 1.0 কি নমুনা_ ফ্রিকোয়েন্সি / 2 (মতলবের মতো) এর সাথে মিল রাখে? (৩) আইআইআর বনাম আইআইআর সম্পর্কিত, আমার বোধগম্যতা কি সঠিক যে আইআইআর পার্থক্য সমীকরণটি ও (এন) এ প্রয়োগ করা যেতে পারে তবে সিদ্ধান্তটি ও (এন ^ 2) বা ও (এন এলজিএন) এফএফটি ভিত্তিক সমঝোতার সাথে? (4) আপনি এই ডিএসপি ধারণাগুলি বাস্তবায়নের জন্য সফ্টওয়্যার প্রোগ্রামারদের জন্য কোনও বইয়ের প্রস্তাব দিতে পারেন? অ্যান্ড্রয়েড কোড উদাহরণটি যা করছে তা পছন্দ করুন।
stackoverflowuser2010

π+πO(N)NN

আমি জানি যে (i) পার্থক্য সমীকরণটি হ'ল ও (এন)। তবে আমি ভেবেছিলাম যে (ii) বহুগুণ এবং সংযোজন (গীতাহো। সিএ / ডিএসপি / কনভোলিউশন / কনভোলিউশন.ইচটিএমএল) এর উপর সংক্ষেপণ ব্যবহার করে কনভ্যুলেশন অপারেশনটি এফএফটি ভিত্তিক বাস্তবায়নের সাথে ও (এন ^ 2) বা ও (এন এলজিএন) রয়েছে । সমস্ত ক্ষেত্রে, এন ফিল্টার অর্ডার - যেখানে আমি ফিল্টার ক্রম এবং সময় সংকেতের দৈর্ঘ্য একই মানের (যেমন উভয় 256) হিসাবে ধরে নিচ্ছি। তাহলে (i) এবং (ii) আলাদা নয়? এছাড়াও, আমি অ্যামাজন ডটকম এ লিওনস বইটি দেখেছি, তবে আমি সি / জাভা সফ্টওয়্যার প্রোগ্রামারদের জন্য আরও কিছু লিখিত হওয়ার জন্য আশা করছিলাম।
stackoverflowuser2010

1
O(N) NO(N2)MNO(MN)MN
জেসন আর

O(M×(N+M))iNO(N2)O(NM)
stackoverflowuser2010

2

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

যেমন একটি আইআইআর একটি অসীম দৈর্ঘ্যের প্রেরণার প্রতিক্রিয়া বোঝায়, ততক্ষণে কনভলিউশনটি গণনা করার জন্য চিরকালের প্রয়োজন হয়, বা একটি সন্নিবেশ ব্যবহার করা উচিত।

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

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


0

আমি নিজেকে এই পোস্টে বারবার ফিরে আসতে দেখছি। প্রশ্ন জিজ্ঞাসা করার জন্য আপনাকে ধন্যবাদ। এখানে সি (একটি মাইক্রোকন্ট্রোলারের উদ্দেশ্যে) লিকি ইন্টিগ্রেটারের একটি দুর্দান্ত, কম্পিউটেশনাল-বান্ধব বাস্তবায়ন implementation

প্রথমত, কিছু পুনর্বিন্যাস: y = α * x + (1 - α) * y_last = α * (x - y_last) + y_last

যদি আমরা α কে প্রায় 12%, 25%, 50%, (1/8, 1/4, 1/2, ...) হতে সীমাবদ্ধ করি। আমরা কিছু দক্ষ বিট-শিফটিংয়ের সুবিধা নিতে পারি। 1/8, 8 => 2 ^ 3 => কেস গ্রহণ করা (3 বার ডাউন শাফ্ট)

= (x - y_last) / 8 + y_last

#define SMOOTHING_FACTOR       (3)

int16_t FilterSample(int16_t new_sample)
{
  static int16_t last_result = 0;

  // Each bit shift down is equivalent to dividing-by-two
  last_result = (new_sample - last_result) >> SMOOTHING_FACTOR) + last_result;

  return last_result;
}

আশা করি এটা সাহায্য করবে.

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