Arduino के लिए कोई संकेत चौरसाई पुस्तकालय हैं?


14

मैं एक वायरलेस 2.4 गीगाहर्ट्ज लिंक के माध्यम से नियंत्रित एक मोबाइल रोबोट पर काम कर रहा हूं। रिसीवर Arduino Uno से जुड़ा है जो मुख्य नियंत्रक के रूप में जहाज पर कार्य करता है। रिसीवर से आने वाला सबसे महत्वपूर्ण (और मुख्य) इनपुट चैनल एक बहुत शोर संकेत पैदा करता है, जिससे एक्ट्यूएटर्स के आउटपुट में बहुत से छोटे बदलाव होते हैं, भले ही इन की आवश्यकता न हो।

यहाँ छवि विवरण दर्ज करें
                    30 सेकंड के अंतराल में Arduino के इनपुट का प्लॉट।

मैं पुस्तकालयों की तलाश कर रहा हूं जो कुशल चौरसाई कर सकें। क्या कोई संकेत चौरसाई पुस्तकालयों Arduino (Uno) के लिए उपलब्ध हैं?


पता नहीं अगर आप इस तरह के पुस्तकालयों को पा सकते हैं, लेकिन मुझे डर है कि ये एक Arduino के लिए बहुत सीपीयू शक्ति की आवश्यकता हो सकती है। यदि संभव हो तो मैं एक इलेक्ट्रॉनिक समाधान (कम-पास फिल्टर) के साथ जाना चाहूंगा।
jfpoilpret

मैं इस पर jfpoilpret के साथ हूं। मुझे लगता है कि आपको एक इलेक्ट्रॉनिक समाधान की आवश्यकता है। मैं एक स्थिरीकरण संधारित्र, (सरल कम पास फिल्टर) की कोशिश करूंगा। मुझे लगता है कि आप एक एडीसी चैनल का उपयोग कर रहे हैं, इसलिए आपको इस चैनल से जमीन पर एक टोपी डालनी चाहिए। लगभग 100pf मानों से शुरू करें, और वहां से काम करें।
जॉन बी

जवाबों:


8

Microsmooth वर्तमान में मेरे द्वारा विकसित किया जा रहा एक lighweight संकेत चौरसाई पुस्तकालय है।

अभी भी इस पर काम किया जा रहा है और इसका उद्देश्य स्मृति और तेज़ के मामले में इसे हल्का बनाना है। लाइब्रेरी स्मूथिंग के लिए कई फिल्टर प्रदान करता है:

  • सिंपल मूविंग एवरेज
  • घातीय मूविंग एवरेज
  • संचयी मूविंग औसत
  • सावित्ज़की गोलय फ़िल्टर
  • रैमर डगलस पीकर अल्गोरिथम
  • कलमोगोरोव ज़र्बेंको फ़िल्टर

पुस्तकालय का उपयोग करने के लिए, इसे डाउनलोड करें और इसे स्रोत निर्देशिका में जोड़ें। इसके अलावा, निम्न स्रोत को अपनी स्रोत फ़ाइल में जोड़ें:

#include "microsmooth.h"

नमस्ते, मुझे आपके पुस्तकालय का उपयोग करने में परेशानी हो रही है। आप अपनी लाइब्रेरी को सही आयात करने के लिए "इंपोर्ट लाइब्रेरी ..." का उपयोग नहीं करेंगे? मैंने अपने .ino फ़ोल्डर में स्रोत को कॉपी करने की कोशिश की, लेकिन मुझे आटोमाइक्रोस्मूथ के बारे में त्रुटियां हो रही हैं। सीरीयल को परिभाषित नहीं किया जा रहा है, और 'लापता' है। क्या यह पुस्तकालय अभी भी काम कर रहा है? धन्यवाद
२०:३५

@waspinator इसके बारे में क्षमा करें। त्रुटियों को ठीक किया। प्रतिक्रिया के लिए धन्यवाद!
एशेश्र

7

मुझे लगता है कि मुझे आपके शोर सिग्नल में बहुत सारे एकल-नमूना शोर स्पाइक्स दिखाई देते हैं।

मंझला फिल्टर किसी भी रैखिक फिल्टर की तुलना में एकल-नमूना शोर स्पाइक्स से छुटकारा पाने में बेहतर करता है। (यह किसी भी कम पास फिल्टर, चलती औसत, भारित चलती औसत आदि से बेहतर है, इसकी प्रतिक्रिया समय और इस तरह के एकल-नमूना शोर स्पाइक को अनदेखा करने की क्षमता के मामले में)।

वास्तव में, Arduino के लिए कई सिग्नल-स्मूथिंग लाइब्रेरी हैं, जिनमें से कई में एक माध्य फ़िल्टर शामिल है।

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. नल के मूल्यों के साथ फ़िडलिंग संकेत को और बेहतर बना सकता है, लेकिन इसके लिए आवश्यक गणित की आवश्यकता होती है।
जिप्पी

नोट: दूसरा लिंक संचयी चलती औसत की गणना करता है जो कि एक्ट्यूएटर नियंत्रण के लिए व्यावहारिक विकल्प नहीं है, विशेष रूप से एक जिसमें लगातार शुरुआत और स्टॉप शामिल हो सकते हैं। स्मूथेड सिग्नल हमेशा वास्तविक सिग्नल के शिखर मूल्य को काफी मार्जिन से पार करेगा।
एशेश्र

2

आप एक कम पास फ़िल्टर का उपयोग करके इसे डिजिटल रूप से फ़िल्टर कर सकते हैं:

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

कट ऑफ फ्रीक्वेंसी को बदलने के लिए 0.99 को बदलें (1.0 के करीब है कम आवृत्ति)। उस मूल्य के लिए वास्तविक अभिव्यक्ति एक्सप (-2 * पी * एफ / एफएस) है जहां एफ कटऑफ आवृत्ति आप चाहते हैं और एफएस वह आवृत्ति है जिस पर डेटा का नमूना लिया जाता है।

एक अन्य प्रकार का "डिजिटल फ़िल्टर" एक इवेंट फ़िल्टर है। यह डेटा पर अच्छा काम करता है जिसमें आउटलेयर है; जैसे 9,9,8,10,9,25,9। एक ईवेंट फ़िल्टर सबसे लगातार मूल्य देता है। सांख्यिकीय रूप से यह विधा है।

माध्य, मोड आदि जैसे सांख्यिकीय औसत की गणना Arduino औसत लाइब्रेरी का उपयोग करके की जा सकती है ।

एक उदाहरण Arduino Library पृष्ठ से लिया गया है:

#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
ध्यान दें कि यह बहुत धीमी गति से होगा, क्योंकि यह फ्लोट और बैक पर बहुत सारे निहितार्थ कर रहा है।
कॉनर वुल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.