1 / 32

דחיסת אות ECG בעזרת אלגוריתם Matching Pursuit

דחיסת אות ECG בעזרת אלגוריתם Matching Pursuit. שי אלפסי אילן בנדור. מטרות. מטרת הפרוייקט לקרב את האלגוריתם לזמן אמת ובחינת ביצועי האלגוריתם תחת תנאים אלו. הצעות לשיפור האלגוריתם עבור מימוש מתקדם יותר. למה צריך ECG ?. מאפשר אינדיקציה טובה על תפקוד השרירים באיזורים שונים בלב.

art
Download Presentation

דחיסת אות ECG בעזרת אלגוריתם Matching Pursuit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. דחיסת אות ECG בעזרת אלגוריתםMatching Pursuit שי אלפסי אילן בנדור

  2. מטרות • מטרת הפרוייקט לקרב את האלגוריתם לזמן אמת ובחינת ביצועי האלגוריתם תחת תנאים אלו. • הצעות לשיפור האלגוריתם עבור מימוש מתקדם יותר.

  3. למה צריך ECG ? • מאפשר אינדיקציה טובה על תפקוד השרירים באיזורים שונים בלב. • פשוט למדידה.

  4. למה לדחוס ECG ? • מדידה של 12 ערוצים במקביל , 11 ביטים לדגימה , 1000 דגימות בשניה , 24 שעות : • העברת מדידות ECG בזמן אמת.

  5. Matching Pursuit • יצירת מילון המורכב מאטומי זמן-תדר מהצורה: • פונקציית המילון נבנות על ידי פונקצית gabor : • בנוסף לאטומי זמן-תדר המילון מורכב גם מפונקציית פורייה ופונקציות Dirac , הנבנות גם הן בעזרת פונקציית gabor עם תחום שונה של ערכים עבור s,p,k .

  6. Matching Pursuit (המשך) • פירוק אות הECG לסגמנטים. • עבור כל סגמנט מבצעים תהליך איטרטיבי של הטלת האות על פונקציות המילון , ומציאת הפונקציה המתאימה ביותר , בצורה הבאה : • כאשר הוא השארית המתקבלת בכל איטרציה באופן הבא :

  7. Matching Pursuit (המשך) • שמירת פרמטרי הפונקציות שנבחרו s,p,k ו inner product . • מעבר לסגמנט הבא כאשר מתקיים התנאי: • בסוף התהליך לאחר m איטרציות האות ניתן לייצוג בצורה הבאה :

  8. Matching Pursuit (המשך) • בתהליך הפריסה יוצרים את הפונקציות שנבחרו מהמילון בעזרת הפרמטרים. • משחזרים את האות בעזרת הפונקציות והמכפלה הפנימית (inner product) .

  9. יישום האלגוריתם • יישום האלגוריתם התבצע ב C++ על מנת לקרב את התוצאות ל"זמן אמת" ככל שניתן. • המימוש מורכב משלושה חלקים עיקריים : דחיסת האות , פריסת האות ובדיקת השגיאה (PRD).

  10. תהליך הדחיסה יצירת מילון פונקציות (create_dictionary) תוכנית ראשית קריאת וקטורי ECG (read_signal) דחיסת וקטור (compress_vector) חיפוש בתת מילון (search_region) כיוונון עדין (fine_tunning) דחיסת סגמנט (compress_segment) חישוב וקטור שארית (get_remainder_vec)

  11. תוכנית ראשית ( main ) main • הפעלת המודולים המבצעים: • יצירת מילון. • קריאת וקטורי ECG. • דחיסת וקטור i. • קלט : • נתוני משתמש הכוללים : • שם קובץ קלט. • שם קובץ פלט. # • גודל פונקצית מילון. # • דיוק הדחיסה. # • מס' עמודות לדחיסה. # • דיוק הכיוונון העדין. # • # - נתונים אופציונליים. תפקידי המודול: קריאת נתוני המשתמש והשלמת הנתונים האופציונליים, קריאה למודולים המפורטים והמתנה לסיומם.

  12. יצירת מילון פונקציות Create_dictionary • קלט : • מצביע ל-struct הראשון במילון. • קלט : • מס' הדגימות בכל פונקציה (N). • תפקיד המודול : יצירת המילון שעל פיו יפורקו אותות ה-ECG. • המילון מורכב מפונקציות גאבור , פונקציות דיראק ופונקציות פורייה. • מס' הפונקציות במילון נקבע ע"פ : num_of_funcs = 4*N*(log_2(N)-1)+2*N . • המילון הינו מערך structs , כאשר כל struct מכיל : פרמטרים נחוצים ליצירת הפונקציה ( s,p,k) , וקטור הדגימות של הפונקציה. ונתוני עזר נוספים.

  13. קריאת וקטורי ECG Read_signal • פלט: • מערך וקטורים. • קלט : • שם קובץ המכיל דגימות ECG ערוכות בוקטורים. • מספר הוקטורים אותם יש לקרוא. • מערך מספרי הוקטורים לקריאה. • תפקיד המודול: קריאת הדגימות במספרי העמודות הנתונים במערך הקלט והכנסתם לוקטרים המוחזרים המערך הוקטורים. • כל וקטור במערך המוחזר מכיל דגימות מנקודת מדידה בודדת.

  14. דחיסת וקטור Compress_vector • פלט : • קובץ המכיל את נתוני הדחיסה של וקטורי הקלט. • קלט : • אינדקס הוקטור. • וקטור דגימות ECG. • פרמטר כיוונון עדין. • מצביע למילון הפונקציות. • מספר הפונקציות במילון. • שם קובץ הפלט. תפקיד המודול : ביצוע דחיסה של וקטור הקלט ע"י חלוקתו לסגמנטים באורך פונקציות המילון וקריאה מחזורית למודול המבצע את דחיסת הסגמנט. בסיום דחיסת הוקטור מודפסים נתוני הדחיסה לקובץ.

  15. דחיסת סגמנט Compress_segment • קלט : • סגמנט נתוני ECG. • מספר הפונקציות המילון. • פרמטר כיוונון עדין. • פלט : • וקטור ערכי S. • וקטור ערכי P. • וקטור ערכי K. • וקטור ערכי המכפלות הפנימיות. • תפקיד המודול : המודול מבצע דחיסה של הסגמנט הנתון ע"פ אלגוריתם matching pursuit. • פרמטר הכיוונון מאפשר לקבוע לכמה קטעים יחולק המקטע בו נמצאה המ"פ הגדולה ביותר בתהליך הכיוונון העדין. • לאחר כל איטרציה נרשמים נתוני הפונקציה שנבחרה ותוצאת המ"פ לוקטורי הפלט. • המודול מבצע את חיפוש הפונקציה במילון ע"י הפונקציה search_region . • המודול תוכנן כך שיוכל לתמוך בהפעלה מקבילית. • שדות הקלט והפלט מצויים במבנה יחיד הנשלח ומוחזר מהמודול.

  16. חיפוש בתת מילון Search_region • פלט : • ערכי S,P,K של הפונקציה שהניבה ערך מ"פ גבוה ביותר. • ערך המ"פ. • אינדקס הפונקציה שנבחרה. • קלט : • מצביע למילון הפונקציות. • סגמנט נתוני ECG. • מספר הפונקציות שיש לסרוק. • אינדקס הפונקציה ממנה להתחיל. • תפקיד המודול : חיפוש הפונקציה המניבה ערך מ"פ הגבוה ביותר עם סגמנט נתוני ה-ECG שנשלח והחזרת פרטיו. • שדות הקלט והפלט מצויים במבנה יחיד הנשלח ומוחזר מהמודול (במבנה זה מצויים שדות נוספים שאינם רלבנטיים למודול זה).

  17. כיוונון עדין Fine_tunning • קלט : • אינדקס הפונקציה שהניבה מ"פ מקסימלית עד כה. • מצביע למילון הפונקציות. • נתון עזר j (בעזרתו חושבו S,P,K של הפונקציה). • דיוק הכיוונון העדין. • פלט : • פרמטרי S,P,K בעזרתם נוצרה הפונקציה המכווננת. • ערך המ"פ המרבית. • וקטור ערכי הפונקציה המכווננת. • תפקיד המודול : מציאת פרמטרי S,P,K של פונקציה המניבה ערך מ"פ גבוה יותר מהפונקציה הטובה ביותר במילון (אם אפשר) והחזרת פרמטרים אלה, ערך המ"פ החדש ווקטור ערכי הפונקציה החדשה. • במקרה של פונקצית גאבור הכיוונון נעשה על S,P ו – K , במקרה של פונקצית דיראק הכיוונון נעשה על P ובמקרה של פונקציות פוריה הכיוונון נעשה על K. • ניתן למנוע את הכיוונון העדין ע"י שליחת ערך אפס בתור דיוק הכיוונון העדין למודול דחיסת הסגמנט.

  18. חישוב וקטור שארית Get_remainder_vec • פלט : • וקטור שארית. • דגל סיום. • קלט : • וקטור דגימות הפונקציה • שהניבה מ"פ מרבית. • סגמנט ערכי דגימות ECG. • ערך מ"פ מרבית. • ערך -)norm(seg – mean(seg) • תפקיד המודול : בצוע חשוב וקטור השארית ובדיקת תנאי סיום : • PRECISION הינו משתנה גלובלי המוגדר ע"י התוכנית הראשית.

  19. תהליך הפריסה בניית סגמנט Build_segment() בניית וקטור Build_vector() בניית סגמנט Build_segment() בניית וקטור Build_vector() בניית סגמנט Build_segment() בניית וקטור Build_vector() בניית סגמנט Build_segment() בניית וקטור Build_vector() תוכנית ראשית Main() בניית סגמנט Build_segment() בניית וקטור Build_vector() בניית סגמנט Build_segment() בניית וקטור Build_vector()

  20. תוכנית ראשית • תפקיד: • לקרוא את הנתונים מהמשתמש. • להפעיל את הפונקצייה decompress_vector עבור כל קובץ קלט. • להדפיס את האותות המשוחזרים המתקבלים מפונקציה decompress_vector לקובץ הפלט. קלט מבניית וקטור : Struct מסוג vector_t המכיל את הווקטור המשוחזר תוכנית ראשית Main() • קלט מהמשתמש: • שמ/ות קבצ/ים הנוצרו על ידי תהליך הדחיסה. • שם קובץ פלט שיכיל את הווקטור/ים המשוחזרים (בררית מחדל decompress_vector ) . • ערך עבור DECOMP_LEVEL ( בררית מחדל 0) . פלט לבניית וקטור : Struct מסוג vector_t המכיל שם קובץ מהמשתמש ווקטור ריק

  21. בניית וקטור • תפקיד: • לקרוא את הנתונים מקובץ הקלט(המכיל את נתוני הדחיסה) . • להפעיל את הפונקצייה build_segment עבור כל אחד מהסגמנטים. • לאחר סיום בניית כל הסגמנטים להרכיב את האות המשוחזר ולהתזירו לתוכנת הראשית. קלט מבניית סגמנט: Struct מסוג build_segment_s המכיל את את הסגמנט המשוחזר. פלט לתוכנית הראשית : Struct מסוג vector_t המכיל את הווקטור המשוחזר בניית וקטור Build_vector() פלט לבניית סגמנט: Struct מסוג build_segment_s המכיל את נתוני הדחיסה עבור כל סגמנט וסגמנט ריק. קלט מהתוכנית הראשית: Struct מסוג vector_t המכיל שם קובץ מהמשתמש ווקטור ריק

  22. בניית סגמנט • תפקיד: • הפונקצייה משחזרת סגמנט על פי הנתונים שהיא מקבלת כקלט(struct מסוג build_segment_s ). • מאתחלת את הסגמנט ב struct לסגמנט המשוחזר . • מחזירה את ה struct לבניית וקטור. פלט לבניית וקטור: Struct מסוג build_segment_s המכיל את את הסגמנט המשוחזר. בניית סגמנט Build_segment() קלט מבניית וקטור: Struct מסוג build_segment_s המכיל את נתוני הדחיסה עבור כל סגמנט וסגמנט ריק.

  23. בדיקת שגיאה תפקיד: חישוב השגיאה הממוצעת באחוזים באופן הבא : כאשרORG זהו האות המקורי ו- REC– זהו האות המשוחזר. תוכנית ראשית • פלט: • השגיאה הממוצעת הכללית מודפסת למסך ולקובץ פלט (prd_res.txt) . • מודפס וקטור המכיל את השגיאה עבור כל דגימה (prd_vector.txt) . • קלט: • קובץ המכיל את האות המקורי . • קובץ המכיל את האות המשוחזר.

  24. תוצאות • השוואת מקטעי האות לפני דחיסה ואחרי פריסה מילון בן 256 דגימות, שגיאה מירבית 1%,יחס דחיסה 1:10 פילוג שגיאת האנרגיה

  25. תוצאות (המשך) מילון בן 256 דגימות, שגיאה מירבית 5%,יחס דחיסה 1:23 פילוג שגיאת האנרגיה

  26. תוצאות (המשך) • ניתוח התוצאות התבצע על פי שני קבצי ECG מתוך בסיס הנתונים MIT - BIH : • קובץ mitdb\109.mat– יקרא קובץ A. • קובץ cudb\cu01.mat– יקרא קובץ B.

  27. תוצאות (המשך) • השפעת מספר הפונקציות במילון יחס דחיסה כתלות במספר הפונקציות זמן הדחיסה כתלות במספר הפונקציות

  28. תוצאות (המשך) • השפעת שגיאת הדחיסה יחס הדחיסה כתלות בשגיאת הדחיסה זמן הדחיסה כתלות בשגיאת הדחיסה

  29. תוצאות (המשך) • השפעת גודל המילון על השגיאה הממוצעת שגיאת דחיסה ממוצעת לסגמנט כתלות בגודל סגמנט

  30. MP FOP Fan 11.843 7.4 10.46 יחס הדחיסה דיון • יחס דחיסה : על סמך התוצאות ניתן לראות שככל שאחוז השגיאה הנדרש עולה ומספר הפונקציות במילון גדל , משתפר יחס הדחיסה . כמו כן יחס הדחיסה המקסימלי שהתקבל הוא 1:37 עבור שגיאה נדרשת של 5% ומילון בעל 17408 פונקציות . להלן השוואה עם מספר אלגוריתמים נוספים : הטבלה מתייחסת לאלגוריתם תחת התנאים הבאים : PRD < 3.2% , SNR > 65 , RMS < 25

  31. SNR RMS PRD שיטת דחיסה 84.7 11.8 1.7% Fan 78.8 15.9 2.2% First Order Prediction 79.0826 12.5028 2.33% Matching Pursuit דיון (המשך) • שגיאת דחיסה :על מנת להשוות נתון זה לאלגוריתמים אחרים , נתייחס גם ל RMS ו SNR של אלגוריתמים אלו . הנתונים בטבלה מתיחסים עבור יחס דחיסה של 1:4

  32. סיכום • תוצאות טובות עבור אותות ECG אופיינים. • הוספת פונקציות למילון עבור אותות שונים. • הוספת אופטימיזציות לחיפוש במילון לצימצום זמן הדחיסה.

More Related