การวิเคราะห์ข้อมูลมาตรวัดความเร่งและออกแบบตัวกรอง


14

ฉันมีข้อมูล accelerometer ประมาณ 32 วินาทีของสถานการณ์การขับขี่ขั้นพื้นฐานถนนปกติ 25MPH พร้อมด้วยการกดปุ่มหลุมบ่อประมาณ 7 หลุมและถนนขรุขระ มาตรวัดความเร่งติดตั้งอยู่บนแผงหน้าปัดรถยนต์ของฉันด้วยเทปสองด้าน

ปัญหา: ฉันมีข้อมูลทั้งหมดที่มีเสียงดังจาก accelerometer และฉันต้องการวิธีง่ายๆในการตรวจสอบว่ามีเหตุการณ์หลุมบ่อเกิดขึ้น ด้านล่างนี้คือกราฟหลายข้อมูลในโดเมนเวลาและ FFT มาตรวัดความเร่งคือการวัดใน GForce

โดยพื้นฐานแล้วฉันต้องการให้อาร์ดิโนของฉันรู้ว่าหลุมบ่อเกิดขึ้นด้วยความแม่นยำที่ยอดเยี่ยมและไม่ได้ใช้คณิตศาสตร์และเทคนิคระดับบัณฑิตศึกษา

มาตรความเร่งตัวอย่างที่ 100hz มี 50HZ RC LASS PASS FILTER บนแกน Z อย่างง่าย

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

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

UPDATE: นี่คือแบนด์วิดท์เต็มรูปแบบ RAW ของ accelerometer 1000HZ ที่อัตราการสุ่มตัวอย่างสูงสุดที่ฉันสามารถทำได้บน Arduino ดาวน์โหลดไฟล์ CSV โดยตรง: ประมาณ 112 วินาทีของข้อมูล

http://hamiltoncomputer.us/RAWUNFILTEREDFULLBANDWIDTH500HZ.csv

ร่องรอยสีดำคือ RAW Accelerometer ที่ไม่มีการกรองข้อมูล: ร่องรอยสีน้ำเงินถูกกรองโดยตัวกรองแบบแถบความถี่ตามความถี่สูงสุดที่พบใน FFT, ครอง 2HZ และ 12HZ

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

เหตุการณ์หลุมบ่อดูเหมือนว่านี้ในโดเมนเวลา: ป้อนคำอธิบายรูปภาพที่นี่

ไม่แน่ใจว่าองค์ประกอบ 10 ถึง 15 เฮิร์ตใน FFT คือหลุมบ่อจริงหรือว่ามันคือการกระโดดล้อของล้อกับถนนหรือมันเป็นความถี่เรโซแนนท์ของรถหรือไม่

FFT:

FFT

ดูเหมือนว่าจะเป็นเหตุการณ์หลุมบ่อจริงนี่คือ HPF @ 13HZ คุณสมบัติที่โดดเด่นของหลุมบ่อดูเหมือนจะได้รับการปรับปรุง

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

ฉันต้องการที่จะสามารถตรวจจับและนับหลุมบ่อในเวลาจริง

ดูเหมือนว่าจะตอบโต้ได้ง่ายการระงับควรเคลื่อนที่ช้ากว่า 10 ถึง 13 HZ ที่จะทำให้เกิดอาการเมารถฉันเชื่อว่า

UPDATE:

ตามคำแนะนำของ AngryEE ฉันใช้แบนด์วิดธ์เต็มรูปแบบของ accelerometer 1000HZ และอัตราการสุ่มตัวอย่างสูงสุดที่ฉันสามารถทำได้ในอาร์ดิโน

FFT:

FFT ข้อมูลที่ไม่ถูกกรองเต็มแบนด์วิดท์

นี่คือข้อมูลตัวอย่างของเหตุการณ์หลุมบ่อและการกระแทกและเสียงรบกวนรอบข้าง:

เหตุการณ์ในข้อมูลที่ไม่ได้กรอง

เพิ่มวงจรตัวตรวจจับซองจดหมาย Diode ผลลัพธ์จะออกมาเหมือนกัน ... มาตรวัดความเร่ง 0 ถึง 3.3Volts จะไม่ลบ ... ป้อนคำอธิบายรูปภาพที่นี่

UPDATE:

จากการทดสอบบนถนนหลายครั้งฉันไม่เคยเกิน 1.6G ถึง 45 ไมล์ต่อชั่วโมงในรถของฉันบนแกน Z ฉันใช้ rand () เพื่อสร้างการเร่งความเร็วแบบหลอกหลอก Gforce

ความคิดของฉันคือถ้าฉันสามารถดูข้อมูลหน้าต่าง 1 ถึง 3 วินาทีฉันสามารถคำนวณการกระจัดของแกน Z ได้ แต่ฉันกังวลเกี่ยวกับการเลื่อนของ accelerometer และข้อผิดพลาดในการรวม ฉันไม่จำเป็นต้องแม่นยำแม้แต่ 90% ที่นี่> 70% จะดี แต่ถ้าฉันดูการกระจัดที่หนึ่งถึงสามวินาทีในแต่ละครั้งที่เป็นไปได้ที่จะทำในเวลาจริง? ด้วยวิธีนี้ฉันสามารถดูว่าการกระจัดมากกว่า 1 นิ้ว 2 นิ้ว 5 นิ้ว การกระจัดที่ยิ่งใหญ่กว่าที่ชนหรือหลุมคือ:

คุณช่วยตรวจสอบว่าฉันทำถูกไหมฉันตั้งค่าเดสก์ท็อปโดยใช้ rand () เพื่อสร้างการเร่งความเร็วแบบสุ่มจาก -1.6 ถึง 1.6 G's เก็บข้อมูล 3 วินาทีที่อัตราการสุ่มตัวอย่าง 50HZ จำลอง

ถ้าคุณชอบ * nix ฉันกำลังใช้ Sleep () จาก Windows.h เพื่อหน่วงเวลา 20mS อัตราการสุ่มตัวอย่าง 50HZ

ฉันแค่อยากจะดูว่ารหัสนั้นเหมาะสมกับคุณหรือไม่ฉันยังไม่ได้ทำ cicular buffer ฉันยังสับสนเกี่ยวกับวิธีการใช้งาน: โค้ดที่ใส่ความคิดเห็นมาจากคลาสที่ฉันใช้งานอยู่ แต่ฉันยังไม่เข้าใจ 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
รายละเอียดการเขียนอย่างดี อย่างไรก็ตาม: การแก้ไขสิ่งนี้เพื่อระบุคำถามที่เจาะจงและค่อนข้างแคบจะช่วยให้ได้รับคำตอบที่มุ่งเน้น
Anindo Ghosh

เขียนคำถามเฉพาะเจาะจงฉันต้องการวิธีการตรวจสอบว่าหลุมบ่อเกิดขึ้นจากสัญญาณ accelometer ที่มีเสียงดัง การแยกคุณสมบัติที่มีประโยชน์หรือวิธีการตรวจจับที่จะช่วยให้ไมโครคอนโทรลเลอร์เช่น arduino ในการตรวจสอบเหตุการณ์หลุม
บ่อเกิด

เนื่องจากเหตุการณ์หลุมบ่อของคุณช้ากว่าการสั่นสะเทือนที่ไม่คำนึงถึงหลุมบ่อคุณควรใช้ LPF แทนและเพิ่มการชนที่ดีที่คุณเข้าใกล้หลุมบ่อ ตัวกรองเฉลี่ยเคลื่อนที่อาจทำได้ เพื่อให้ชีวิตง่ายขึ้นคุณสามารถลองใช้ค่า abs ของการวัดแทนก่อนที่คุณจะใช้ LPF เนื่องจากหลุมบ่อของคุณดูเหมือนจะโดดเด่นด้วยแพ็กเก็ตเดียวที่มีแอมพลิจูดซองจดหมายที่เพิ่มขึ้น
Chintalagiri Shashank

อัปเดตข้อมูลขอบคุณและฉันจะทำงานโดยเฉลี่ยเคลื่อนที่เรโซแนนซ์ช่วงล่างดูเหมือนจะอยู่ที่ประมาณ 12.5HZ หรือไม่ LPF ในฮาร์ดแวร์จะมีทางลัดอยู่ที่นั่นฉันจะสันนิษฐานว่า
zacharoni16

ระบุไฟล์ CSV หรือตัวอย่างที่ดี ที่คุณพูดว่าข้อมูลที่มีอยู่ข้างต้นดูเหมือนจะไม่ทำงานเป็นลิงค์
Olin Lathrop

คำตอบ:


13

ดูเหมือนว่าจะสามารถแก้ไขได้โดยการกรองไปข้างหน้าอย่างเป็นธรรม นี่คือข้อมูลต้นฉบับของคุณ:

มันมากเกินไปที่จะเห็นสิ่งที่เกิดขึ้นในแต่ละเหตุการณ์ในระดับรายละเอียดที่เหมาะสมสำหรับที่นี่ นี่เป็นเพียงข้อมูลจาก 26 ถึง 28 ที่สอง:

ตอนแรกฉันคิดว่าจะใช้ตัวกรองความถี่ต่ำ แต่ไม่ได้ผลเพราะไม่มีสัญญาณความถี่ต่ำ ความกว้างของสัญญาณความถี่สูงจะเพิ่มขึ้นแทน นี่คือรหัสผ่านต่ำที่ซ้อนทับกับต้นฉบับ:

สังเกตุสิ่งนี้ตาม "ค่าเฉลี่ย" ของสัญญาณค่อนข้างดีในช่วงเหตุการณ์หลุมบ่อ หากเราลบค่าเฉลี่ยนี้จากสัญญาณดั้งเดิมเราจะเหลือการทัศนศึกษาที่สูงขึ้นมากจากค่าเฉลี่ยนี้ในระหว่างกิจกรรมมากกว่าอย่างอื่น อีกวิธีหนึ่งสิ่งที่เราต้องการคือตัวกรองผ่านสูง เราจะทำเช่นนั้นโดยการลบ low pass จากต้นฉบับเนื่องจากเป็นวิธีที่เราได้มาที่นี่ แต่ในระบบการผลิตคุณต้องทำโดยการกรอง high pass อย่างชัดเจน อย่างไรก็ตามนี่คือรหัสผ่านแบบกรองขั้นสูง:

ตอนนี้ชี้ให้เห็นวิธีการที่ชัดเจนในการตรวจสอบเหตุการณ์ มีแอมพลิจูดสัญญาณมากขึ้นในระหว่างเหตุการณ์มากกว่าอย่างอื่น เราสามารถตรวจจับสิ่งนี้ได้โดยการคำนวณ RMS และใช้การกรองสัญญาณความถี่ต่ำ:

เมื่อย้อนกลับไปดูข้อมูลทั้งหมดเราจะเห็นว่า:

สิ่งนี้ระบุอย่างชัดเจนถึงห้าเหตุการณ์ในข้อมูลแม้ว่าฉันจะไม่รู้ว่าเป็นข้อมูลที่ควรแสดง เมื่อดูเหตุการณ์ที่เกิดขึ้นอย่างใกล้ชิดคุณสังเกตเห็นว่าแต่ละเหตุการณ์มีจุดต่ำลงประมาณ 1 วินาทีก่อนและหลังจุดสูงสุด ซึ่งหมายความว่าสามารถทำได้มากกว่านี้เพียงแค่ทำการรีเฟรชสัญญาณ RMS เนื่องจากตอนนี้ยังไม่ดีพอ ตัวอย่างเช่นอัลกอริทึมแบบง่าย ๆ ที่ค้นหาความสูงของจุดที่สัมพันธ์กับค่าต่ำสุดภายใน 1 วินาทีไม่ว่าจะด้วยวิธีใดควรลดเสียงรบกวนของพื้นหลังต่อไป อีกวิธีที่จะพูดเกี่ยวกับสิ่งเดียวกันคือการแยกสัญญาณนี้เพื่อค้นหาการเพิ่มขึ้นของช่วงเวลา 1 วินาที เหตุการณ์หลุมบ่อจะถูกตรวจพบโดย doublet ซึ่งหมายถึงยอดเขาสูงที่เต็มไปด้วยยอดเขาต่ำ

อีกวิธีในการดูที่นี้คือการส่งสัญญาณ RMS มันผ่านการกรองความถี่ต่ำแล้ว แต่เนื่องจากคุณกำลังมองหาเหตุการณ์ฉับพลันที่มีความลาดชันรุนแรงการตัดความถี่ต่ำบางส่วนควรทำงานเพื่อลดเสียงรบกวนจากพื้นหลังด้วย

มีหลายวิธีในการปรับแต่งสัญญาณจากที่นี่ แต่หวังว่าฉันได้แสดงวิธีการอย่างน้อยผลลัพธ์ที่เป็นประโยชน์ในการส่งผ่านครั้งแรก

ที่เพิ่ม:

ฉันอยากรู้ว่าการมองหา dips ทั้งสองด้านของจุดสูงสุดนั้นดีแค่ไหนฉันจึงลองทำ ฉันใช้ตัวกรองที่ไม่ใช่เชิงเส้นเริ่มต้นด้วย RMS จากพล็อตก่อนหน้า ค่าของแต่ละจุดคือค่าต่ำสุดของจำนวนที่สูงกว่าจุดต่ำสุดในวินาทีก่อนหน้าและจุดต่ำสุดในวินาทีถัดไป ผลลัพธ์ที่ได้ค่อนข้างดี:

จุดต่ำสุดของ 5 จุดสูงสุดนั้นสูงกว่าเสียงพื้นหลังสูงสุด 3 เท่า แน่นอนว่าสมมติว่า 5 การกระแทกเหล่านี้แสดงถึงเหตุการณ์ที่คุณต้องการตรวจจับและที่เหลือไม่ได้

เพิ่มในการตอบสนองต่อความคิดเห็น:

ฉันทำตัวกรองในโดเมนเวลาดังนั้นฉันจึงไม่รู้การตอบสนองความถี่โดยตรง สำหรับตัวกรองความถี่ต่ำฉันให้สัญญาณอินพุตกับเคอร์เนลตัวกรอง COS ^ 2 ถ้าฉันจำได้ถูกต้องรัศมี (ระยะจากกึ่งกลางถึงขอบ) ของเคอร์เนลเท่ากับ 100 มิลลิวินาที ฉันทดลองกับค่าจนกระทั่งโครงเรื่องดูดี ในการกรองความถี่ต่ำผ่าน RMS ฉันใช้เคอร์เนลตัวกรองเดียวกัน แต่คราวนี้มีรัศมีประมาณหนึ่งวินาที ฉันจำไม่ได้แน่นอน ทดลองจนกว่าคุณจะได้รับผลลัพธ์ที่ดี

ตัวกรองที่ไม่ใช่เชิงเส้นตรวจไม่พบ doublets อย่างที่ฉันพูดฉันพบความแตกต่างระหว่างจุดปัจจุบันและจุดต่ำสุดของจุดทั้งหมดภายใน 1 วินาทีก่อนหน้าและความแตกต่างระหว่างจุดปัจจุบันและจุดต่ำสุดของจุดทั้งหมดภายใน 1 วินาทีหลังจากนั้น จากนั้นฉันก็ใช้เวลาสองนาที

ซอฟต์แวร์ที่ฉันใช้คือโปรแกรมที่แฮ็กข้อมูลเพื่อจุดประสงค์นี้ ฉันมีกิจวัตรการอ่านและเขียนไฟล์ CSV อยู่แล้วดังนั้นสิ่งที่ฉันต้องเขียนก็คือรหัสตัวกรองซึ่งง่ายมาก ส่วนที่เหลือทำกับโปรแกรมที่มีอยู่แล้วที่ฉันมีสำหรับจัดการและแปลงไฟล์ CSV


ว้าวนี่เป็นผลลัพธ์ที่น่าตื่นเต้นมากคุณมีวิธีที่ยอดเยี่ยมในการอธิบายสิ่งต่าง ๆ ในแง่ปฏิบัติและฉันตื่นเต้นที่จะได้กลับบ้านและเริ่มทำงานกับสิ่งนี้! ฉันอยากรู้ว่าคุณใช้ความถี่ cutoff อะไรใน HPF และ LPF cutoff สำหรับสัญญาณ RMS นั้นดูสมบูรณ์แบบ นอกจากนี้ตัวกรองที่ไม่ใช่เชิงเส้นที่คุณใช้ในการตรวจจับ doublets คุณทำเช่นนั้นใน matlab หรือแอปพลิเคชันการออกแบบหรือไม่? ฉันต้องการลองออกแบบฮาร์ดแวร์ด้วยตัวเองยอดเขาทั้งห้าที่คุณได้รับนั้นตรงกับหลุมบ่อ 5 หลุมที่ฉันได้ผลดีมาก! ฉันมี matlab และใช้ SciDavis
zacharoni16

@zach: ฉันจะพยายามอัปเดตคำตอบเพื่อตอบคำถามของคุณ น่าเสียดายที่คำตอบของฉันถูกแปลงเป็นวิกิชุมชนดังนั้นฉันจึงรอให้ตัวดัดแปลงแก้ไขก่อน สิ่ง CW นี้ดูดจริงๆเมื่อคุณใช้เวลากับบางสิ่งบางอย่างแล้วทันใดนั้นคุณไม่ได้เป็นเจ้าของอีกต่อไป
Olin Lathrop

@OlinLathrop คุณจะได้รับการแปลงกลับเมื่อคุณแก้ไข คุณควรตั้งค่าสถานะให้ฉันย้อนกลับเมื่อคุณแก้ไขเสร็จแล้ว ฉันจะทำตอนนี้ แต่อย่าแปลกใจถ้าคุณต้องตั้งค่าสถานะอีกครั้ง ในบันทึกของการร้องเรียนเกี่ยวกับ CW เราต้องย้อนกลับ CW ทุก 4-6 เดือนฉันคิดว่าคุณกำลังพูดถึงสถานการณ์ที่แคบมากซึ่งมีการแก้ไขมากมายและผู้ใช้ไม่ต้องการเป็น CW และ เมื่อเทียบกับการจัดการกับโทนี่หรือสถานการณ์อื่น ๆ นี่เป็นเรื่องเกี่ยวกับธงในอุดมคติที่จะจัดการกับการตัดที่ง่ายและสะอาด :)
Kortuk

1
@Andrew: ตามที่ฉันพูดในย่อหน้าสุดท้ายของคำตอบของฉันฉันมีโปรแกรมต่าง ๆ ที่จัดการไฟล์ CSV และไลบรารีรูทีนที่ทำให้อ่านและเขียนได้ง่าย เพิ่มรหัสการกรองด้านบนที่รวดเร็วและง่ายดาย ตัวกรองส่วนใหญ่เป็นโค้ดเพียงไม่กี่บรรทัดที่ถูกเรียกใช้งานหลายครั้ง สำหรับการทดสอบครั้งเดียวเหมือนกับที่ฉันทำข้างต้นไม่จำเป็นต้องใช้ตัวประมวลผลอย่างมีประสิทธิภาพเนื่องจากทุกอย่างเสร็จสิ้นลงทันที ตัวอย่างเช่นฉันเรียกว่าฟังก์ชัน COS ทุกครั้งที่ต้องการแทนที่จะสร้างตาราง
Olin Lathrop

1
@OlinLathrop ฉันเห็นสิ่งที่คุณพูดถึงในคำตอบ แต่ฉันไม่ทราบว่าคุณมีการตั้งค่าสคริปต์ที่กำหนดเองบางที MATLAB หรือบางสิ่งบางอย่างที่จะเรียกใช้หรือสิ่งที่คุณทำ คุณสามารถแบ่งปันวิธีที่คุณทำมันได้หรือไม่ มันฟังดูน่าสนใจ คุณใช้ไลบรารีกราฟิกกระป๋องเพื่อดูผลลัพธ์เพียงทิ้งและวางแผนใน Excel หรือใช้ gnuplot / octave หรือ ...
akohlsmith

2

หลุมตรวจจับขอบอาจจะถามถึงปัญหา ซองจดหมายการสั่นสะเทือนของรถยนต์เป็นที่ที่คำตอบอยู่เนื่องจากการสั่นสะเทือนที่เกิดขึ้นจริงจากเซ็นเซอร์นั้นมีความถี่สูงกว่ามาก ฉันจะไปกับ RMS ถึง DC ซึ่งตอบสนองที่ประมาณ 15Hz หรือสูงกว่าและต่ำผ่านสิ่ง


เพิ่งทำการทดสอบอีกครั้งด้วยแบนด์วิดท์เซนเซอร์เต็มรูปแบบของ 1000HZ และสุ่มตัวอย่างเร็วที่สุดเท่าที่ฉันจะทำได้ผ่านทางอนุกรมกับ Arduino รับผลลัพธ์ที่คล้ายกัน ความถี่ใดก็ตามที่อยู่ในช่วงประมาณ 17 เฮิร์ตจะหายไปอย่างรวดเร็วเมื่อเทียบกับความถี่ที่เหนือกว่าของ 2HZ และ 13HZ ฉันยังคงไม่ได้รับสิ่งที่ 9 ถึง 13.5HZ มาจากไหน มาตรวัดความเร่งติดตั้งอยู่บนแดชบอร์ดระบบกันกระเทือนไม่เคลื่อนไหวอย่างเห็นได้ชัดที่ 9 ถึง 13HZ หรือฉันจะกระเด้งไปมาอย่างบ้าคลั่ง ฉันไม่แน่ใจว่าคุณหมายถึงอะไรเกี่ยวกับ RMS ถึง DC?
zacharoni16

มาตรวัดความเร่งของคุณติดอยู่กับรถ แม้ว่าคุณจะทำสิ่งใดสิ่งหนึ่งลงบนช่วงล่างของคุณก็ตามสลักเกลียวสามารถยับยั้งและขยายความถี่ รถยนต์เป็นสัตว์ที่มีความซับซ้อนเพียงพอสำหรับสิ่งต่าง ๆ ที่สั่นสะเทือนด้วยความถี่ที่แตกต่างกัน มีวงจร (และอัลกอริทึมทางคณิตศาสตร์) ซึ่งแปลงสัญญาณ AC เป็นค่า DC RMS การค้นหาควรหาอันใดอันหนึ่ง ที่สามารถช่วยคุณสร้างซองจดหมายของสัญญาณของคุณโดยเปลี่ยนการสั่นสะเทือนความถี่สูงให้เป็นแอมพลิจูดของพวกเขา
Chintalagiri Shashank

วงจรเรียงกระแสครึ่งคลื่น (ไดโอด) เป็นอย่างไร? แต่นั่นจะแปลงทุกอย่างให้เป็นยอดบวกเหตุการณ์หลุมบ่อดึง -G หรือสิ่งนี้จะไม่เป็นปัญหาหรือไม่
zacharoni16

ฉันไม่คาดหวังว่ามันจะเป็นปัญหา แอมพลิจูดของการสั่นสะเทือนของคุณดูเหมือนจะสูงพอที่จะเป็นเอฟเฟกต์เด่น ๆ อย่างไรก็ตามเมื่อดูที่สัญญาณของคุณฉันขอแนะนำการแก้ไขแบบเต็มคลื่นแทนเพื่อหลีกเลี่ยงหลุมบ่อขนาดเล็กที่หายไป
Chintalagiri Shashank

Shashack เพิ่มวงจร evelope ที่โพสต์ไว้ด้านบนผลลัพธ์ไม่ได้เปลี่ยนแปลงอะไรมากมาย ฉันเลือกค่าคงที่เวลา RC เป็นประมาณ 2mS ฉันสุ่มตัวอย่างที่ 2mS 500 ตัวอย่าง / วินาทีแรงดันไฟฟ้าของ accelerometer อยู่ระหว่าง 0 ถึง 3.3V แม้ว่า ... จะไม่ติดลบดังนั้นไดโอดจะไม่ทำงานเหรอ?
zacharoni16

2

แทนที่จะมองหาตัวกรองโดเมนความถี่หรือเกณฑ์ฉันขอแนะนำให้ลองใช้เคอร์เนลสำหรับหลุมบ่อ "ทั่วไป" และทำการเชื่อมโยงกับมัน มันจะถือว่าเป็นเทคนิคการจับคู่แม่แบบและดูเหมือนว่าจะยืมตัวเองไปยังแพลตฟอร์มไมโครคอนโทรลเลอร์

ดูhttp://scribblethink.org/Work/nvisionInterface/vi95_lewis.pdfสำหรับการตรวจสอบอย่างรวดเร็วและอาจเป็น DOBBS, STEVEN E. , NEIL M. SCHMITT และ HALUK S. OZEMEK "การตรวจจับ QRS โดยการจับคู่แม่แบบโดยใช้สหสัมพันธ์แบบเรียลไทม์บนไมโครคอมพิวเตอร์" วารสารวิศวกรรมคลินิก 9.3 (1984): 197-212

หากคุณอยู่บนแพลตฟอร์มที่มีเนื้อวัวกว่าฉันขอแนะนำให้หมุนเวฟเล็ต


ขอบคุณ :) สิ่งนี้ดูเหมือนจะยากมากที่จะทำหรือฉันขาดอะไรไป?
zacharoni16

ยากกว่าตัวกรองแบบธรรมดา แต่มีโอกาสมากขึ้นที่จะทำสิ่งที่คุณต้องการให้ทำเมื่อคุณทำเสร็จ! อย่าพยายามนำไปใช้กับไมโครคอนโทรลเลอร์จนกว่าคุณจะได้ทำงานในรูปแบบของ Matlab หรือ R
Scott Seidman

หากต้องการเรียกใช้ "ตัวกรอง" ของคุณแบบเรียลไทม์คุณจะต้องจัดการกับมันในรูปแบบที่แตกต่างจากการดำเนินการคูณโดเมนความถี่ในทุกขั้นตอน cross-correlation (วิธีการหลักในการจับคู่เท็มเพลต) จะเป็นการดำเนินการที่แน่นอนเดียวกันยกเว้นช่วงเวลาของการตอบสนองต่อแรงกระตุ้นจะไม่กลับด้านเนื่องจากมันจะอยู่ในรูปแบบสัมพัทธ์และเราจะเรียกการตอบสนองนี้ว่า . ตอนนี้คุณเพียงแค่ต้องคิดออกว่าแม่แบบนั้นจะต้องมี
Scott Seidman

ขอบคุณสำหรับคำตอบนี้ฉันจะต้องทำการวิจัยมากขึ้นและเรียนรู้ที่จะใช้มันเพราะมันดูเหมือนจะสูงกว่าระดับทักษะปัจจุบันของฉัน ฉันขอขอบคุณความพยายามแม้ว่า
zacharoni16

2

อีกวิธีหนึ่งคือการคำนวณความแปรปรวนของสัญญาณของคุณเพื่อดูว่าหลุมบ่อทะลุออกจริงหรือไม่ นี่คือฟังก์ชั่น MATLAB สำหรับตัวกรองความแปรปรวนแบบเคลื่อนไหว N จุดกว้าง - อย่างชาญฉลาด (ถ้าฉันต้องบอกตัวเอง) โดยใช้การคำนวณแบบ Convolution สำหรับการคำนวณ

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

yup, กำลังสอง
Scott Seidman

1

ความคิดเริ่มต้นของฉันคือตัวกรอง low-pass อาจเป็นประเภทของตัวกรองที่ใช้ผิด หลุมบ่อเป็นเหตุการณ์ความถี่สูงเช่นฟังก์ชั่นสเต็ปหรือคลื่นสี่เหลี่ยม เพียงแค่ดูข้อมูลที่กรอง 50Hz ทำให้ฉันคิดว่าคุณกำลังสูญเสียข้อมูลเกี่ยวกับหลุม - ทุกอย่างดูเหมือน squiggles เดียวกันโดยไม่มีความแตกต่างอย่างมีนัยสำคัญสำหรับเหตุการณ์หลุมบ่อ ก่อนอื่นฉันจะใช้ตัวกรองความถี่สูงผ่านแล้วตัวกรองสัญญาณความถี่ต่ำที่มีความถี่สูงกว่ามาก คุณอาจหลีกเลี่ยงตัวกรอง low-pass ทั้งหมดถ้า accelerometer ของคุณถูกกรอง low-pass แล้ว

เมื่อคุณมีข้อมูลที่กรองสูงผ่านแล้วฉันคิดว่าตัวเปรียบเทียบแบบเรียบง่ายที่มีขีด จำกัด ตั้งค่าอย่างเหมาะสมจะเลือกจุดสูงสุดในข้อมูลความเร่งที่เกิดจากหลุมบ่อและอนุญาตให้คุณนับมัน


ฉันจะถอดตัวกรอง RC 50HZ จากนั้นมาตรวัดความเร่งจะใช้ค่าเริ่มต้น 500HZ หรือ 1000HZ LPF ซึ่งควรสูงพอที่จะทำให้เกิดการสั่นสะเทือนทางกล ฉันจะเพิ่มอัตราตัวอย่างจาก 100HZ เป็น 1000HZ และโพสต์ข้อมูลเพิ่มเติม ขอบคุณสำหรับความเข้าใจ
zacharoni16

ฉันใช้แบนด์วิดธ์เต็มรูปแบบของ accelerometer และการสุ่มตัวอย่างเร็วขึ้นดูเหมือนว่าจะได้รับข้อมูลที่คล้ายกัน :( นี่คือความสับสนเกี่ยวกับวิธีการกรองและแยกเหตุการณ์หลุมบ่อและชน
zacharoni16

ฉันบอกว่าจะใช้ตัวกรอง High Pass ไม่ใช่ตัวกรองต่ำ ฉันสนใจที่จะดู FFT ของข้อมูลที่ไม่มีการกรอง
AngryEE

มาตรความเร่งมีหน่วยแรงใน 1000HZ LPF และฉันไม่สามารถเปลี่ยนแปลงได้ ฉันจะโพสต์ในไม่ช้า FFT ของข้อมูลที่ไม่มีการกรอง
zacharoni16

คุณไม่จำเป็นต้องเปลี่ยนสิ่งนั้น - คุณต้องการความถี่สูงที่มาจากการเร่งความเร็วอย่างฉับพลันเมื่อคุณไปที่หลุม แต่ไม่ใช่การขับขี่แบบธรรมดา ดูเหมือนว่าสัญญาณของคุณจะมีลักษณะการสั่นสะเทือนความถี่ต่ำที่มีหนามแหลมหลายครั้ง คุณต้องการความถี่สูงในการจับภาพแหลมชั่วคราว แต่คุณต้องการปฏิเสธความถี่ต่ำที่คงที่ ดังนั้นคุณควรกรองทุกอย่างที่ 50Hz หรือ 100Hz
AngryEE
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.