كل المشاريع

موثّق بالكامل (الالتقاط، والسمات، وبروتوكولات التقييم) · قرار النشر العلني قيد الدراسة

تصنيف حركات EMG

استخراج إشارة من بيانات صعبة القيود

≈59%

دقة تصنيف أربع حركات على أشخاص جدد (LOSO) · الصدفة 25%

≈29% ← ≈59%

الدقة على أشخاص جدد بعد رفع معدل أخذ العينات من 20Hz إلى 500Hz

15

سمة يدوية عبر 5 عائلات

المشكلة

مشروع بحثي لعميل: تصنيف أربع حركات يد (راحة، ثني، قبضة، قرص) من قناة EMG سطحية واحدة على الساعد، والهدف تشغيل يد اصطناعية. قيدان حكما كل شيء: القناة الواحدة تعني غياب أي معلومة مكانية، والثني والقرص يستخدمان المجموعة العضلية نفسها؛ وعدد الأشخاص صغير: 7 في مجموعة البيانات الأولى، و8 في الثانية، واثنان فقط في بعض التقييمات. والتسجيلات متصلة، وفي كل ملف حركة فترات راحة غير موسومة بين التكرارات.

الدور والمنهجية

(١) التشخيص قبل النمذجة: النماذج الأولى على 7 أشخاص بقيت قرب مستوى الصدفة، فكتبتُ برنامج تشخيص إحصائي بدل تجربة نموذج أكبر. التجربة الضابطة فيه حسمت الأمر: المصنّف حقق 45.0% على التسجيلات الحقيقية و56.5% على ضجيج غاوسي بالشكل نفسه. السبب كان حلقة Arduino التي تأخذ العينات بتردد 20Hz، بينما معلومات EMG تقع تقريبًا بين 20 و450Hz، فكل ما فوق 10Hz كان يتداخل (Aliasing). تعديل واحد في البرنامج الثابت (delay(50) ← delay(2)) رفع المعدل إلى 500Hz، وأُعيد التسجيل: 110 تسجيلات من 8 أشخاص. (٢) التنظيف: تشذيب حواف التسجيل، وفلتر Butterworth تمرير نطاق من الرتبة 4 ثنائي الاتجاه (20–249Hz)، وقصّ القفزات عبر RMS متحرك وعتبة IQR. ارتفع فصل الراحة عن النشاط بمقياس RMS من 1.8× إلى 3.7×. (٣) السمات: 15 سمة يدوية في خمس عائلات: زمنية (Waveform Length، وZCR، وSlope Sign Changes)، وطيفية (Mean Frequency عبر Welch PSD)، وتعقيد (Hjorth Mobility/Complexity، وSample Entropy)، وانحدار ذاتي (معاملات AR-Burg)، وطاقة المويجات (DWT db4، 3 مستويات)، إضافة إلى نسبة WL-to-MNF صمّمتُها لاستهداف الخلط بين الثني والقرص. (٤) بوابة النشاط: عتبة RMS تُسقط نوافذ الراحة غير الموسومة داخل تسجيلات الحركة. (٥) مقارنة النماذج: Random Forest، وXGBoost مضبوط بـOptuna، وCNN أحادي البعد، وCNN-LSTM، وخطّان هجينان CNN-XGBoost، لاختبار السمات اليدوية مقابل المتعلَّمة على هذا الحجم من البيانات. (٦) تدقيق التقييم: إعادة جدولة كل نتيجة بحسب بروتوكولها، من التقسيم العشوائي على مستوى النافذة إلى ترك شخص كامل خارج التدريب (LOSO)، ليُقرأ كل رقم مقابل ما يقيسه فعلًا.

التقنيات

PythonNumPy / SciPyscikit-learnXGBoostOptunaTensorFlow / Keras (CNN-LSTM)PyWavelets (DWT)Burg ARArduino + Olimex EMG shield

الإنجاز والأثر

في الطرف الاصطناعي، الرقم الذي يهم هو الدقة مع شخص لم يره النموذج من قبل. ببروتوكول LOSO حقق XGBoost على 13 سمة يدوية 59.98% (شخصان محجوبان)، وحقق CNN-LSTM نسبة 58.89% على 8 أشخاص، مقابل 25% بالصدفة. فحص لاحق وجد كتلًا متطابقة طولها ثوانٍ مكرّرة في بعض التسجيلات (5.5% من النوافذ)، وهذا يرفع الرقمين ببضع نقاط، لذلك أذكرهما بقرابة 55–60%. ثلاث نتائج أهم من الرقم نفسه: تعديل معدل أخذ العينات نقل الدقة على أشخاص جدد من قرابة 29% إلى قرابة 59%، أكثر من كل تغييرات النمذجة في المشروع مجتمعة. والسمات اليدوية ساوت كل نماذج التعلّم العميق أو تفوّقت عليها على هذا الحجم من البيانات. والأخطاء المتبقية تقع حيث تتوقعها القناة الواحدة: 34% من نوافذ الثني تُصنَّف قرصًا.

عن رقم 87.09% من المشروع نفسه: جاء من تقسيم عشوائي على نوافذ متداخلة بنسبة 85%، وكل الأشخاص في طرفي التقسيم، مع عتبة نشاط استخدمت تصنيف الفئة على مجموعة الاختبار. هو يقيس قدرة النموذج على التعرّف على نوافذ قريبة مما تدرّب عليه، لا أداءه مع مستخدم جديد، لذلك لا يُعرض هنا كنتيجة. وتقرير المشروع نفسه يسمّي LOSO مقياسًا للنشر. الخطوة التالية تشغيل واحد: خط XGBoost بالسمات الخمس عشرة ببروتوكول LOSO، مع ملاءمة التطبيع داخل كل طيّة، وبوابة نشاط لا تعتمد على التصنيف، وحذف الكتل المكرّرة قبل التقطيع.

الروابط

الوسائط

مخطط أعمدة: المصنّف يحقق 45.0% على تسجيلات EMG الحقيقية بتردد 20Hz و56.5% على ضجيج غاوسي اصطناعي بالشكل نفسه؛ مستوى الصدفة 25%
التجربة الضابطة التي أوقفت النمذجة: عند 20Hz سجّلت البيانات الحقيقية أقل من ضجيج مطابق. الحل كان في البرنامج الثابت، لا في النموذج.
مصفوفة التباس لـXGBoost مع عتبة نشاط ببروتوكول LOSO: الراحة 4,105 صحيحة من 5,106، والقبضة 2,602 من 3,728، والقرص 2,083 من 4,263، والثني 1,216 من 3,585، مع 1,215 نافذة ثني صُنّفت قرصًا
LOSO على أشخاص جدد، 59.98% إجمالًا. الثني يُصنَّف قرصًا بقدر ما يُتعرَّف عليه تقريبًا.
للإضافة — الإشارة قبل التنظيف وبعده، لكل شخص