एक्सेलेरोमीटर डेटा विशेषताओं का विश्लेषण और एक फिल्टर डिजाइन करना


14

मेरे पास एक बुनियादी ड्राइविंग परिदृश्य 25MPH सामान्य सड़कों के एक्सेलेरोमीटर डेटा के बारे में 32 सेकंड के साथ-साथ लगभग 7 गड्ढे और सड़क का एक मोटा पैच है। एक्सेलेरोमीटर को मेरी कार के डैश बोर्ड पर डबल साइडेड टेप के साथ लगाया गया है।

समस्या: मेरे पास सभी डेटा हैं जो एक्सेलेरोमीटर से शोर है, और मुझे यह पता लगाने के लिए एक सरल तरीका बनाने की आवश्यकता है कि एक गड्ढा घटना हुई है। टाइम डोमेन और एफएफटी में डेटा के कई ग्राफ नीचे दिए गए हैं। एक्सेलेरोमीटर जीफ़ोर्स में माप रहा है

मूल रूप से मैं चाहता हूं कि मेरे आर्दीनो को पता चले कि एक गड्ढा काफी सटीकता के साथ आया है और स्नातक स्तर की गणित और तकनीकों का उपयोग नहीं कर रहा है।

एक्सेलेरोमीटर का नमूना 100 हर्ट्ज पर ज़ेड एक्सिस पर एक सरल 50 हर्ट्ज आरसी कम पास् ट फिल्टर है

Here is the CSV data for the 32 seconds of accelerometer readings TIME, GFORCE format:

http://hamiltoncomputer.us/50HZLPFDATA.CSV

अद्यतन: यह आरडब्ल्यूडब्ल्यू का पूर्ण बैंडविड्थ है, जो उच्चतम नमूना दर पर नमूनाबद्ध किया गया है, जो कि Arduino पर मिल सकता है। डायरेक्ट CSV फ़ाइल डाउनलोड: लगभग 112 सेकंड डेटा

http://hamiltoncomputer.us/RAWUNFILTEREDFULLBANDWIDTH500HZ.csv

ब्लैक ट्रेस RAW अनफ़िल्टर्ड एक्सेलेरोमीटर डेटा है: ब्लू ट्रेस एक बैंडस्टॉप फ़िल्टर द्वारा एफएफटी, डोमिनेट 2 एचज़ेड और 12 एचजेड में पाए जाने वाले चरम आवृत्तियों के आधार पर फ़िल्टर किया जाता है।

http://img213.imageshack.us/img213/194/rollout.png

गड्ढे की घटना समय डोमेन में इस तरह दिखती है: यहाँ छवि विवरण दर्ज करें

निश्चित नहीं है कि एफएफटी में 10 से 15 हर्ट्ज घटक क्या है, क्या यह वास्तविक गड्ढा है, या क्या यह सड़क के खिलाफ पहियों का पहिया हॉप है, या क्या यह कार की गुंजायमान आवृत्ति है?

FFT:

FFT

ऐसा लगता है कि यह वास्तविक गड्ढे वाली घटना है, यहाँ HPF @ 13HZ है

http://img69.imageshack.us/img69/8663/hpf13potholefft.png

मैं वास्तविक समय में गड्ढों का पता लगाने और उनकी गणना करने में सक्षम होना चाहता हूं

ऐसा लगता है कि जवाबी कार्रवाई के लिए निलंबन को 10 से 13 एचजेड की तुलना में बहुत धीमी गति से आगे बढ़ना चाहिए जिससे मुझे लगता है कि गति-बीमारी होगी

अपडेट करें:

एंग्रीई के सुझावों के अनुसार, मैंने एक्सीलरोमीटर 1000 एचजेड की पूरी बैंडविड्थ का उपयोग किया और अधिकतम नमूना दर जो कि मुझे आर्डिनो पर मिल सकती है।

FFT:

एफएफटी यूनिफाइड डाटा फुल बैंडविद

यहाँ गड्ढे की घटना और उसके आसपास कुछ धक्कों और सड़क के शोर के डेटा का एक नमूना टुकड़ा है:

यूनिफ़ाइड डेटा पॉटोल ईवेंट

डायोड लिफाफा डिटेक्टर सर्किट जोड़ा, उत्पादन एक ही लग रहा है ... त्वरणमापी हमेशा उत्पादन 0 से 3.3Volts नकारात्मक नहीं ... यहाँ छवि विवरण दर्ज करें

अपडेट करें:

कई सड़क परीक्षणों से, मैंने Z अक्ष पर अपनी कार में कभी भी 1.6G से 45 MPH तक अधिक नहीं किया, मैंने छद्म आयामी GFS त्वरण उत्पन्न करने के लिए रैंड () का उपयोग किया।

मेरा विचार यह है कि अगर मैं डेटा की 1 से 3 सेकंड की खिड़कियों को देख सकता हूं, तो मैं Z अक्ष के विस्थापन की गणना कर सकता हूं, लेकिन मैं एक्सेलेरोमीटर के बहाव और एकीकरण में त्रुटियों के बारे में चिंतित था। मुझे यहां 90% सटीक होने की आवश्यकता नहीं है,> 70% अच्छा होगा, लेकिन अगर मैं एक समय में एक से तीन सेकंड में विस्थापन को देख रहा हूं तो क्या वास्तविक समय में ऐसा करना संभव होगा? इस तरह मैं देख सकता हूं कि क्या विस्थापन 1 इंच, 2 इंच, 5 इंच से अधिक है। विस्थापन जितना बड़ा था उतना ही मोटा या गहरा था:

क्या आप यह जांच सकते हैं कि क्या मैं यह सही कर रहा हूं, मैं मूल रूप से अपने डेस्कटॉप पर सेट करता हूं, रैंड () का उपयोग करके -1.6 से 1.6 जी तक यादृच्छिक त्वरण उत्पन्न करता है, 3 सेकंड के डेटा को कैप्चर करता है @ एक सिम्युलेटेड 50HZ नमूनाकरण दर

अगर आप * nix चलाते हैं, तो मैं 20mS देरी करने के लिए Windows.h से Sleep () का उपयोग कर रहा हूँ, 50HZ नमूना दर

मैं सिर्फ यह देखना चाहता था कि क्या कोड आपके लिए ठीक है, मैंने अभी तक विशेष बफर नहीं किया है, मैं इसे लागू करने के तरीके पर उलझन में हूं: टिप्पणी की गई कोड, उस वर्ग से है जिसके लिए मैं काम कर रहा हूं , लेकिन मैं इसे अभी तक 100% नहीं समझता। एक परिपत्र बफ़र डेटा की खिड़कियों को सही तरीके से स्थानांतरित करने की अनुमति देगा?

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <ctime> // USED BY RAND
#include <windows.h> // Used for delay


using namespace std;



#define SAMPLE_RATE   0.020 // Sample rate in Milliseconds
#define GRAVITYFT_SEC 32 // Gravity velocity 32 feet/sec
#define INCH_FOOT     12 // 12 inches in foot, from velocity to inch displacement calculation










int main(int argc, char *argv[])
{
    srand((unsigned)time(0)); // SEED RAND() for simulation of Geforce Readings

    // SIMULATING ACCELERATION READINGS INTO A CIRCULAR BUFFER

   // circular_buffer Acceleration; // Create a new Circular buffer for Acceleration

   // cb_init(&Acceleration, 150, 4); // Sampling @ 50HZ, 3 seconds of data = 150, size is float data of 4 bytes

    //Simulate a sample run of Acceleration data using Rand()

    // WE WILL BE SIMULATING "RANDOM" GEFORCE RATINGS using the rand() function constraining to -1.6 to 1.6 GFORCE 
    // These ratings are consistent with our road tests of apparently random vibration and Geforce readings not exceeding about 1.6 G's

    float Gforce[150]; // Random Geforce for 3 second window of data
    float velocity[150]; // Hold velocity information
    float displacement[150]; // Hold Displacement information


    float LO = -1.6; // Low GForce limit recorded from 6 road tests at different speeds
    float HI = 1.6; // High GForce limit recorded from 6 road tests at different speeds

    for(int i = 0; i < 150; i++) // 3 Second iwndow of random acceleration data
    {  
            Gforce[i] = LO + (float)rand()/((float)RAND_MAX/(HI-LO)); // Borrowed from Stackexchange : http://stackoverflow.com/questions/686353/c-random-float
            if( i == 0) // Initial values @ first Acceleration
            {
                velocity[i] = Gforce[i] * SAMPLE_RATE * GRAVITYFT_SEC; // Initial velocity
                displacement[i] = velocity[i] * SAMPLE_RATE * INCH_FOOT; // Initial Displacement
            }
            else
            {
                velocity[i] = velocity[i-1] + (Gforce[i] * SAMPLE_RATE * GRAVITYFT_SEC); // Calculate running velocity into buffer
                displacement[i] = displacement[i-1] +(velocity[i] * SAMPLE_RATE * INCH_FOOT); // Calculate running displacement into buffer
            }
            //cout << endl << Gforce[i]; // Debugging
            //cb_push_back(&Acceleration, &Gforce[i]);                   // Push the GeForce into the circular buffer


            Sleep(SAMPLE_RATE*1000); // 20mS delay simulates 50HZ sampling rate Sleep() expects number in mS already so * 1000

    }
    // PRINT RESULTS
    for (int j = 0; j < 150; j++)
            {
                cout << setprecision (3) << Gforce[j] << "\t\t" << velocity[j] << "\t\t" << displacement[j] << endl;
            }

    // READ THE BUFFER





    //cb_free(&Acceleration); // Pervent Memory leaks

    system("PAUSE");
    return EXIT_SUCCESS;
}

नमूना रन:

    GFORCE          FT/SEC          Inch Displacement Z axis

-0.882          -0.565          -0.136
0.199           -0.437          -0.24
-1.32           -1.29           -0.549
0.928           -0.691          -0.715
0.6             -0.307          -0.788
1.47            0.635           -0.636
0.849           1.18            -0.353
-0.247          1.02            -0.108
1.29            1.85            0.335
0.298           2.04            0.824
-1.04           1.37            1.15
1.1             2.08            1.65
1.52            3.05            2.38
0.078           3.1             3.12
-0.0125         3.09            3.87
1.24            3.88            4.8
0.845           4.42            5.86
0.25            4.58            6.96
0.0463          4.61            8.06
1.37            5.49            9.38
-0.15           5.39            10.7
0.947           6               12.1
1.18            6.75            13.7
-0.791          6.25            15.2
-1.43           5.33            16.5
-1.58           4.32            17.5
1.52            5.29            18.8
-0.208          5.16            20.1
1.36            6.03            21.5
-0.294          5.84            22.9
1.22            6.62            24.5
1.14            7.35            26.3
1.01            8               28.2
0.284           8.18            30.1
1.18            8.93            32.3
-1.43           8.02            34.2
-0.167          7.91            36.1
1.14            8.64            38.2
-1.4            7.74            40
-1.49           6.79            41.7
-0.926          6.2             43.2
-0.575          5.83            44.6
0.978           6.46            46.1
-0.909          5.87            47.5
1.46            6.81            49.2
0.353           7.04            50.8
-1.12           6.32            52.4
-1.12           5.6             53.7
-0.141          5.51            55
0.463           5.8             56.4
-1.1            5.1             57.6
0.591           5.48            59
0.0912          5.54            60.3
-0.47           5.23            61.5
-0.437          4.96            62.7
0.734           5.42            64
-0.343          5.21            65.3
0.836           5.74            66.7
-1.11           5.03            67.9
-0.771          4.54            69
-0.783          4.04            69.9
-0.501          3.72            70.8
-0.569          3.35            71.6
0.765           3.84            72.5
0.568           4.21            73.5
-1.45           3.28            74.3
0.391           3.53            75.2
0.339           3.75            76.1
0.797           4.26            77.1
1.3             5.09            78.3
0.237           5.24            79.6
1.52            6.21            81.1
0.314           6.41            82.6
0.369           6.65            84.2
-0.598          6.26            85.7
-0.905          5.68            87.1
-0.732          5.22            88.3
-1.47           4.27            89.4
0.828           4.8             90.5
0.261           4.97            91.7
0.0473          5               92.9
1.53            5.98            94.3
1.24            6.77            96
-0.0228         6.76            97.6
-0.0453         6.73            99.2
-1.07           6.04            101
-0.345          5.82            102
0.652           6.24            104
1.37            7.12            105
1.15            7.85            107
0.0238          7.87            109
1.43            8.79            111
1.08            9.48            113
1.53            10.5            116
-0.709          10              118
-0.811          9.48            121
-1.06           8.8             123
-1.22           8.02            125
-1.4            7.13            126
0.129           7.21            128
0.199           7.34            130
-0.182          7.22            132
0.135           7.31            133
0.885           7.87            135
0.678           8.31            137
0.922           8.9             139
-1.54           7.91            141
-1.16           7.16            143
-0.632          6.76            145
1.3             7.59            146
-0.67           7.16            148
0.124           7.24            150
-1.19           6.48            151
-0.728          6.01            153
1.22            6.79            154
-1.33           5.94            156
-0.402          5.69            157
-0.532          5.35            159
1.27            6.16            160
0.323           6.37            162
0.428           6.64            163
0.414           6.91            165
-0.614          6.51            166
1.37            7.39            168
0.449           7.68            170
0.55            8.03            172
1.33            8.88            174
-1.2            8.11            176
-0.641          7.7             178
-1.59           6.69            179
1.02            7.34            181
-0.86           6.79            183
-1.55           5.79            184
-0.515          5.46            186
0.352           5.69            187
0.824           6.22            188
1.14            6.94            190
-1.03           6.29            192
-1.13           5.56            193
0.139           5.65            194
0.293           5.84            196
1.08            6.53            197
-1.23           5.75            199
-1.1            5.04            200
-1.17           4.29            201
-0.8            3.78            202
-0.905          3.2             203
-0.0769         3.15            203
-0.323          2.95            204
-0.0186         2.93            205
Press any key to continue . . .

3
अच्छी तरह से विस्तृत लेखन। हालाँकि: इसे एक विशिष्ट, अपेक्षाकृत संकीर्ण प्रश्न के रूप में संपादित करने से केंद्रित उत्तर प्राप्त करने में मदद मिलेगी।
अनिंदो घोष

एक सामान्य विशिष्ट प्रश्न लिखा, मुझे यह पता लगाने का एक तरीका चाहिए कि एक गड्ढा एक कच्चे शोरगुल एक्सेलेरोमीटर सिग्नल से हुआ है। उपयोगी सुविधाओं या पता लगाने की विधि को निकालने से
आर्डिनो की

चूंकि आपके गड्ढे की घटना गड्ढे के बावजूद होने वाले कंपन की तुलना में धीमी है, इसलिए आपको संभवतः इसके बजाय एलपीएफ करना चाहिए और गड्ढे के पास हो रही अच्छी टक्कर को बढ़ाएं। एक चलती औसत फ़िल्टर इसे करने में सक्षम हो सकती है। जीवन को आसान बनाने के लिए, आप एलपीएफ के बजाय माप के एब्स मूल्य का उपयोग करने पर भी विचार कर सकते हैं, क्योंकि आपके गड्ढे को कार के कंपन आवृत्ति द्वारा संशोधित बढ़ाया लिफाफे के साथ एक पैकेट द्वारा भी विशेषता है।
चिंतलगिरि शशांक

अद्यतन जानकारी, धन्यवाद और मैं चलती औसत पर काम करूंगा, निलंबन प्रतिध्वनि 12.5HZ के आसपास लगती है ??? हार्डवेयर में एलपीएफ के पास एक कटऑफ होता है जो मैं मान
लेता हूं

एक अच्छा उदाहरण सीएसवी फ़ाइल या कुछ और की आपूर्ति करें। जहाँ आप कहते हैं कि ऊपर उपलब्ध डेटा लिंक के रूप में काम नहीं करता है।
ओलिन लेट्रोप

जवाबों:


13

ऐसा लगता है कि यह काफी सीधे आगे फ़िल्टरिंग द्वारा हल किया जा सकता है। यहाँ आपका मूल डेटा है:

यह देखने के लिए बहुत अधिक है कि यहां विस्तृत विवरण के स्तर पर एक व्यक्तिगत घटना में क्या होता है। यहाँ सिर्फ 26 से 28 तक डेटा है:

मैंने मूल रूप से इसे कम फ़िल्टर करने के लिए सोचा था, लेकिन यह काम नहीं करता है क्योंकि वहाँ कम आवृत्ति संकेत नहीं है। उच्च आवृत्ति संकेत का आयाम इसके बजाय ऊपर जाता है। यहाँ मूल पर एक कम पास दिया गया है:

ध्यान दें कि यह "औसत" संकेत का अच्छी तरह से गड्ढे घटना के दौरान नहीं है। यदि हम इस औसत को मूल संकेत से घटाते हैं, तो हम अन्यथा की तुलना में इस औसत से बहुत अधिक भ्रमण के साथ बचे रहते हैं। एक और तरीका रखो, जो हम वास्तव में चाहते हैं वह एक उच्च पास फिल्टर है। हम मूल से कम पास को घटाकर ऐसा करेंगे, क्योंकि हम यहां आए हैं, लेकिन उत्पादन प्रणाली में आप स्पष्ट रूप से उच्च पास फ़िल्टरिंग द्वारा ऐसा करेंगे। वैसे भी, यहाँ उच्च पास फ़िल्टर्ड मूल है:

यह अब घटना का पता लगाने के लिए एक स्पष्ट दृष्टिकोण बताता है। अन्यथा की तुलना में घटना के दौरान बहुत अधिक संकेत आयाम है। हम RMS की गणना करके और कुछ कम पास फ़िल्टरिंग को लागू करके इसका पता लगा सकते हैं:

पूरे डेटा पर वापस ज़ूम करके, हम देखते हैं:

यह डेटा में स्पष्ट रूप से पाँच घटनाओं की पहचान करता है, हालांकि मुझे नहीं पता कि क्या यह डेटा दिखाने वाला है। घटनाओं को अधिक बारीकी से देखते हुए, आप देखते हैं कि उनमें से प्रत्येक के पास चोटियों से पहले और बाद में लगभग 1 सेकंड कम है। इसका मतलब यह है कि अगर आरएमएस सिग्नल को थ्रेसहोल्ड किया जाए तो यह अधिक हो सकता है क्योंकि यह अब पर्याप्त नहीं है। उदाहरण के लिए, एक साधारण एल्गोरिथ्म जो 1 सेकंड के भीतर किसी बिंदु के सापेक्ष एक बिंदु की ऊंचाई की तलाश में था, उसे पृष्ठभूमि शोर को और कम करना चाहिए। उसी चीज़ के बारे में कहने का एक और तरीका यह है कि 1 सेकंड की अवधि में वृद्धि की तलाश में इस संकेत को अलग किया जाए। एक गड्ढे वाली घटना को तब एक संदेह द्वारा पता लगाया जाएगा, जिसका अर्थ है कि एक उच्च चोटी एक कम चोटी द्वारा follwed।

इसे देखने का एक अन्य तरीका आरएमएस सिग्नल को पास करना है। यह पहले से ही कम पास फ़िल्टर्ड है, लेकिन जब से आप मजबूत ढलान के साथ अचानक घटनाओं की तलाश कर रहे हैं, तो कुछ कम आवृत्तियों को बंद करने से पृष्ठभूमि के शोर को भी कम करना चाहिए।

यहाँ से सिग्नल को परिष्कृत करने के बहुत सारे तरीके हैं, लेकिन उम्मीद है कि मैंने दिखाया है कि कम से कम पहली बार उपयोगी परिणाम कैसे प्राप्त करें।

जोड़ा गया:

मैं उत्सुक था कि चोटी के दोनों ओर डिप्स की तलाश कितनी अच्छी होगी। मैंने पिछले प्लॉट से RMS से शुरू होने वाले एक नॉन-लीनियर फिल्टर का इस्तेमाल किया। प्रत्येक बिंदु का मूल्य न्यूनतम है जो पिछले दूसरे में सबसे कम बिंदु से ऊपर है और अगले सेकंड में सबसे कम बिंदु है। परिणाम काफी अच्छा लग रहा है:

5 चोटियों में से सबसे ऊंची पृष्ठभूमि के शोर की तुलना में 3 गुना अधिक है। यह निश्चित रूप से इन 5 धक्कों का प्रतिनिधित्व करने वाली घटनाओं का प्रतिनिधित्व करता है और बाकी नहीं करता है।

टिप्पणियों के जवाब में जोड़ा गया:

मैंने समय डोमेन में फ़िल्टर किया था, इसलिए मुझे सीधे आवृत्ति प्रतिक्रिया नहीं पता है। कम पास फिल्टर के लिए मैंने COS ^ 2 फिल्टर कर्नेल के साथ इनपुट सिग्नल को हल किया। अगर मुझे सही याद है, तो कर्नेल की त्रिज्या (केंद्र से किनारे तक) कुछ 100 मि। मैंने मूल्य के साथ प्रयोग किया जब तक कि प्लॉट अच्छा नहीं लगा। आरएमएस को कम पास फिल्टर करने के लिए, मैंने उसी फिल्टर कर्नेल का उपयोग किया लेकिन इस बार लगभग एक सेकंड के दायरे के साथ। मुझे ठीक से याद नहीं है। अच्छे परिणाम मिलने तक प्रयोग करें।

नॉन-लीनियर फिल्टर ने दोहरे का पता नहीं लगाया। जैसा कि मैंने कहा, मुझे पहले 1 सेकंड के भीतर सभी बिंदुओं और सबसे कम अंक के बीच का अंतर मिला, और वर्तमान बिंदु के बीच का अंतर और 1 सेकंड के बाद सभी बिंदुओं के बीच का अंतर भी। फिर मैंने उन दोनों का मीनू लिया।

मेरे द्वारा उपयोग किया जाने वाला सॉफ्टवेयर इस उद्देश्य के लिए हैक किया गया एक कार्यक्रम था। मेरे पास पहले से ही CSV फ़ाइलों को पढ़ने और लिखने के लिए विभिन्न रूटीन थे, इसलिए मुझे जो भी लिखना था वह फ़िल्टरिंग कोड था, जो बहुत सरल है। बाकी सीएसवी फाइलों में हेरफेर और साजिश रचने के लिए पहले से मौजूद कार्यक्रमों के साथ किया गया था।


वाह यह बहुत ही रोमांचक परिणाम है, आपके पास व्यावहारिक रूप से चीजों को समझाने का एक शानदार तरीका है और मैं घर पहुंचने और इस पर काम करना शुरू करने के लिए उत्साहित हूं! मैं उत्सुक हूं कि आपने एचपीएफ में किस कटऑफ आवृत्ति का उपयोग किया है, और आरएमएस सिग्नल के लिए एलपीएफ कटऑफ जो एकदम सही दिखता है। इसके अलावा, आपने जो नॉन-लीनियर फिल्टर का इस्तेमाल किया, उसका पता लगाने के लिए आपने मैटलैब या डिज़ाइन एप्लीकेशन में क्या किया? मैं हार्डवेयर में भी इसे डिजाइन करने की कोशिश करना चाहता हूं, जिन 5 चोटियों पर आपको 5 गड्ढों के साथ संयोग हो रहा है, मैं मारा, महान परिणाम! मेरे पास matlab है और SciDavis का उपयोग भी किया गया है
zacharoni16

@ ज़ैच: मैं आपके कुछ सवालों के जवाब के लिए अपने उत्तर को अपडेट करने की कोशिश करूँगा। दुर्भाग्य से मेरा जवाब सामुदायिक विकि में परिवर्तित हो गया, इसलिए मैं उस पहले को ठीक करने के लिए एक मॉड की प्रतीक्षा कर रहा हूं। यह सीडब्ल्यू चीज वास्तव में बेकार है जब आप किसी चीज पर समय बिताते हैं, तो अचानक आप इसे खुद नहीं करते हैं।
ओलिन लेथ्रोप

@OlinLathrop आपके द्वारा इसे संपादित करने पर आपके पास इसे वापस बदल दिया जाएगा। संपादन समाप्त करने के बाद आपको इसे वापस करने के लिए मुझे ध्वजांकित करना चाहिए। मैं इसे अब करूँगा, लेकिन अगर आपको फिर से झंडा लगाना है तो आश्चर्यचकित न हों। सीडब्ल्यू के बारे में शिकायत करने के नोट पर, हमें हर 4-6 महीनों में एक बार सीडब्ल्यू वापस करना पड़ता है, मुझे लगता है कि आप स्थिति के बारे में बात कर रहे हैं, जहां कई एडिट हैं और उपयोगकर्ता सीडब्ल्यू नहीं बनना चाहता है, और टोनी या किसी अन्य स्थिति से निपटने की तुलना में, यह आसान और साफ कटौती से निपटने के लिए आदर्श ध्वज के बारे में है। :)
Kortuk

1
@Andrew: जैसा कि मैंने अपने उत्तर के अंतिम पैराग्राफ में कहा था, मेरे पास विभिन्न डिब्बाबंद कार्यक्रम हैं जो CSV फ़ाइलों और लाइब्रेरी रूटीन में हेरफेर करते हैं जो उन्हें पढ़ना और लिखना आसान बनाते हैं। ऊपर फ़िल्टरिंग कोड जोड़ना त्वरित और आसान है। अधिकांश फ़िल्टर कई बार निष्पादित कोड की कुछ पंक्तियाँ हैं। एक बंद परीक्षण के लिए, जैसे मैंने ऊपर क्या किया, प्रोसेसर को कुशलता से उपयोग करने की कोई आवश्यकता नहीं है क्योंकि सब कुछ तुरंत खत्म हो गया है। उदाहरण के लिए, मैंने टेबल बनाने के बजाय जब भी जरूरत हो तो COS फ़ंक्शन को कॉल किया।
ओलिन लेथ्रोप

1
@OlinLathrop मैंने देखा कि आपने उत्तर में क्या उल्लेख किया है, लेकिन मुझे नहीं पता था कि क्या आपके पास कुछ कस्टम स्क्रिप्ट सेट हैं, हो सकता है कि मैटलैब या इसे चलाने के लिए कुछ हो या आपने क्या किया था। क्या आप यह साझा कर सकते हैं कि आप यह कैसे कर रहे हैं? यह आकर्षक लगता है। क्या आप उत्पादन में देखने के लिए डिब्बाबंद ग्राफिक्स पुस्तकालयों का उपयोग कर रहे हैं, सिर्फ एक्सेल में डंपिंग और प्लॉटिंग कर रहे हैं या gnuplot / octave या ... का उपयोग कर रहे हैं?
akohlsmith

2

गड्ढों का पता लगाने वाला एज परेशानी का कारण हो सकता है। कार कंपन लिफाफा वह जगह है जहां उत्तर निहित है, क्योंकि सेंसर द्वारा देखे गए वास्तविक कंपन बहुत अधिक आवृत्तियों पर हैं। मैं आरएमएस के साथ डीसी में जाना चाहता हूं जो लगभग 15 हर्ट्ज या उच्चतर और कम पास की चीज पर प्रतिक्रिया करता है।


बस 1000HZ के पूर्ण सेंसर बैंडविड्थ के साथ एक और परीक्षण किया और जितनी तेजी से मैं Arduino के साथ धारावाहिक कर सकता था उतना ही नमूना। समान परिणाम प्राप्त करना। 17HZ के आसपास की कोई भी आवृत्ति 2HZ और 13HZ की हावी आवृत्ति की तुलना में जल्दी से मर जाती है, मुझे अभी भी वह जगह नहीं मिली है जहां 9 से 13.5HZ सामान आ रहा है। एक्सेलेरोमीटर डैशबोर्ड पर लगाया गया है, निलंबन स्पष्ट रूप से 9 से 13HZ पर नहीं चल रहा है या मैं पागल की तरह उछल रहा हूं। मुझे यकीन नहीं है कि आप RMS से DC के बारे में क्या मतलब रखते हैं?
zacharoni16

आपका एक्सेलेरोमीटर किसी तरह से कार से जुड़ा हुआ है। यहां तक ​​कि अगर आपने किसी तरह से अपने अंडरकार्ग पर बात की है, तो बोल्ट आवृत्तियों को दबा सकते हैं और बढ़ा सकते हैं। कई अलग-अलग आवृत्तियों पर कंपन करने के लिए एक कार एक पर्याप्त जटिल जानवर है। सर्किट (और शायद गणितीय एल्गोरिदम) हैं जो एक एसी सिग्नल को अपने डीसी आरएमएस मूल्य में परिवर्तित करते हैं। एक खोज एक मिलनी चाहिए। उच्च आवृत्ति कंपन को उनके आयाम में बदलकर आप अपने सिग्नल के लिफाफे को उत्पन्न करने में मदद कर सकते हैं।
चिंतलगिरी शशांक

क्या एक आधा लहर शुद्ध (डायोड) के बारे में? लेकिन यह सब कुछ सकारात्मक चोटियों में बदल जाएगा, गड्ढे की घटना पुल-जी या यह एक समस्या नहीं होगी?
zacharoni16

मुझे उम्मीद नहीं है कि यह एक समस्या होगी। आपके कंपन आयामों का प्रभाव काफी अधिक प्रतीत होता है। हालांकि, आपके संकेतों को देखते हुए, मैं छोटे गड्ढों को याद करने से बचने के लिए पूर्ण तरंग सुधार का सुझाव दूंगा।
चिंतलगिरी शशांक

Shashack ऊपर पोस्ट किए गए evelope सर्किट को जोड़ा गया, आउटपुट बिल्कुल भी नहीं बदला। मैंने आरसी समय को 2mS के आस-पास होने के लिए स्थिर किया, मैं 2mS 500 नमूने पर नमूना ले रहा हूं / दूसरा एक्सीलरोमीटर वोल्टेज हमेशा 0 और 3.3V के बीच होता है ... हालांकि नकारात्मक कभी नहीं जाता है इसलिए डायोड काम नहीं करेगा?
zacharoni16

2

फ़्रीक्वेंसी डोमेन फ़िल्टर या थ्रेशोल्ड की तलाश करने के बजाय, मैं "विशिष्ट" गड्ढे के लिए कर्नेल के साथ आने की कोशिश कर रहा हूं, और इसके साथ एक सहसंबंध बना रहा हूं। इसे एक टेम्प्लेट-मिलान तकनीक माना जाएगा, और यह एक माइक्रोकंट्रोलर प्लेटफ़ॉर्म पर खुद को उधार देता प्रतीत होगा।

एक त्वरित समीक्षा के लिए http://scribblethink.org/Work/nvisionInterface/vi95_lewis.pdf देखें , और शायद DOBBS, STEVEN E., NEIL M. SCHMITT, और HALUK - OZEMEK। "माइक्रो कंप्यूटर पर वास्तविक समय सहसंबंध का उपयोग करके टेम्पलेट मिलान द्वारा क्यूआरएस का पता लगाना।" जर्नल ऑफ़ क्लिनिकल इंजीनियरिंग 9.3 (1984): 197-212।

यदि आप बीफ़ियर प्लेटफ़ॉर्म पर थे, तो मैं तरंगों को एक स्पिन देने की सलाह दूंगा।


धन्यवाद :), यह करने के लिए बहुत मुश्किल लगता है, या मैं कुछ याद कर रहा हूँ?
zacharoni16

एक साधारण फिल्टर की तुलना में अधिक कठिन, लेकिन अधिक संभावना है कि यह वह कर देगा जो आप चाहते हैं कि जब आप कर रहे हों! हर तरह से, इसे तब तक एक माइक्रोकंट्रोलर पर लागू करने की कोशिश न करें जब तक कि आप इसे Matlab या R
स्कॉट सीडमैन

वास्तविक समय में अपने "फ़िल्टर" को चलाने के लिए, आप संभवतः इसे हर समय कदम पर एक आवृत्ति डोमेन गुणन को पूरा करने के लिए एक विरोध के रूप में संभाल लेंगे। क्रॉस-सहसंबंध (टेम्पलेट मिलान के लिए एक मुख्य दृष्टिकोण) एक ही सटीक संचालन होगा, आवेग प्रतिक्रिया के समय के पैमाने को छोड़कर उल्टा नहीं होगा क्योंकि यह एक कनवल्शन में होगा, और हम इस आवेग प्रतिक्रिया को "टेम्पलेट" कहेंगे । अब, आपको बस यह पता लगाने की आवश्यकता है कि उस टेम्पलेट को क्या होना चाहिए।
स्कॉट सेडमैन

इस उत्तर के लिए धन्यवाद, मुझे इसे लागू करने के लिए बहुत अधिक शोध और अध्ययन करना होगा क्योंकि यह मेरे वर्तमान कौशल-स्तर से ऊपर लगता है। मैं हालांकि प्रयास की सराहना करता हूं
zacharoni16

2

एक और दृष्टिकोण यह देखने के लिए आपके सिग्नल के एक गतिशील संस्करण की गणना करेगा कि क्या गड्ढे वास्तव में बाहर निकलते हैं। गणना के लिए एक निश्चय का उपयोग करते हुए, एक गतिशील विचरण फिल्टर के लिए यहाँ एक matlab फंक्शन है, N पॉइंट्स चौड़े - चतुराई से (अगर मुझे ऐसा खुद कहना चाहिए)

function y=movingvar(X,N)
% y=movingvar(X,N)
% Calculates N-point moving variance of  Vector X
% Highly recommend that N be odd (no error checking)
% Note: first and last N/2 points will be unreliable.
% Output will be a column vector.


X=X(:);
XSQR=X.*X;
convsig=ones(1,N);
y=(conv(convsig,XSQR)-(conv(convsig,X).^2)/N)/(N-1);

y=y(ceil(N/2):length(X)+floor(N/2));

क्या यह एक मानक विचलन गणना के समान होगा?
zacharoni16

हाँ, बस चुकता
स्कॉट Seidman

1

मेरा प्रारंभिक विचार यह है कि कम-पास वाला फ़िल्टर गलत प्रकार का फ़िल्टर हो सकता है। गड्ढे अनिवार्य रूप से एक उच्च आवृत्ति घटना है - एक कदम समारोह या वर्ग तरंग की तरह। बस 50Hz फ़िल्टर किए गए डेटा को देखने से मुझे लगता है कि आप गड्ढे के बारे में जानकारी खो रहे हैं - यह सब गड्ढे की घटना के लिए कोई महत्वपूर्ण अंतर नहीं के साथ एक ही स्क्विगल्स जैसा दिखता है। मैं पहले एक उच्च-पास फिल्टर का उपयोग करता हूं, फिर बहुत अधिक आवृत्ति के साथ एक कम-पास फिल्टर। यदि आपका एक्सेलेरोमीटर पहले से कम-पास फ़िल्टर्ड है, तो आप लो-पास फ़िल्टर से पूरी तरह बच सकते हैं।

एक बार जब आपके पास उच्च-फ़िल्टर किए गए डेटा होते हैं, तो मुझे लगता है कि थ्रेसहोल्ड सेट के साथ एक सरल तुलनित्र, गड्ढों के कारण त्वरण डेटा में चोटियों को उठाएगा और आपको उन्हें गिनने की अनुमति देगा।


मैं आरसी 50 एचजेड फिल्टर को हटा दूंगा फिर एक्सेलेरोमीटर डिफ़ॉल्ट 500 एचजेड या 1000 एचजेड एलपीएफ का उपयोग करेगा जो यांत्रिक कंपन प्राप्त करने के लिए पर्याप्त होना चाहिए। मैं नमूना दर को 100HZ से बढ़ाकर 1000HZ और अधिक डेटा पोस्ट करूंगा। अंतर्दृष्टि के लिए धन्यवाद
zacharoni16

मैंने एक्सीलरोमीटर और तेज़ सैंपलिंग की पूरी बैंडविड्थ का इस्तेमाल किया, ऐसा ही डेटा मिल रहा है :( यह भ्रमित करने वाला है कि गड्ढे और टक्कर की घटनाओं को कैसे फ़िल्टर किया जाए और अलग किया जाए
zacharoni16

मैंने कहा कि एक उच्च पास फिल्टर का उपयोग करें, कम नहीं। मुझे अनफ़िल्टर्ड डेटा का FFT देखने में दिलचस्पी होगी।
एंग्रीईई

खैर एक्सीलरोमीटर का निर्माण 1000 हर्ट्ज एलपीएफ में किया गया है और मैं इसे बदल नहीं सकता। मैं इसे जल्द ही अनफ़िल्टर्ड डेटा का FFT पोस्ट
करूंगा

आपको इसे बदलने की आवश्यकता नहीं है - आप उच्च आवृत्तियों को चाहते हैं जो अचानक तेजी से आते हैं जब आप एक गड्ढे को मारते हैं लेकिन सामान्य सवारी के कोमल झूलते नहीं। आपका संकेत कई प्रमुख क्षणिक स्पाइक के साथ कम आवृत्ति कंपन द्वारा विशेषता है। आप उच्च-आवृत्तियों को त्वरित क्षणिक स्पाइक्स को कैप्चर करना चाहते हैं, लेकिन आप निरंतर कम आवृत्तियों को अस्वीकार करना चाहते हैं। इस प्रकार, आपको संभवतः 50Hz या 100Hz सब कुछ फ़िल्टर करना चाहिए।
गुस्से में
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.