আরডুইনোর জন্য কি কোনও সিগন্যাল স্মুথিং গ্রন্থাগার রয়েছে?


14

আমি একটি ওয়্যারলেস ২.৪ গিগাহার্টজ লিংকের মাধ্যমে নিয়ন্ত্রিত একটি মোবাইল রোবোটের সাথে কাজ করছি rece রিসিভারটি আরডুইনো ইউনিোর সাথে সংযুক্ত রয়েছে যা মূল নিয়ামক হিসাবে জাহাজটিতে কাজ করে। রিসিভার থেকে আসা সর্বাধিক সমালোচিত (এবং প্রধান) ইনপুট চ্যানেলটি খুব কোলাহলপূর্ণ সংকেত তৈরি করে, যার ফলে অ্যাকিউইটরের আউটপুটগুলিতে প্রচুর পরিমাণে ছোটখাটো পরিবর্তন দেখা দেয়, যদিও এগুলির প্রয়োজন হয় না।

এখানে চিত্র বর্ণনা লিখুন
                    30 সেকেন্ডের ব্যবধানে আরডুইনোর ইনপুটের প্লট।

আমি এমন লাইব্রেরি খুঁজছি যা দক্ষ মসৃণতা সম্পাদন করতে পারে। আরডুইনো (ইউনো) এর জন্য কি কোনও সিগন্যাল স্মুথিং লাইব্রেরি পাওয়া যায়?


আপনি এই ধরণের লাইব্রেরিগুলি খুঁজে পেতে পারেন কিনা তা জানেন না তবে আমি ভয় করি যে এইগুলিকে একটি আরডুইনোর জন্য অনেকগুলি সিপিইউ পাওয়ার প্রয়োজন হতে পারে। আমি যদি সম্ভব হয় তবে একটি বৈদ্যুতিন সমাধান (লো-পাস ফিল্টার) নিয়ে যেতে চাই।
jfpoil ব্যাখ্যা

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

উত্তর:


8

মাইক্রোসমাথ বর্তমানে একটি হালকা ওজনের সিগন্যাল স্মুথিং লাইব্রেরি যা আমার দ্বারা বিকাশিত।

এটি এখনও কাজ করা হচ্ছে এবং এর লক্ষ্য এটি মেমরির এবং দ্রুততার দিক দিয়ে হালকা করা। গ্রন্থাগারটি মসৃণ করার জন্য একাধিক ফিল্টার সরবরাহ করে:

  • সাধারণ সরানো গড় A
  • সূচকীয় চলমান গড়
  • ক্রমবর্ধমান চলমান গড়
  • স্যাভিটস্কি গোলে ফিল্টার
  • রামার ডগলাস পেকার অ্যালগোরিদম
  • কলমোগোরভ জুরবেঙ্কো ফিল্টার

লাইব্রেরিটি ব্যবহার করতে, এটি ডাউনলোড করে উত্স ডিরেক্টরিতে যুক্ত করুন। এছাড়াও, আপনার উত্স ফাইলে নিম্নলিখিত লাইনটি যুক্ত করুন:

#include "microsmooth.h"

হাই, আপনার লাইব্রেরিটি ব্যবহার করতে আমার সমস্যা হচ্ছে। আপনি ঠিক আপনার লাইব্রেরিটি আমদানি করতে "লাইব্রেরি আমদানি করুন ..." ব্যবহার করবেন না? আমি আমার .ino ফোল্ডারে উত্সটি কেবল অনুলিপি করার চেষ্টা করেছি, তবে অটোমিকোসোমথ.এইচ, সিরিয়ালটি সংজ্ঞায়িত হচ্ছে না, এবং অনুপস্থিত ';' সম্পর্কে ত্রুটি পেয়েছি। এই লাইব্রেরি এখনও কাজ করছে? ধন্যবাদ
waspinator 23

এই সম্পর্কে দুঃখিত ত্রুটিগুলি স্থির করে। সাহায্য করার জন্য ধন্যবাদ!
asheeshr

7

আমি মনে করি আপনার গোলমাল সংকেতে আমি প্রচুর একক নমুনা শব্দের স্পাইক দেখতে পাচ্ছি।

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

আসলে, আরডুইনোর জন্য অনেকগুলি সিগন্যাল-স্মুথিং লাইব্রেরি রয়েছে যার মধ্যে অনেকগুলি একটি মিডিয়ান ফিল্টার অন্তর্ভুক্ত রয়েছে।

সিগন্যাল-স্মুডিং গ্রন্থাগারগুলি arduino.cc এ:

গিথুবে সিগন্যাল-স্মুথিং গ্রন্থাগারগুলি:

আপনার রোবোট এই কাজ কিছু চাই? (3-এর মাঝারিটি খুব কম সিপিইউ শক্তি প্রয়োজন, এবং তাই দ্রুত):

/*
median_filter.ino
2014-03-25: started by David Cary
*/

int median_of_3( int a, int b, int c ){
    int the_max = max( max( a, b ), c );
    int the_min = min( min( a, b ), c );
    // unnecessarily clever code
    int the_median = the_max ^ the_min ^ a ^ b ^ c;
    return( the_median );
}

int newest = 0;
int recent = 0;
int oldest = 0;

void setup()
{
    Serial.begin(9600);
    // read first value, initialize with it.
    oldest = random(200);
    recent = oldest;
    newest = recent;
    Serial.println("median filter example: ");
}

void loop()
{
    // drop oldest value and shift in latest value
    oldest = recent;
    recent = newest;
    newest = random(200);

    Serial.print("new value: ");
    Serial.print(newest, DEC);

    int median = median_of_3( oldest, recent, newest );

    Serial.print("smoothed value: ");
    Serial.print(median, DEC);
    Serial.println("");

    delay(5000);
}

4

আপনি কি কম পাস ফিল্টার চেষ্টা করেছেন? আমি একটি উদাহরণ পাওয়া এখানে একটি অন্য এক এখানে

এই উভয় লাইব্রেরিতেই আপনার পছন্দের এনালগ সেন্সর থেকে প্রাপ্ত ডেটাগুলির একটি তালিকা রয়েছে যা গড় হয়। প্রতিটি নতুন সেন্সর মান তালিকায় যুক্ত করা হয় এবং সর্বশেষটি এইভাবে ফেলে দেওয়া হয়:

List: 3 4 3 3 4 3 5 3 2 3 4 3 
new reading added. old one thrown out
      /--                     /--
List: 5 3 4 3 3 4 3 5 3 2 3 4
list averaged

খুব সহজেই একটি সাধারণ এফআইআর ফিল্টার যা সমস্ত ট্যাপ মান সেট করে সেট করা হয় তার সাথে সেট করে 1. ট্যাপের মানগুলির সাথে ফিডিং সিগন্যালটিকে আরও উন্নত করতে পারে, তবে উচ্চতর গণিতের প্রয়োজন।
জিপ্পি

দ্রষ্টব্য: দ্বিতীয় লিঙ্কটি ক্রমগত চলমান গড়কে গণনা করে যা অ্যাকিউটরেটর নিয়ন্ত্রণের জন্য ব্যবহারিক পছন্দ নয়, বিশেষত এমন একটি যা ঘন ঘন শুরু এবং স্টপগুলিতে জড়িত থাকতে পারে। স্মুথড সিগন্যালটি সর্বদা প্রকৃত সিগন্যালের শীর্ষস্থানটিকে বেশ কিছুটা ব্যবধানে অনুসরণ করবে।
asheeshr

2

নিম্ন পাস ফিল্টার ব্যবহার করে আপনি এই ডিজিটালি ফিল্টার করতে পারেন:

int valueFilt = (1-0.99)*value + 0.99*valueFilt;

কাট অফ ফ্রিকোয়েন্সি (০.০ এর কাছাকাছি কম ফ্রিকোয়েন্সিটি) পরিবর্তন করতে 0.99 পরিবর্তন করুন। সেই মানটির প্রকৃত প্রকাশটি এক্সপ্রেস (-2 * পাই * f / fs) যেখানে f আপনি চান কাট অফ ফ্রিকোয়েন্সি এবং fs হ'ল ফ্রিকোয়েন্সি যেখানে ডেটা নমুনা করা হয়।

অন্য ধরণের "ডিজিটাল ফিল্টার" একটি ইভেন্ট ফিল্টার। এটি এমন ডেটাতে ভাল কাজ করে যার সাথে বিদেশী রয়েছে; যেমন 9,9,8,10,9,25,9। একটি ইভেন্ট ফিল্টার সর্বাধিক ঘন মান returns পরিসংখ্যানগতভাবে এটি মোড।

পরিসংখ্যান গড় হিসাবে যেমন গড়, মোড ইত্যাদি ..আরডিনো গড় লাইব্রেরি ব্যবহার করে গণনা করা যায় ।

আরডুইনো লাইব্রেরি পৃষ্ঠা থেকে নেওয়া একটি উদাহরণ উল্লেখ করা হয়েছে:

#include <Average.h>
#define CNT 600
int d[CNT];

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int i;

  for(i=0; i<CNT; i++)
  {
    d[i] = random(500);
  }  

  Serial.print("Mean: ");
  Serial.print(mean(d,CNT),DEC);
  Serial.print(" Mode: ");
  Serial.print(mode(d,CNT),DEC);
  Serial.print(" Max: ");
  Serial.print(maximum(d,CNT),DEC);
  Serial.print(" Min: ");
  Serial.print(minimum(d,CNT),DEC);
  Serial.print(" Standard deviation: ");
  Serial.print(stddev(d,CNT),4);
  Serial.println("");
  Serial.println("");

  delay(5000);
}

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