יום שני, 19 בנובמבר 2012

המפקח על הסימולציות לעזרתכם | שימוש ב-Simulation Data Inspector לבחינת אלגוריתם והפרמטרים שלו

"הרשו לי לפנות את הבמה בפוסט הזה פעם נוספת לטובת רוני פאר, אשר עובד יחד עמי בחברת סיסטמטיקס והתארח בבלוג הזה מספר פעמים, האחרונה שבהן – לפני חודש".


לאחרונה הזדמן לי לשוחח עם מספר מהנדסים שביצעו את הפעולות הבאות בסביבת סימולינק:

• להריץ סימולציה
• לשנות סט של פרמטרים חשובים (למשל מקדמי בקר או מסנן, תגובת הזמן של אחת מפונקציות התמסורת, או פרמטר "אנושי" כמו מסה)
• להריץ שוב את הסימולציה (עם הפרמטרים המעודכנים) ולהשוות בין תוצאותיה לתוצאות הסימולציה המקורית

תהליך העבודה של אותם האנשים היה לכתוב GUI בסביבת MATLAB שמרכז את כל תוצרי הסימולציה, מריץ את המודל, מבצע Logging לכל הנתונים ולבסוף מציג אותם בעזרת Figures. הבעיה בשיטה הזו היא שכאשר אותם מהנדסים רצו להוסיף עוד אותות או פרמטרים, הם היו חייבים לשנות בצורה משמעותית את הקוד ואת ה-GUI. שיטת עבודה עדיפה היתה שימוש ב-Simulation Data Inspector, אשר קיים עוד מגרסת R2010b של כלי MathWorks (לחצו לסרטון ישן בנושא).

למי שהצליח לא לשים לב ל-Simulation Data Inspector, החל מגרסת R2012b של תוכנת Simulink, שיצאה לפני כחודשיים – אי אפשר להתחמק מכפתור ההקלטה האדום שנמצא במרכז החלק העליון של ה-Editor החדש. ולאלה מכם שמעוניינים להשתמש בו – להלן הדרך המקובלת.

ראשית, יש לבחור את האותות אשר רוצים להשוות בין ערכיהם בסימולציות השונות. קליק-ימני של העכבר על האות, ואז Properties, נותן את האפשרות לבצע "Log Signal Data". בחירה באופציה הזו תביא להופעת Badge כחול שנראה כמו אנטנה משדרת. ניתן לראות בתמונה למטה את החלון שנפתח לאחר הבחירה ב-Properties, וכן מספר Badges כחולים (לחצו על התמונה כדי להגדיל אותה במקצת).


לאחר שהגדרנו את האותות, יש לבחור בכפתור ההקלטה האדום, ה-"Record and Inspect Simulation Output". בלחיצה על כפתור זה, כל סימולציה עתידית שתופעל תישמר לתוך פרמטר מתאים ב-Workspace. אגב, בתמונה למטה ניתן לשים לב לכך שמימין לכפתור האדום ישנו חץ הרחבה המאפשר לפתוח את ה-Configure Data Logging שבעזרתו ניתן לשלוט בפירוט רב יותר על האותות שייאגרו והפורמט שבו יישמר המידע, וכן לבצע Override (או הפעלה וכיבוי) לאותות שברצוננו לשמור בכל סימולציה.


נריץ את הסימולציה עבור סט מסויים של פרמטרים, והתוצאות יישמרו בצורה אוטומטית. לאחר מכן, נשנה את הפרמטר Ta, השולט על זמן התגובה של המערכת, כך שיהיה ארוך יותר, ונריץ שוב את הסימולציה.

בכדי להשוות בין תוצאות שתי הסימולציות, כל שיש לעשות הוא ללחוץ על הקישור שמופיע בחלקו העליון של המודל:


בחלון ה-Simulation Data Inspector שנפתח כל ריצה מסומנת ב-RUN עם אינדקס מתאים, וניתן לראות שלוש לשוניות (Tabs) ברורות: הצגת המידע, השוואה בין האותות השונים, והשוואה בין הריצות השונות.

הלשונית הראשונה מאפשרת להציג כל אות או מספר אותות על אותה מערכת צירים. פשוט מסמנים ב-V את כל האותות המעניינים אותנו, והכלי כבר ידאג לכל השאר.


כפי שנכתב למעלה, הלשוניות השניה והשלישית מאפשרות להשוות בין שני אותות או בין שתי ריצות שונות, דוגמה לתוצאת ההשוואה בין שתי הסימולציות מובאת להלן, ומאחר ושינינו פרמטר השולט על זמן התגובה של המערכת, ניתן לראות הבדל משמעותי בין שתי הריצות, המתבטא ב"Difference" גבוה בין 2 האותות.


מעבר להצגת המידע וביצוע ההשוואות, ניתן לייצר דו"ח המרכז את כל התוצרים, ישירות מתוך ה-Simulation Data Inspector. כדי לבצע זאת, יש לגשת לתפריט File, ולבחור ב-Generate Report. אפשרות זו, אגב, היא אשר שכנעה סופית את בני שיחי לעבור לשימוש ב-Simulation Data Inspector, שכן הם הבינו שהיא תחסוך להם זמן רב של ביצוע Copy & Paste.


האם הכרתם את ה-Simulation Data Inspector לפני הפוסט הזה? אם לא, האם נראה לכם שתתחילו להשתמש בו מעתה?

יום חמישי, 1 בנובמבר 2012

גל גל גלונים


שיטת הניתוח Wavelet ("תורת הגלונים") הינה אוסף של כלים וטכניקות לניתוח אותות. בין היתר, היא משמשת לדחיסת תמונות של טביעות אצבע במאגרי ה-FBI, הפחתת רעש באותות ECG או בתמונות ועוד. כדי להבין מה יתרונות שיטת הניתוח הזו על השיטות המוכרות והוותיקות יותר, תובא תחילה סקירה של שיטות אלה וחסרונותיהן.

ניתוח פוריה
ניתוח פוריה, מהמאה ה-19, מפרק סיגנל למרכיבים סינוסואידים בתדרים שונים. זו בעצם טכניקה מתמטית להתמרה של ההסתכלות שלנו על הסיגנל ממישור הזמן למישור התדר. להרבה אותות זה ניתוח שימושי, כי התכולה התדרית של האות היא מאוד חשובה.
אז מה הבעיה?
הבעיה בניתוח פוריה היא שכאשר מסתכלים על התמרת פוריה של סיגנל, אי אפשר לדעת בדיוק מתי אירוע מסויים התרחש. אם הסיגנל סטציונרי, כלומר אם מאפייניו לא משתנים ממש לאורך הזמן, החסרון שהוזכר לא ממש קריטי. אולם, רוב הסיגנלים המעניינים הם לא כאלה, אלא מכילים סחיפות, מגמות, שינויים פתאומיים, אי רציפות של נגזרות מסדר גבוה, והתחלות וסיומים של ארועים. וניתוח פוריה לא מתאים בשביל לאתר כאלה דברים.

STFT
דניס גאבור הציע ב-1946 דרך להתגבר על החסרון הנ"ל של ניתוח פוריה – והיא להשתמש בניתוח הזה על מקטעים של הסיגנל. בעזרת חלון מתאים מקבלים את המקטעים השונים, ועל כ"א מהם עושים את ניתוח פוריה (שבשיטה הקודמת בוצע על האות כולו). האדפטדציה הזו נקראת Short-Time Fourier Transform, והיא ממפה את הסיגנל לפונקציה בשני משתנים: תדר וזמן. ה-STFT הוא סוג של פשרה בין התבוננות על הסיגנל המבוססת על הזמן ובין התבוננות עליו המבוססת על התדר. היא מאפשרת קבלת מידע גם על "מה היו התדרים" וגם על "מתי היו התדרים האלה".
אז מה הבעיה?
הדיוק של המידע הזה מוגבל, והוא תלוי בגודל החלון שבו עושים שימוש. וברגע שבוחרים את גודל החלון – החלון קבוע, יהיו התדרים אשר יהיו. וזו בעיה כיוון שלניתוח של אותות רבים נדרשת גישה יותר גמישה – כזו שבה אפשר לשנות את גודל החלון כדי לקבוע בדיוק רב יותר את זמן או את התדר.
אז מה הפתרון? ניחשתם נכון – ניתוח Wavelet !

ניתוח Wavelet
זהו בעצם השלב הלוגי הבא – טכניקה של עבודה עם חלונות עם גודל משתנה. ניתוח Wavelet מאפשר להשתמש באינטרוולי זמן ארוכים היכן שמעניינת אותה האינפורמציה בתדרים הנמוכים, ובאינטרוולים קצרים יותר היכן שמעניינת אותה האינפורמציה בתדרים הגבוהים. לגלונים, אם כך, יש היבטים של scaling והיבטים של זמן.
היכולת הזו לבצע ניתוח מקומי (ניתוח של אזור מסויים בסיגנל הגדול) חשובה מאוד - קחו לדוגמה גל סינוס בתדר Wo עם עיוות קטנטן, למשל – אי רציפות, שזה משהו שבהחלט יכול לקרות בעולם האמיתי, למשל בגלל פלקטואציה חשמלית או מתג רועש. התמרת פוריה של הסיגנל הזה, שאותה מקבלים ב-MATLAB ע"י פקודת fft, תיתן לנו שני פיקים, ב-Wo וב-Wo-. ניתוח Wavelet, לעומת זאת, יראה בבירור גם את המיקום המדוייק של העיוות על ציר הזמן.

להלן סיכום של ארבע הצורות להצגת סיגנל שעסקנו בהן – בזמן, בתדר, במישור גאבור ובמישור Wavelet:
כיצד מתבצע ניתוח Wavelet
בעוד ניתוח פוריה מפרק סיגנל לסינוסואידות בתדרים שונים, ניתוח Wavelet מפרק סיגנל לגרסאות מוזזות ובעלות סקאלה שונה של גלון האם, גלון המקור. גלון הינו אות בעל משך סופי וממוצע אפס. סינוסואידות, שהן הבסיס לניתוח פוריה, הן כידוע לא בעלות משך סופי. הן גם חלקות וצפויות, בעוד גלונים הינם אי-רגולרים באופיים, וא-סימטריים.
מספר משפחות של גלונים נמצאו כיעילות במיוחד, למשל:
Haar, Daubechues, Biorthogonal, Coiflets, Symlets, Morlet ועוד. ניתן לחקור אותן באמצעות ה-Wavelet Toolbox, וכמובן להשתמש בו על מנת לבצע ניתוח Wavelet תוך שימוש בהן.

אז מה זה בעצם ה-Wavelet Toolbox
Wavelet Toolbox הוא אוסף של פונקציות הפועל בסביבת המיחשוב הטכני של MATLAB, והמאפשר לבצע ניתוח בשיטת Wavelet. בין היתר, ה-Toolbox מאפשר:
• לבחון ולחקור מאפיינים של גלונים בודדים ושל Wavelet packets
• לחקור סטטיסטיקה של אותות ושל מרכיבי אותות
• לבצע התמרת Wavelet רציפה על סיגנל חד-מימדי
• לבצע פירוק והרכבה של אותות חד ודו מימדיים (בדידים)
• לבצע ניתוחי Wavelet packet לאותות חד ודו מימדיים
• לדחוס ולהסיר רעש מאותות ותמונות

ה-Toolbox מספק שני סוגים של כלים:
• פונקציות שהן בעצם m-files שאפשר להשתמש בהן בשורת הפקודה או בסקריפט,
• ממשקים גרפיים אינטראקטיביים (העלאה ע"י פקודת wavemenu או על ידי בחירה
ב-App המתאים בגלריית ה-Apps החל מגרסת R2012b), דוגמאות לשנים מהם מובאות להלן:
ה-Wavelet Toolbox מספק מבוא מקיף לתורת הגלונים ולא מניח ידע קודם בתחום (למעשה, פוסט זה מבוסס ברובו על ה-Help של הכלי). הוא מאפשר לכם להשתמש בטכניקות הכלולות בו באופן מיידי על המידע שלכם, ולקבל תובנות חדשות לגביו. אם אתם מעוניינים להתנסות ב-Wavelet Toolbox, רק שלחו מייל ל-matlab.israel@gmail.com

האם הכרתם את תורת הגלונים לפני הפוסט הזה? האם יצא לכם להשתמש ב-Wavelet Toolbox? האם השתמשתם בפונקציות שבו או בממשק הגרפי שלו?