יום ראשון, 16 בדצמבר 2012

מכחול ושרשרת ברזל | על Link Plot ו-Brush/Select Data


בתחילת החודש העברתי הרצאה במסגרת סמינר בנושא החידושים ב-MATLAB ו-Simulink בגרסאות האחרונות, ולקראת תום ההרצאה הצגתי שקף ובו סקירה של טיפים וטריקים בעבודה עם MATLAB. מפאת קוצר הזמן, לא הייתי יכול להדגים או להסביר כל טיפ וטריק, ולכן ביקשתי מהנוכחים לבחור כמה מראשי הפרקים שבשקף אשר נשמעים להם מעניינים ואשר היו מעוניינים שארחיב עליהם. הקהל בחר ב-Link Plot וב-Brush/Select Data, ובהם יעסוק פוסט זה.

לא רבים יודעים, אך באמצעות Link-Plot ניתן לקשר בין גרף לבין המשתנים שמהם הוא הופק, כך ששינוי של המשתנים יביא לעדכון של הגרף (מבלי שיהיה צורך להפעיל שוב פעם את פקודת ציור הגרף). בנוסף, ניתן אפילו לבצע שינויים במידע על גבי הגרף, כך שהללו יבואו לידי ביטוי גם בגרף וגם במשתנים אשר מהם הוא נוצר (וזאת על ידי Brush/Select Data). והנה דוגמה...

נניח שהפקנו גרף של עשר נקודות במישור X-Y אשר הוגרלו מפילוג אחיד בתחום [0,1] (לחצו על התמונה כדי להגדילה):

ניתן לקשר בין הגרף לבין המשתנים שמהם הוא הופק באמצעות לחצן ה-Link Plot שבתפריט ה-Figure

אם נלחץ עליו, ולמשל נשנה את קואורדינטת ה-X הראשונה ל-5, הגרף יתעדכן בהתאם, מבלי שיהיה צורך להפעיל שוב את פקודת scatter:

משמאל ללחצן ה-Link Plot מופיע לחצן ה-Brush/Select Data

כשלוחצים על הלחצן הזה, ניתן לסמן עם העכבר נקודות בגרף, כך שסימון הנקודות יהיה שקול לבחירת התאים המתאימים (ב-Variable Editor) מתוך המידע אשר שימש להפקת הגרף:

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

אפשר, למשל, לייצר משתנה חדש מתוך כל הנקודות שמעניינות אותנו (Create Variable), להסיר את הנקודות שמפריעות לנו (Remove) או להחליף את ערכיהן בערכים אחרים (Replace with). למרות שאני מתקשה לחשוב על מקרה שבו נרצה לגרום לנתונים להיראות טובים יותר...

למידע נוסף:
Data Brushing
Data Linking

יום רביעי, 5 בדצמבר 2012

שובם של ה-System Objects

בשלוש שנות קיומו של הבלוג הזה, השתדלתי כמה שפחות למחזר פוסטים. אבל בפוסט הנוכחי אחרוג ממנהגי, מכמה סיבות:
1. חלפו שנתיים וחצי מאז הפוסט האחרון בנושא שבו ארצה לדון
2. בתקופה הזו הנושא התפתח מאוד
3. חברת MathWorks רואה בנושא הזה מרכיב חשוב בתוכניותה לעתיד
4. מעט מאוד אנשים נחשפו לנושא הזה עד כה (בכל פעם שאני שואל את הקהל שאני ניצב מולו האם אנשים מכירים את הנושא, בודדים, אם בכלל, משיבים "כן").

הנושא הינו System Objects, אלגוריתמים העומדים מאחורי אובייקטים הקיימים בסביבת MATLAB כבר 6 גרסאות (מאז גרסת R2010a). כשכתבתי על כך לפני שנתיים וחצי, היו קיימים רק כ-140 אובייקטי מערכת, ורק בתחומים עיבוד אות, עיבוד וידאו, עיבוד תמונה וראיה ממוחשבת. כיום, קיימים כבר כ-330 אובייקטי מערכת, המשמשים ל:
1. עיבוד אות - מעל 95 אובייקטי מערכת ב-DSP System Toolbox
2. עיבוד וידאו, עיבוד תמונה וראיה ממוחשבת - מעל 60 אובייקטי מערכת ב-Computer Vision System Toolbox
3. פיתוח השכבה הפיזית של מערכות תקשורת - מעל 105 אובייקטי מערכת ב-Communications System Toolbox
4. תכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות Ultrasound ומערכות תקשורת מרובות-אנטנות - מעל 60 אובייקטי מערכת ב-Phased Array System Toolbox

לאלה מכם המכירים Simulink, ה-System Objects מאפשרים גישה לחלק משמעותי מאלגוריתמים אשר בעבר היה ניתן להפעיל רק באמצעות Simulink, כך שבגישת אובייקטי המערכת ניתן כיום להשתמש באותם אלגוריתמים ללא צורך בידע ב-Simulink או ברישיון לכלי. בהקשר הזה יודגש כי קיימים גם אובייקטי מערכת אשר אין להם בלוק תואם בסביבת Simulink (למשל, אובייקט המערכת המאפשר גילוי פנים בתמונה, אשר נידון בעבר בבלוג זה). כלומר, שימוש ב-System Objects מאפשר לכם להשתמש באלגוריתמים רבים אשר לא זמינים עבורכם בדרכים אחרות !

להבדיל מפונקציות MATLAB, אשר הינן מסוג "y שווה לפונקציה של x", ה-System Objects מסוגלים לעבוד עם קלט משתנה (Streams) וכן מסוגלים לספק מידע על המצבים הפנימיים של הפונקציה. בכך הם מרחיבים את שפת MATLAB באופן המאפשר למדל מערכות דינמיות באמצעות שפה טקסטואלית, ומהווים מעין "גשר" המקשר בין MATLAB ל-Simulink. כמובן שאם כתבתם אלגוריתם ב-MATLAB העושה שימוש ב-System Objects, אתם מוזמנים לנסות להכניס אותו לתוך בלוק ה-MATLAB Function ב-Simulink על מנת לשלבו כחלק ממודל בסביבה הזו.

מבחינת ביצועים – נניח ואתם מעוניינים לבצע Edge Detection לפריימים השונים בסרטון וידאו. בעוד ששימוש בפונקציית edge בתוך לולאה העוברת בין הפריימים השונים יהיה כרוך בקריאה לאותה פונקציה בכל פעם מחדש (דבר אשר כרוך באיתחולים חוזרים ונישנים), עבודה עם אובייקט המערכת vision.EdgeDetector ומתודת step אמורה להיות יעילה יותר. בנוסף, כמה System Objects המשתייכים ל-Communications System Toolbox ול-Phased Array System Toolbox ניתנים להאצה על ידי שימוש ב-GPU (הכרטיס הגרפי של המחשב), תוך שינוי מזערי של הקוד הכתוב.  אם כך, System Objects אמורים להביא לקיצור זמני הריצה של אלגוריתמים ! 

System Objects עשויים להקל על אלה מכם המנסים לבצע סימולציות Fixed-Point בסביבת MATLAB, וכן על מי שמנסה להמיר בקלות קוד MATLAB לקוד C או HDL. כבר כיום יש תמיכה ביצירת קוד C/HDL מתוך מגוון System Objects - למשל, כל
ה-System Objects שבגרסת R2012b של ה-Communications System Toolbox נתמכים ליצירה אוטומטית של קוד C. בהקשר זה, חשוב לציין כי החל מגרסת R2011b יכול כל אחד לפתח System Objects משלו, אשר יוכלו להתממשק אל אלה שפיתחה MathWorks, והחל מגרסת R2012a ניתן להמיר לקוד C כאלה אובייקטי מערכת שהמשתמש פיתח.


System Objects הוא נושא שאני ממליץ לכל אחד להתחיל ללמוד אותו וליישם אותו, שכן כבר היום הם נכללים בחלק גדול מכלי MathWorks - פרט להיותם חלק ממשפחת ה-System Toolboxes (אותם ארבעה כלים שהוזכרו לעיל ואשר קיימים מגרסת R2011a), יש כיום אובייקטי מערכת גם בכלים Image Acquisition Toolbox (אובייקט המאפשר רכישת תמונה הנתמך ליצירה אוטומטית של קוד C) ו-HDL Verifier (אובייקט המאפשר לבצע סימולציות FPGA-in-the-loop תוך שימוש ב-MATLAB ו-FPGA בלבד). וכפי שנכתב קודם, MathWorks מתכוונת להמשיך לפתח את הנושא הזה בשנים הבאות.

לרשימת ה-System Objects בארבעת ה-System Toolboxes המוזכרים לעיל, לחצו על הקישורים הבאים:
DSP
Computer Vision
Communications
Phased Array

יום שני, 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? האם השתמשתם בפונקציות שבו או בממשק הגרפי שלו?

יום שני, 15 באוקטובר 2012

הבחירות כבר כאן | אפשר לבחור בין שתי טכנולוגיות של SimMechanics

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

אם אתם משלבים מערכות מכניות/אלקטרוניקה/בקרה או עובדים בתחום המכשור התעשייתי, בתעשייה הבטחונית, בתעשיית הרכב, בתחום המכשור הרפואי או בעולם הרובוטיקה - כדאי לכם להמשיך לקרוא. בגרסת R2012a בוצע עדכון משמעותי למוצר SimMechanics, ונוספה לו טכנולוגיה המהווה למעשה תחליף מלא לטכנולוגיה הישנה של המוצר הזה. כיום, מוצר זה כולל את שתי הטכנולוגיות, תחת שתי ספריות שונות, והמשתמשים יכולים לבחור באיזו גרסה לעבוד (השמות שלהן הם 1G עבור הטכנולוגיה הישנה ו-2G עבור החדשה). פוסט זה יעסוק בעיקר בטכנולוגיה החדשה.

רק רגע, מה זה בכלל ה-SimMechanics הזה?

SimMechanics הוא חלק מכלי המידול הפיסי של MathWorks, ואחד מהכלים הותיקים שלה (משנת 1996 לערך). מטרת המוצר הזה היא להקל על מידול וסימולציה של מערכות מכניות קשיחות תלת-מימדיות. הדוגמה הפשוטה ביותר היא זרוע רובוטית – כלומר מספר חלקים מכניים המחוברים ביניהם במפרקים סיבוביים – היכולה לנוע במרחב התלת-מימדי. SimMechanics מאפשר לאפיין את החלקים השונים (מסה, אינרציה ותכונות מכניות אחרות), את צירי החופש והתנועה (סיבוב, תנועה קווית, בורג וכו'), את הסביבה (גרביטציה למשל) ואת האינטראקציה עם הסביבה (כוחות המופעלים על החלקים, חיכוך/שיכוך ועוד). והיתרון הגדול ביותר של SimMechanics הוא שהכלי מאפשר למתכנן להתמקד ב"בעיה" ולא ב"מתמטיקה". כלומר במקום לכתוב הרבה נוסחאות – פשוט גוררים בלוקים, מחברים אותם ולבסוף מריצים את הסימולציה, וכל המשוואות נפתרות בעזרת המנוע של SimMechanics "מאחורי הקלעים".

למה MathWorks הוסיפה טכנולוגיה חדשה לכלי?

הטכנולוגיה הישנה פותחה בצורה מאד בעייתית, שהקשתה על הוספת יכולות ומודולים חדשים שביקשו המשתמשים בכלי (ויזואליזציה טובה יותר, יכולות של שילוב גופים גמישים, הוספת מתמטיקה של "התנגשויות" בין חלקים וכו'). לאנשי הפיתוח של MathWorks לקח הרבה זמן לעשות אפילו שדרוג קטן במוצר, ולכן במקום להמשיך ולהשקיע את הזמן הזה, הוחלט לעשות "cut" ולהחליף את כל המנוע המתמטי במנוע חדש, אשר נעזר בטכנולוגיה של Simscape – התשתית לכל כלי המידול הפיסי של MathWorks.

מה החידושים בטכנולוגיה החדשה?

• הגדרה פשוטה ונוחה יותר של גופים - יש מגוון של גופים מוכנים (גליל, אליפסה, כדור וכו').

• חישוב מסה ואינרציה בצורה אוטומטית ופשוטה.

• המערכת רצה חלק ומהר יותר.

• הגדרה של צירים ותנועה יכולה להיעשות ישירות באמצעות MATLAB – לרבות שילוב של "קדחים" בגוף. הדבר מאפשר יכולות הקיימות בתוכנות תיב"מ (במידה ואין אחת זמינה).

• חיבור גופים בסיסיים ליצירת אחד חדש, ללא שימוש ב"ריתוך" ביניהם. אין צורך להגדיר משוואות.

• אנימציה משופרת באמצעות ה-Mechanics Explorer, אשר בין יתרונותיה:
.     o מספר Views שונים בו-זמנית.
.     o האנימציה נשמרת ללא צורך בהרצה חוזרת של המודל.
.     o אפשר לשלוט על מהירות העדכון של האנימציה, אפשר לעשות Rewind, להריץ צעד-צעד וכו'.
.     o שמירה של סרטונים.
.     o "עץ גרפי" של חיבור החלקים וכיצד הם משוייכים אחד לשני, המזכיר את ה-Browser של Windows.

• שמירה אוטומטית (Logging) של כל הנתונים של ריצת הסימולציה, ללא חיבור חיישנים וסנסורים!

• דרגות החופש (ה-Joints) מכילות כבר בתוכן את החיישנים, ולכן אין צורך בהרבה בלוקים חיצוניים.

• ניתן לחבר בין בלוקים של הגרסה הישנה לבלוקים של הגרסה החדשה – עם כמה מגבלות.

מה המגבלות בהשוואה לגרסה הקודמת?

נכון לגרסה השניה של הטכנולוגיה החדשה (זו שנכללת בגרסת R2012b של כלי MathWorks) מרבית היכולות הקיימות בטכנולוגיה הישנה קיימות גם בחדשה. בגרסה השניה, למשל, ניתן כבר לייצר קוד C מתוך המודלים (באמצעות ה-Simulink Coder) ואף ניתן לייבא מודלים מתוך תוכנת תיב"מ (כמו SolidWorks).

עם זאת עדיין יש מספר חוסרים:
1. מגוון נמוך יותר של Joints (דרגות חופש).
2. לא ניתן להגדיר תנועה, ואז לפתור את הבעיה ההופכית, אלא רק להפעיל באמצעות כוחות.
3. אין שיטה אוטומטית לשדרוג מודלים מהטכנולוגיה הקודמת לחדשה, אך אנשי הפיתוח עובדים על כך.

 לסיכום, יותר מאי פעם, השימוש ב-SimMechanics מאפשר כעת:

• חסכון אדיר בזמן – במקום לכתוב משוואות ניתן פשוט לחבר חלקים.

• יבוא מודלים קיימים מתוכנת תיב"מ, לשם יצירת מודל מערכתי רחב יותר, הכולל גם מערכות אלקטרוניות ומערכות בקרה.

• שימוש חוזר במודלים שפותחו בעזרת כלי זה.

• ויזואליזציה מדהימה המאפשרת לראות בדיוק מה קורה בכל שלב נתון.

• בחירה בין שתי טכנולוגיות שונות.

• חיבור פשוט ל-MATLAB, Simulink ו-Simscape.

• אפשרות למקבל סימולציות, להשתמש בסקריפט לשינוי פרמטרים ולייצר קוד C מתוך המודלים.


האם אתם משתמשים ב-SimMechanics ? אם כן, האם כבר עברתם לטכנולוגיה החדשה ?

יום רביעי, 3 באוקטובר 2012

בעזרת השם | על השינויים בשם החברה המפתחת את MATLAB ובלוגו שלה לאורך השנים

בחודש שעבר העברתי הרצאה בנושא MATLAB באחד מהמוסדות האקדמים המובילים בארץ, ולאחר מכן התפניתי לשוחח עם כמה מהמשתמשים במשרדים שלהם במטרה לסייע להם לייעל את מחקריהם. באחת מאותן שיחות, נדדו לפתע עיני אל מרומי ארון הספרים שהיה במשרד, שם זיהיתי פרטי אספנות יקרי ערך – חוברות ישנות במיוחד של חברת MathWorks. למעשה, בתקופה שבה אותן חוברות יצאו לאור, שם החברה לא היה MathWorks, וגם לא השם שקדם לשם זה (The MathWorks), אלא שם ישן יותר – The Math Works (שלוש מילים, או ארבע אם אתם סופרים את ה-Inc).

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

שימו לב, למשל, למדריכי המשתמש בכלים Image Processing Toolbox
MATLAB Compiler ו- Partial Differential Equation Toolbox (האחרון עוד באריזתו המקורית!). הנה התמונות :

ולאור השקתו של MATLAB 8 בחודש שעבר והסקירה שפורסמה בבלוג זה על הפיצ'רים החדשים במשפחת כלי MATLAB, מה תגידו על החוברת המתארת את הפיצ'רים החדשים במשפחת כלי MATLAB בגרסה 5.2, אשר ישנה בכ-20 גרסאות מזו החדשה?
פריט ארכיוני זה כמובן שרק עודד אותי להמשיך ולחטט (ברשות המארחים, כמובן...), וכך מצאתי גם את החוברת המכילה את הפי'צרים החדשים בגרסה 4 (!) של תוכנת MATLAB, הנה התמונות:

חדי העין מביניכם ודאי הבחינו בשתי התמונות האחרונות בהבדלים בין הממברנות בשני הלוגואים השונים של חברת MathWorks. למעשה, לשני סוגי הממברנה הללו קדמו שני סוגים אחרים, כפי שניתן לראות בתחתית סקירה שהכין ד"ר Cleve Moler, האדם שהמציא את תוכנת MATLAB, אשר משמש כיום כמתמטיקאי הראשי של החברה. היה לי את הכבוד לפגוש את האיש הזה מספר פעמים, האחרונה שבהן לפני כשנתיים, ואני חושב שכל משתמש MATLAB סנטימנטלי כמוני יהנה מקריאת הסקירה הנ"ל, המתארת את קורותיה של חברת MathWorks מימיה הראשונים, או בעצם את קורותיה של חברת The Math Works...

האם יש ברשותכם ספרות עתיקה יותר של MATLAB מזו שמופיעה למעלה? מאיזו שנה אתם משתמשים ב-MATLAB ?


יום ראשון, 16 בספטמבר 2012

MATLAB 8 ו-Simulink 8 כבר כאן !

כידוע, מזה מספר שנים חברת MathWorks משחררת גרסת מוצרים חדשה פעמיים בשנה במועדים קבועים, ובשבוע שעבר שוחררה אחת מהגרסאות המשמעותיות ביותר של MATLAB ו-Simulink. אחרי 14 גרסאות לפלטפורמת MATLAB 7 ו-9 גרסאות לפלטפורמת Simulink 7, שתי הסביבות קיבלו בגרסת R2012b ממשק מודרני הצפוי לייעל את תהליכי העבודה של כל משתמש ומשתמשת. ופרט ל-MATLAB 8
ו-Simulink 8, נוספו יכולות חדשות למגוון הכלים האחרים של MathWorks.

בין היכולות החדשות במשפחת מוצרי MATLAB:
  • MATLAB - שולחן עבודה (Desktop) חדש, אשר בחלקו העליון toolstrip הכולל לשוניות (Tabs) אשר נמצאות בו תמיד (גלובליות) או נפתחות רק כתוצאה מביצוע פעולה מסוימת (המטרה הינה לפתוח אופציות נוספות רק כאשר הן באמת רלוונטיות). בתוך כל לשונית יש sections שונים, ובתוכם לחצנים (controls) אשר ניתן להוסיפם ל-Quick access toolbar המופיע מעל ה-toolstrip (וכך לבצע פעולות נפוצות באמצעות קליק אחד של עכבר). לחצו לסרטון קצר בנושא ה-Desktop החדש, או קראו פוסטים באנגלית בנושא (קישור 1, קישור 2)
    אחת מהלשוניות המעניינות הינה גלריית ה-Apps, אשר כוללת אפליקציות אינטראקטיביות המגיעות כחלק מהכלים השונים של MathWorks, מאתר שיתוף הקבצים או מקולגות, ואשר מאפשרת אריזת אפליקציות אותן המשתמש בונה והעברתן בקלות למשתמשים אחרים. לחצו לסרטון בנושא התקנת ואריזת אפליקציות, או קראו פוסט באנגלית בנושא.
    ה-Help המעולה של MathWorks עבר שינוי גדול כדי לשפר עוד יותר את חווית המשתמש. הממשק שלו מזכיר כעת דפדפן אינטרנט, והוא מקל על ביצוע שאילתות ומאפשר הצגה של מספר עמודי תיעוד בלשוניות נפרדות. שימו לב שניתן לבצע חיפוש בתיעוד גם באמצעות חלון החיפוש הנמצא ליד ה-Quick access toolbar. לחצו לסרטון בנושא ה-Help החדש.
    ולסיום, נוספה ל-MATLAB יכולת להציע תיקונים לטעויות הקלדה של שמות פונקציות ומשתנים ב-Command Window. לחצו לסרטון בנושא, או צפו בתיקונים לשם הפונקציה ושם המשתנה בדוגמה למטה, בה ניתן להתרשם גם מה-Desktop החדש (ה-Quick access toolbar מוקף באליפסה).


  • MATLAB Coder - לכלי המאפשר יצירה אוטומטית של קוד C מתוך MATLAB נוספה יכולת להעריך עד כמה יהיה קל להמיר באמצעותו קוד MATLAB מסויים לקוד C. לחצו לתיעוד בנושא הפקודה הרלוונטית.
    הכלי תומך כעת בפונקציית parfor לצורך ייצור קבצי MEX המסוגלים להשתמש במספר ליבות.
    ולסיום, רשימת הפונקציות וה-System Objects הנתמכות על ידי הכלי הורחבה, ונוספו כאלה מהכלים Image Processing Toolbox
    Computer Vision System Toolbox, DSP System Toolbox ו- Communications System Toolbox (כל ה-System Objects שבו נתמכים כעת).
  • Computer Vision System Toolbox - לכלי המקל על פיתוח מערכות ראיה ממוחשבת ועיבוד וידאו ותמונה נוספו אלגוריתמים לעקיבה אחר מספר אובייקטים ומתן הסבר (Annotation) לגבי האובייקטים המאותרים.
    בנוסף, הכלי כולל כעת את אלגוריתם KLT לעקיבה אחר פיצ'רים ותומך בגילוי אנשים מבוסס HOG.
  • Image Processing Toolbox - הביצועים של מספר פונקציות בכלי שופרו, והוא גם כולל כעת פונקציות חדשות לחישובי גרדיאנט בתמונה והתאמת היסטוגרמות. בנוסף, לפונקציה imregister, שהתווספה לכלי בגרסה הקודמת, נוספה תמיכה ברגיסטרציה מבוססת-עוצמה בתלת-מימד (RGB).
  • DSP System Toolbox - לכלי המקל על תכנון וסימולציה של מערכות עיבוד אות נוסף System Object המאפשר לצפות בספקטרום ההספק או בצפיפות ההספק הספקטרלי.
  • Parallel Computing Toolbox - מזה שנתיים ניתן להאיץ את ביצועי MATLAB על ידי שימוש בכרטיס הגרפי (GPU) של המחשב. בגרסה החדשה התווספו עוד פונקציות המסוגלות לרוץ על ה-GPU, ושופרו הביצועים של חלק מאלה שכבר יכלו לעשות זאת. בין היתר, מספר פונקציות / System Objects מהכלים
    Neural Network Toolbox, Phased Array System Toolbox
    ו-Signal Processing Toolbox ניתנות כעת להאצה באמצעות ה-GPU, וזאת בנוסף לאלה שכבר נתמכו מתוך ה-Communications System Toolbox.
  • HDL Coder - לכלי המאפשר המרה אוטומטית של קוד MATLAB ומודלי Simulink ל-HDL נוספה תמיכה ביצירת קוד HDL ממגוון System Objects מתוך ה-Communications System Toolbox.
  • HDL Verifier - הכלי המשמש לוריפיקציה של קוד HDL מכיל כעת System Object המאפשר לבצע סימולציות FPGA-in-the-loop תוך שימוש ב-MATLAB ו-FPGA בלבד.
  • כלים חדשים - למשפחת כלי MathWorks נוספו שני כלים חדשים. ה-Financial Instuments Toolbox הינו כלי המאגד את יכולות ה-
    Fixed-Income Toolbox וה-Financial Derivatives Toolbox.  ה-MATLAB Production Server הינו כלי להרצת תוכניות MATLAB כחלק מישומי אנטרפרייז, מאגרי מידע ורשת.

בין היכולות החדשות במשפחת מוצרי Simulink:
  • Simulink - התוכנה כוללת כעת עורך (Editor) חדש המקל על צפיה במודלים, ניווט ועריכה. התפריטים בעורך החדש מסודרים בהתאם לפרדיגמת Model-Based Desgin (דבר אשר שם סוף למצב בו תפריט tools מכיל כמעט את כל האפשרויות...). ניתן כעת לסמלץ מודל צעד-אחר-צעד, לחזור אחורה בזמן הסימולציה ולהוסיף breakpoints התלויים בערכו של סיגנל. פיצ'ר חדש מאפשר חיבור חכם בין בלוקים המוצא את הנתיב הפשוט ביותר ביניהם שאינו כרוך בהסתרות של בלוקים אחרים או טקסט כלשהו. פיצ'ר נוסף הינו תגים (Badges) המספקים אינדיקציות גרפיות לגבי בלוקים וסיגנלים. ניתן כעת להציג בלשוניות (Tabs) שונות באותו חלון מספר תת-מערכות או מבטים שונים על אותו מודל (למשל, ברמות zoom שונות). העורך כולל Explorer bar המקל על ניווט ברמות היררכיה שונות במודל (לחצו לסרטון בנושאים Tabs ו-Explorer bar). ניתן כעת להתעלם מבלוק מסויים בזמן הסימולציה (מאפשר לבחון וריאציות שונות של אותו מודל או להאיץ את הסימולציות על ידי כיבוי של בלוקי תצוגה). מגרסה זו של הכלי ניתן גם לשנות את גודלו של בלוק תוך שמירה על הפרופורציה בין גובהו ורוחבו (על ידי לחיצה על Shift) וכן ניתן לשנות את גודלו של בלוק סביב מרכז הבלוק (לחיצה על Ctrl), לחצו לפוסט באנגלית בנושא.
    הכלי כולל כעת שני Advisors - יועץ המנתח את המודל ומספק עצות לשיפור ביצועי הסימולציה, ויועץ המסייע לשדרג מודלים ישנים לעבודה בגרסה העדכנית.
    ולסיום, פורמט ברירת המחדל לשמירת קבצים הינו slx (להבדיל מ-mdl, אשר עדיין קיים), אשר חוסך מקום בזיכרון, מספק מידע רב למערכות הצגת קבצים וחוסך בזמן בישומים מסוימים (הפורמט הושק בגרסה הקודמת, אולם לא היה ברירת המחדל). שימו לב גם שאופציות ה-zoom וה-panning מתאפשרות החל מגרסה זו בדרכים אחרות מבעבר (zoom על ידי גלגול גלגלת העכבר קדימה או אחורה, או על ידי
    ++Ctrl או -+Ctrl; הצגת המודל כולו באמצעות 1+Alt או מקש הרווח (כבעבר); ניתן לבצע את שתי הפעולות האחרונות גם באמצעות הלוחית האנכית (בצד שמאל של חלון המודל); panning על ידי לחיצה על גלגלת העכבר והזזת העכבר או על ידי מקש הרווח + לחצן שמאלי בעכבר (והזזת העכבר). לחצו לקריאת פוסט באנגלית בנושא או לקריאת עמוד תיעוד בנושא).
    בדוגמה למטה ניתן להתרשם מהעורך החדש - הן מסידור התפריטים, והן מהלחצנים המאפשר לחזור אחורה בזמן הסימולציה או לסמלץ את המודל צעד-אחר-צעד (מוקפים בעיגולים העליונים), מה-Explorer bar (עיגול אמצעי, ומשמאלו - לוחית ה-zoom) ומ-badge לדוגמה (עיגול תחתון).

  • Stateflow - העורך של הכלי למידול וסימולציה של לוגיקה משולב כעת כחלק אינטגרלי מהעורך של Simulink. ניתן כעת להשתמש בשפת MATLAB על מנת להגדיר תנאים ופעולות ב-Stateflow (המערכת תשנה את הסינטקס לזה המקובל). ולסיום, נוספה היכולת לבנות Structured Logic באמצעות State Transition Tables.
  • SimMechamics - לכלי המקל על מידול וסימולציה של מערכות מכאניות הצטרפה בגרסה הקודמת טכנולוגיית דור 2. לטכנולוגית דור 2 זו הצטרפה בגרסה החדשה תמיכה ליצירה אוטומטית של קוד C (באמצעות ה-Simulink Coder) וליבוא של מודלי CAD (למשל מתוכנת SolidWorks).

היכולות שהוצגו לעיל הן רק חלק מאלה שנוספו בגרסה החדשה. למידע מלא על הגרסה החדשה, בקרו בעמוד גרסת R2012b באתר MathWorks.
מה דעתכם על הגרסה החדשה? כמה זמן לקח לכם להתרגל אליה? האם היא חוסכת לכם זמן? מאיזה פיצ'ר התלהבתם במיוחד?

 

יום ראשון, 2 בספטמבר 2012

גלריית הגרפים של MATLAB

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

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

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

וספויילר קטן – בגרסת ה-MATLAB הקרובה, גרסה 8.0, ה-MATLAB Plot Gallery מתוכננת להיות משולבת כחלק מתוך ה-Desktop של MATLAB, מתוך כוונה להקל עוד יותר על חיי המשתמשים בתוכנה. על החידושים העיקריים בגרסה החדשה – בפוסט הקרוב של רועי.

האם גיליתם בגלריה צורת תצוגה שלא ידעתם שקיימת ב-MATLAB או שלא ידעתם כיצד לקבל אותה? האם יש לכם גרף מיוחד שתרצו להראות לנו?
 

יום שלישי, 21 באוגוסט 2012

כלי כלי

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

באילו מהכלים המופיעים במסמך אתם משתמשים? האם הופתעתם לגלות כלים שלא חשבתם שקיימים?

* המסמך מעודכן נכון לגרסת R2012a, וכמו שאומרים - טעות לעולם חוזרת...

יום ראשון, 5 באוגוסט 2012

יש לך רפרנס? | על Model Referencing בסביבת Simulink

הפוסט הנוכחי יעסוק, לשם שינוי, ב-Simulink. וליתר דיוק – בפיצ'ר שלו שנקרא Model Referencing. למרות שהוא לא חדש (קיים מאז גרסת R14), לא הרבה מודעים לפיצ'ר הזה, וזכורה לי היטב הרצאה שהעברתי לפני מספר שנים בפני מאות משתמשי MATLAB ו-Simulink, במהלכה סיפרתי על החידושים בגרסאות האחרונות של הכלים ועמדתי לספר על החידושים בפיצ'ר הנ"ל. רגע לפני שהתחלתי לספר על החידושים ב-Model Referencing, ביקשתי מהנוכחים שמכירים את הפיצ'ר להרים יד, ומתוך מאות אנשים, רק שתי ידיים הורמו. וכך, מצאתי את עצמי מסביר מה זה בכלל Model Referencing, במקום להסביר מה התחדש בו.

באופן כללי, Model Referencing מאפשר לכלול מודל בתוך מודל אחר, באמצעות בלוק ייעודי. המודל אשר אליו עושים Referencing מכונה Referenced Model, ואילו זה שמכיל אותו נקרא Parent Model.

כבר כעת ברור שכמו פיצ'רים אחרים, גם הפיצ'ר הנ"ל מאפשר מימוש של היררכיה ב-Simulink. אך ל-Model Referencing מספר יתרונות אשר לא קיימים בפיצ'רים אחרים של Simulink. למשל:
1. ניתן לפתח Referenced Model ללא תלות ב-Parent Model (המודל שקורא לו), כך שמספר קבוצות יכולות לעבוד במקביל על חלקים שונים של מודל האב.
2. הגנה על המודל – ניתן להפיץ את ה-Referenced Model מבלי שלמשתמש הקצה תהיה גישה ל-IP שעומד מאחוריו.
3. ניתן לעשות Referencing לאותו Referenced Model מספר פעמים מאותו Parent Model, תוך הצבת ערכים שונים עבור הפרמטרים ב-Referenced Model. בנוסף, מספר Parent Models יכולים לבצע Referencing לאותו Referenced Model
4. טעינה אינקרמנטלית – טעינת מודל האב מהירה, שכן Referenced Model נטען רק כאשר באמת נדרש להשתמש בו.
5. סימולציות מהירות – Simulink מסוגל להמיר Referenced Model לקוד C ולהשתמש בקוד זה בעת הרצת הסימולציה, דבר אשר מאיץ את הסימולציה. על מנת למנוע ייצור מיותר של קוד, הקוד יווצר מחדש רק אם ה-Referenced Model השתנה.
6. סט קונפיגורציה – ניתן להגדיר הגדרות סימולציה שונות לכל אחד מה-Referenced Models וה-Parent Model
7. ניתן להאיץ תהליכי עבודה העושים שימוש ב-Model Referencing באמצעות ה-Parallel Computing Toolbox.

למידע נוסף, צפו בסרטונים הבאים באתר MathWorks
1. סרטון 1
2. סרטון 2

מקווה שהצלחתי לעניין אתכם בפיצ'ר הזה, ושבפעם הבאה בה אשאל בכנס כמה מהנוכחים יודעים מה זה Model Referencing, אראה יותר ידיים למעלה.

אז כמה מכם ידעו מה זה Model Referencing לפני הפוסט הזה? וכמה מכם השתמשו בו? והאם אחרי הפוסט הוא נראה לכם שימושי יותר?

יום שני, 23 ביולי 2012

A Guide to GUIDE | פיתוח ממשקים גרפיים ידידותיים למשתמש בעזרת MATLAB

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

את ה-GUI המיוחד המשמש לפיתוח GUIs מעלים באמצעות פקודת guide ובחירה באופציה של Blank GUI (ברירת המחדל). לצורך הדוגמה, אפתח בעזרת ה-GUI המיוחד GUI בו יוצגו 10 מספרים אקראיים (מפולגים אחיד בין 0 ל-1) באמצעות גרף, בכל פעם בה המשתמש ילחץ על לחצן ייעודי. על מנת להגדיר את השטח בו יוצג הגרף, יש לבחור בלחצן ה-Axes ב-GUI המיוחד, ולצייר מרובע על משטח העבודה. על מנת למקם לחצן ייעודי אשר לחיצה עליו תביא להצגת הגרף בשטח שהוגדר, יש להכניס למשטח העבודה לחצן שכזה (על ידי בחירה בלחצן Push Button וציור מלבן על משטח העבודה).

ניתן לשנות בקלות את גודל ה-GUI, צבע הרקע או הכיתוב על הלחצן. למשל, לצורך ביצוע המשימה האחרונה, יש להקליק על הלחצן פעמיים עם העכבר, ולשנות את השדה String (אני שיניתי ל-Push here to display plot). התוצאה בינתיים נראית כך:


כעת, כל שנותר הוא ללחוץ על לחצן ה-play הירוק (מופיע בצד ימין בשורה העליונה), לאשר את ההודעה הקופצת אל המסך (אחרי קריאתה...) ולתת שם ל-m file שיווצר ויכיל את הפקודות אשר בעבר הייתם חייבים לכתוב ידנית לצורך קבלת GUI דומה.

כפי שתשימו לב, ה-GUI שקיבלתם בהחלט נראה כמצופה, אבל לא ממש מתפקד. על מנת שלחיצה על לחצן ה- Push here to display plot תביא להצגת הגרף, יש להגדיר ללחצן זה מה אמור להתבצע כאשר לוחצים עליו. חיזרו ל-GUI המיוחד, הקליקו עם המקש הימני של העכבר על הלחצן, וביחרו ב-View Callbacks ואז ב-Callback. תוצאת פעולה זו היא מיקום של הסמן בקוד ה-MATLAB שנוצר לא מזמן, בדיוק בשורה שמתחתיה יש לכתוב את הקוד שצריך להתבצע בעת לחיצה על הלחצן. במקרה שלנו:
plot(rand(10,1));

כעת, אם תריצו את קוד ה-MATLAB (באמצעות F5), תקבלו שוב את ה-GUI, אך הפעם הוא גם יתפקד כהלכה:


זו היתה דוגמה בסיסית לקלות בה ניתן היום לפתח GUIs בסביבת MATLAB. דוגמאות שימושיות נוספות ניתן למצוא בקישור הזה. לסיום, אציין כי באפשרותכם לקמפל את ה-GUI שפיתחתם ולהעביר אותו למחשבים אשר אין בהם התקנה של MATLAB (וזאת באמצעות כלי שנקרא MATLAB Compiler).

האם אתם מפתחים GUIs באמצעות GUIDE או באמצעות פקודות? האם יש GUI משוכלל שפיתחתם ותרצו להשוויץ בו?

יום ראשון, 1 ביולי 2012

גילוי פנים בעזרת MATLAB

בגרסת R2011a של כלי MathWorks נוסף למשפחת המוצרים כלי חדש – Computer Vision System Toolbox, או בקיצור - CVST. כלי זה משמש לתכנון וסימולציה של מערכות ראיה ממוחשבת ועיבוד וידאו, באמצעות שלוש דרכים:

1. בלוקים לעיבוד וידאו וראיה ממוחשבת בסביבת Simulink – מדובר למעשה בבלוקים שהרכיבו את הכלי שנקרא בעבר Video and Image Processing Blockset
2. סיסטם אובג'קטס - אשר מאפשרים גישה לחלק משמעותי מאותם הבלוקים המוזכרים לעיל, אך ללא צורך ברישיון Simulink או בידע בעבודה עם Simulink
3. אלגוריתמים יעודיים חדשים לראיה ממוחשבת

דוגמה למרכיב השלישי של ה-CVST הובאה בפוסט של אריאל מלפני חודש, ולכן אתמקד היום במרכיב אחר – המרכיב השני.

System Objects קיימים ב-MATLAB כבר מאז R2010a, ונידונו כאן בעבר. אחד מה-System Objects החדשים שנוספו בגרסת R2012a של ה-CVST הוא ה-CascadeObjectDetector, המאפשר לבצע גילוי פנים באמצעות אלגוריתם Viola-Jones. שימו לב שלא מדובר בזיהוי פנים, אלא בגילוי פנים (יודעים שיש פנים בתמונה, לא יודעים של מי הפנים). בנוסף, חשוב להדגיש שהאלגוריתם גם יכול לסייע במציאת אלמנטי גוף אחרים, שאינם פנים – למשל: עיניים, אף, פה או פלג גוף עליון.

האלגוריתם ממומש בצורה של System Object על מנת שיוכל לאפשר גילוי של פנים בסדרת תמונות או בסרט וידאו, ולא רק בפריים בודד. כפי שניתן לראות בדוגמה, הפלט של הפעלת האלגוריתם (באמצעות המתודה step) על גבי תמונה (של חברי הצוות שפיתח את ה-CVST) הינו מערך של bounding boxes – ריבוע סביב כל פנים שזוהו בתמונה. ואת הריבועים הללו ניתן לצייר על התמונה באמצעות ה-System Object של ShapeInserter.

קוד המדגים גילוי פנים (לחצו להגדלה)

חשוב להדגיש שהחל מגרסת R2012a, הכלי היחיד (פרט ל-MATLAB) שנדרש לצורך הפעלת ה-CVST הוא ה-Image Processing Toolbox (עד אז היה צורך גם ב-DSP System Toolbox וב-Signal Processing Toolbox). למידע נוסף על יכולות עיבוד הוידאו בסביבת MATLAB באמצעות ה-CVST, ה-Image Processing Toolbox וה-Image Acquisition Toolbox, לחצו לצפיה בסרטון של 5 דקות.

ואפרופו גילוי פנים – נחשפתי לאחרונה לכתבה נחמדה בנושא הדרכים להתחמקות מגילוי הפנים שלכם על ידי הטכנולוגיות הקיימות.

האם ידעתם על היכולת לבצע גילוי פנים באמצעות ה-CVST? האם בכלל הכרתם את ה-CVST?

יום ראשון, 17 ביוני 2012

ייצור אמוניה באמצעות Simulink | שימוש בסביבת סימולציה לתכנון, בדיקה ומימוש של מערכות בקרה לתעשיה התהליכית

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

למעלה מ-20 שנה Simulink משמשת מהנדסי בקרה לתכנון אופטימלי של מערכות, ביצוע אינטגרציה לפני יצור של מרכיביהן השונים ואף ייצור קוד בצורה אוטומטית לבקרים ייעודים.

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

באמצעות דוגמא זו ניתן לראות כיצד סביבת הפיתוח של Simulink מאפשרת תכנון של מערכות דינמיות מורכבות, זיהוי פרמטרים של רכיבי המערכת מתוך מידע מדוד, ביצוע כיוונון אוטומטי של בקרים (Auto-Tuning), בדיקת ביצועי המערכת הכוללת הן את המרכיבים הפיסיים והן את מערכת הבקרה והמשוב, ולבסוף - ייצור קוד המותאם להרצה על בקרי PLC או DSP.

היכנסו וקראו כיצד ניתן להשתמש בסביבת סימולציה לצורך תכנון, בדיקה ומימוש של מערכות בקרה לתעשיה התהליכית.

האם ידעתם כי המילה העברית לאמוניה הינה "נַשְׁדּוּר"? והאם ידעתם שניתן לייצר בצורה אוטומטית קוד לבקרי PLC מתוך MATLAB ו-Simulink?

יום ראשון, 3 ביוני 2012

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


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

הMapping Toolbox-  הינו כלי המשלב בין העולם המעניין של מיפוי ומידע גיאוגרפי, לבין היכולות החזקות של MATLAB  לביצוע אנליזות מהירות והצגה קלה של נתונים. באמצעות הכלי קל לקרוא ולהציג מפות בפורמטים שונים (shapefile, GeoTIFF, DEM ועוד), לבצע הצגות רב-שכבתיות, לבצע אנליזות מתמטיות על המידע הגיאוגרפי (חישובי קו ראיה, שטחי כיסוי ועוד) ובשילוב עם כלים נוספים מבית MathWorks - אפילו לבצע הצגה וירטואלית תלת-מימדית של מפות או לערוך רגיסטרציה של תמונות.

תמונה 1.  חלק מיכולות ה- Mapping Toolbox (מימין לשמאל – הצגה תלת מימדית של מפת גובה, מפה רב שכבתית, מציאת קו ראיה ושטח כיסוי)

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

החלק המורכב והקשה ביותר בתהליך המתואר לעיל הינו מציאת נקודות תואמות בתמונה ובמפה. ניתן לבצע זאת באופן ידני על ידי התבוננות וסימון נקודות זהות בתמונה ובמפה כפי שמודגם בדוגמה המגיעה עם הכלי (Georeferencing an Image to an Orthotile Base Layer), המשתמשת בפקודה cpselect מתוך ה- Image Processing Toolbox.


תמונה 2. מציאת נקודות עניין זהות באופן ידני על ידי שימוש ב cpselect
(התמונה משמאל, המפה מימין)


 
למרות שהתוצאות באמצעות השיטה הידנית מצויינות, השיטה אינה עומדת במבחן התרחיש המציאותי בו מתקבל סרט וידיאו בקצב גבוה ויש לבצע רגיסטרציה אוטומטית ללא מגע אדם. במקרה זה רצוי להפעיל אלגוריתמים אוטומטיים של ראיה ממוחשבת למציאת נקודות עניין, ואחת מהשיטות בקטגוריה זו היא להשתמש באלגוריתם SIFT (scale invariant feature transform). אלגוריתם זה עובד בשיטה של "טשטוש" התמונה בסקלות שונות ומציאת סקלת הטשטוש והמיקום בתמונה בהם העצם עובר טשטוש לכדי כתם יחיד עם עוצמה ההולכת ודועכת ממרכזו. לדוגמה, במבט מקרוב על כדור הארץ ניתן להבחין בפרטים כמו יבשות, הרים וימים, אך אם נטשטש את התמונה בשלבים לבסוף נקבל כתמים חומים באזורי היבשה וכתמים כחולים באזורי הים. מרכזו של כל כתם חום יהיה מרכז של יבשת (שהוא בעצם מרכז נקודת העניין) ואילו המעגל התוחם את הכתם יגדיר סקלה של גודל הכתם (תחום העניין). כדי לתאר את "אופיה" של כל נקודת עניין מחלקים את תחום העניין לרשת של 4x4 ומחשבים היסטוגרמות של גרדיאנטים עבור כל נקודה ברשת, כך שעבור כל נקודת עניין מתקבל תאור הכולל את מיקומה, תחום העניין שסביבה (סקלה) ותיאור (descriptor) בן 128 נתונים המתאר את פילוג הגרדיאנטים בתוך תחום העניין.

בגרסת R2011a של כלי MathWorks הצטרף כלי לביצוע משימות ראיה ממוחשבת
(Computer Vision System Toolbox), הכולל את אלגוריתם ה- SURF (speeded-up robust feature), שהינו אלגוריתם מהיר ושימושי יותר מאלגוריתם ה- SIFT. העבודה עם האלגוריתם מודגמת בקובץ mapReg_RANSAC.m, הניתן להורדה מכאן, והמוסבר להלן:


1) בשלב הראשון מתבצעת מציאה של נקודות עניין ותחומי עניין הן במפה והן בתמונה

תמונה 3. נקודות עניין + תחומי עניין בתמונה (למעלה) ובמפה (למטה). מרכזי המעגלים הם נקודות העניין והמעגלים עצמם הם תחומי העניין

2) בדרך כלל האלגוריתם מוצא נקודות עניין רבות. כדי למנוע התאמות שגויות, ומתוך מטרה להגביר את מהירות הריצה, נבחרות נקודות העניין בעלות הסקלות הגבוהות ביותר (מאות בודדות), אשר למעשה מייצגות עצמים גדולים יחסית (למשל אגמים, מבנים גדולים, צמתים גדולים וכדומה). הנקודות בעלות הסקלות הקטנות יותר מציינות עצמים קטנים יחסית (בתים קטנים, גינות וכדומה).

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

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

תמונה 4. נקודות עניין זהות בתמונה (למעלה) ובמפה (למטה)

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

תמונה 5. הטלה של התמונה על המפה


לאילו תמונות אתם מבצעים רגיסטרציה? האם הכרתם את ה-Mapping Toolbox לפני הפוסט הזה? ומה לגבי אלגוריתמי SURF ו-SIFT? האם השתמשתם בעבר בפקודת cpselect? האם ידעתם שקיים מימוש של אלגוריתם ה-SURF בתוך ה-Computer Vision System Toolbox?


יום רביעי, 16 במאי 2012

יש גם Event-ים מחוץ ל-Facebook | על בניית סימולציות למערכות בדידות באמצעות SimEvents


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


נניח שקצב ההגעה של אנשים לסניף בנק מתנהג כפילוג אקספוננציאלי בעל ממוצע של 5 דקות. כמה נותני שירות צריכים להיות בבנק בכדי להבטיח שמשך ההמתנה הממוצע לא יעלה על 10 דקות? ומה רוחב הסרט הנדרש בכדי להעביר חבילות תקשורת על קו Ethernet? שאלות אלו ורבות אחרות מצריכות ניתוח מעמיק באמצעות בנית סימולציה של אירועים בדידים.

בסימולציה של אירועים בדידים (Discrete Event Simulation) אופן הפעולה של מערכת מיוצג על ידי רצף כרונולוגי של אירועים אקראיים המביאים לשינוי במצב המערכת. בסימולציה כזו כל אובייקט במערכת מכיל נתונים הנוגעים להתנהגות המערכת, תפוקתה וכדומה, והסימולציה מאפשרת למדל ולנתח אילוצי משאבים, לנתב ישויות, למדל את הלוגיקה וההשהיות המשויכות לרכיבים במערכת ועוד.

SimEvents הינה הרחבה לתוכנת Simulink, המוסיפה לה יכולות למידול וסימולציה של מערכות בדידות – ספריית בלוקים עשירה ומנוע סימולציה המותאם למערכות בדידות. התוכנה נמצאת בשימוש על ידי מהנדסים ומתכננים בתחומים תעשיה וניהול, תקשורת, בקרה, תהליך ומערכות חומרה.

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



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


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


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


איסוף מידע סטטיסטי הינו אינהרנטי ב-SimEvents. ניתן לבצע ניתוח סטטיסטי בפשטות על ידי בחירה בכך בתוך הבלוקים של SimEvents. בין האפשרויות הקיימות ניתן למצוא משך המתנה, השהייה, קצב מעבר (ספיקה), אורך תור ממוצע ונצילות משאב (utilization). ובעזרת הקישור ל-Simulink ניתן לאפיין ולהוסיף כל אלמנט סטטיסטי אחר המעניין את המשתמש.

כפי שצוין לעיל, SimEvents פועלת על גבי סביבת Simulink, ולכן נהנית מכל היתרונות בעבודה עם Simulink ו-MATLAB – ממשק גרפי של דיאגרמות בלוקים, סביבה אינטואיטיבית נוחה לתפעול, מנוע מתמטי המבוסס על MATLAB, עבודה בצורה היררכית,  אפשרות לייצר דו"חות בצורה אוטומטית, אפשרות לחיבור לגרפיקה תלת-מימדית, אופציה להוספת יכולות ובלוקים, מינוף יכולות MATLAB כמו ניתוח סטטיסטי, ויזואליזציה של התוצאות, וכמובן הרצת תהליכים של אופטימיזציה על המערכת בכדי להגיע לנקודת עבודה יעילה. בעזרת MATLAB ניתן לבנות בפשטות ממשק גרפי למשתמש, בו הוא יזין את כל הפרמטרים הרלוונטיים לסימולציה. ניתן לייבא ולייצא נתונים מקבצים בפורמטים רבים – Excel, CSV, טקסט, Word ועוד. וניתן גם לחבר את הסימולציה למקורות מידע מקוונים, כמו שרתים המכילים מידע על מניות, מידע טמפרטורה, העברת חבילות מידע ברשת וכו'.

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

האם יש לכם צורך בכלי לסימולציה של אירועים בדידים? האם שמעתם על SimEvents? ואפרופו Events ו-Facebook - האם כבר עשיתם Like לקבוצת הפייסבוק למשתמשי MATLAB ו-Simulink בישראל?