יום חמישי, 9 במאי 2013

R2013a מחכה לכם !


בחודש מרץ שוחררה גרסה חדשה של כלי MathWorks, ראשונה מאז השקת MATLAB 8 ו-Simulink 8, והיא כוללת עדכונים ל-MATLAB  ו-Simulink, שני כלים חדשים, ושדרוגים + תיקוני באגים ל-82 כלים אחרים.

בין היכולות החדשות במשפחת מוצרי MATLAB:

* MATLAB – קל יותר לכתוב ולהריץ unit tests כדי לפתח קוד רובסטי יותר (קישור לסרטון, קישור לתיעוד); שיפורי ביצועים לפונקציות fft ו-permute; פונקציות חדשות לפיצול ואיחוד סטרינגים (strsplit, strjoin); מירקור מילות חיפוש בעמודי התיעוד שמוצגים כתוצאה מהחיפוש (ניתן לבטל את המירקור על ידי לחיצה על Esc); אפשרות לבצע פעולות כמו Zoom in ושמירה לתוך קובץ מתוך עמודי תיעוד (באמצעות הלחצן הימני של העכבר); טבלת תוכן עניינים המקלה על הניווט בעמודי התיעוד (פתיחה על ידי לחיצה על Contents בפינה השמאלית העליונה).

* Image Processing Toolbox אפשרות להמרה אוטומטית של 10 פונקציות נוספות על ידי ה-MATLAB Coder לקוד C  עבור PC; יכולת האצה של 11 פונקציות באמצעות כרטיס המסך (GPU) על ידי ה-Parallel Computing Toolbox; ביצוע סגמנטציה תוך שימוש ב-Active Contours.

* Parallel Computing Toolbox האצה של 11 פונקציות מעולם עיבוד התמונה באמצעות כרטיס המסך (GPU); תוספת פונקציות אחרות הניתנות להאצה באמצעות ה-GPU; יכולת להפעיל קוד CUDA  מתוך פונקציות MEX במערכות הפעלה מסוג  64 ביט.

* Image Acquisition Toolbox בכלי המאפשר הזרמת וידאו ותמונות ממגוון התקנים ישירות לתוך MATLAB ו-Simulink  נוספה תמיכה ברכישת תמונות ממערכת חישת-התנועה Kinect בסביבת Windows (קישור למידע נוסף, קישור לפוסט ישן יותר הקשור לנושא).

* Statistics Toolbox כולל כעת את פקודות ה-SVM לסיווג בינארי (svmclassify ו- svmtrain, אשר בעבר היו חלק מה-Bioinformatics Toolbox).

* Trading Toolbox כלי חדש המאפשר גישה לשערים של מכשירים פיננסים ושליחה אוטומטית של פקודות למערכות מסחר בזמן אמת (קישור לעמוד הכלי).

* MATLAB Distributed Computing Server בכלי המאפשר להאיץ ביצועים של תוכניות MATLAB ומודלי Simulink על ידי אשכול מחשבים (Cluster), ענן (Cloud) או מחשוב שריגי (Grid) – התווספו workers לבעלי רישיונות לכלי (ללא תשלום נוסף). לקוחות חדשים יוכלו להינות ממחירים מוזלים על חבילות ה-workers השונות.

בין היכולות החדשות במשפחת מוצרי Simulink:

* Simulink – שדרוג יועץ הביצועים (Performance Advisor) המראה כיצד ניתן לשפר את מהירות הסימולציה; ביצועי סימולציה משופרים למקרה בו בוחרים באפשרות לחזור אחורה בזמן הסימולציה; אפשרות להחלפת סדר ה-Tab-ים בחלון המודל (ע"י גרירת Tab-ים למיקומים הרצויים); אפשרות לבצע masking לבלוק ה-MATLAB Function בצורה ישירה (אין עוד צורך להכניסו לתוך תת-מערכת); תמיכה built-in בחומרותRaspberry Pi  ו- Gumstix Overo (בנוסף לתמיכה שהיתה קיימת ב-Lego Mindstorm NXT, Beagleboard, Arduino ו-PandaBoard, חפשו כאן את החומרה שעל התמיכה בה תרצו לקרוא עוד).

* SimRF – בכלי המאפשר מידול וסימולציה של מקלטים-משדרים אלחוטיים במערכות תקשורת ומערכות מכ"מ, מתאפשרות כעת טעינה וסימולציה מהירות יותר של מודלים המכילים בלוקים מספרית Circuit Envelope, הודות לפותרן חדש.

בין היכולות החדשות במשפחת ה-System Toolboxes:

* Communications System Toolbox – לכלי המקל על תכנון, סימולציה וניתוח של מערכות תקשורת ב-MATLAB ו-Simulink נוספו System Objects חדשים: Sphere Decoder ו- Constellation Diagram.

* Computer Vision System Toolbox – לכלי המשמש לעיבוד וידאו, עיבוד תמונה וראיה ממוחשבת בסביבות MATLAB ו-Simulink נוסף אלגוריתם חילוץ הפיצ'רים FREAK, המבוסס על מערכת הראיה האנושית ואשר נמצא כמהיר יותר, חסכוני יותר בזיכרון ורובסטי יותר מ-SIFT ו-SURF; ניתן כעת לאמן את ה-Cascade Object Detector לקבלת גלאי המסוגל לאתר אובייקטים שונים בתמונה, מעבר לאובייקטים כמו פנים, אף, עיניים, פה ופלג גוף עליון (קישור לתיעוד, קישור ל-GUI בנושא); נוספו פונקציות חדשות המבצעות פעולות שבעבר בוצעו רק על ידי System Objects (גילוי פינות, שערוך התמרה גיאומטרית, טקסט וגרפיקה).

* DSP System Toolbox – לכלי המקל על תכנון וסימולציה של מערכות עיבוד אות נוספו מגוון System Objects, וביניהם שניים עבור סינון אדפטיבי.

* Phased Array System Toolbox – הכלי המשמש לתכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות Ultrasound ומערכות תקשורת מרובות-אנטנות עבר שדרוג משמעותי (קישור לפרטים המלאים), והוא מאפשר כעת למדל מערכת phased-array קצה-לקצה ולעבד מידע מכ"מ נרכש תוך שימוש בשיטות חדשות, וכן הוא מספק Apps חדשים.

בין היכולות החדשות בתחום ה-Code Generation:

* MATLAB Coder – הכלי המאפשר יצירת קוד C/C++ בצורה אוטומטית מתוך קוד MATLAB תומך כעת בעוד מגוון פונקציות, וביניהן, כמפורט למעלה, 10 פונקציות מתוך ה-Image Processing Toolbox.

* Fixed-Point Designer – כלי חדש, המשלב את יכולות ה-Fixed-Point Toolbox וה-Simulink Fixed Point, ומקל על פיתוח אלגוריתמי Fixed-Point ב-MATLAB ו-Simulink. בין היתר, הכלי מאפשר המרה אוטומטית ומהירה של קוד MATLAB ב-Floating Point לקוד C ב-Fixed-Point (יש צורך ברישיון גם ל-MATLAB Coder).

היכולות לעיל הן רק חלק מאלה שנוספו בגרסה החדשה. למידע מלא על
R2013a, בקרו בעמוד הגרסה באתר MathWorks.

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


יום ראשון, 24 במרץ 2013

אסטרטגיות להאצת ישומי ואלגוריתמי MATLAB

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

לקריאת הסקירה, לחצו כאן.

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

יום שלישי, 12 במרץ 2013

Time scope is money

לא רבים מכירים את כלי הויזואליזציה time scope שהושק ב-DSP System Toolbox לפני כ-3 שנים ושופר מאז בכל גרסה וגרסה.


הנה כמה מיתרונות הכלי הזה להצגת אותות בזמן, המגיע גם בצורת בלוק וגם בצורת system object (להסבר על system objects, לחצו כאן):

1. הכלי מאפשר ביצוע מדידות שונות באמצעות סמנים, ביצוע ניתוחים סטטיסטיים על האות (מקסימום, מינימום, Peak to Peak וכו') ומציאת Peaks באות בזמן אמת (ראו משולש צהוב במרכז התמונה לעיל, ניתן ללחוץ עליה כדי להגדילה).

2. הכלי מסוגל לקבל קלט מבוסס-דגימות (samples), קלט מבוסס-קבוצות-דגימות
(frames) או קלט רציף.

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

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

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

6. ניתן למצוא את מיקום בלוק ה-time scope במודל על ידי לחיצה על Highlight Simulink Block בפינה השמאלית העליונה של הממשק (כתוצאה – צבע צהוב יהבהב סביב הבלוק).

האם הכרתם את ה-time scope לפני הפוסט הזה? אם כן, האם אתם משתמשים בו? אילו פיצ'רים חסרים לכם בכלי הויזואליזציה הזה?



יום ראשון, 17 בפברואר 2013

עובדים מהר מדי בסביבת MATLAB? אתם עלולים לקבל דו"ח!

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


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

לא הרבה יודעים את זה, אבל מתוך קבצי MATLAB, גרפים, דיאגרמות Simulink וטבלאות Stateflow ניתן להפיק בקלות מסמכי תיאור ודו"חות בפורמטים שונים, כמו:
RTF, XML, PDF, DOC ו-HTML. יכולות אלו עשויות לחסוך לכם לא מעט זמן, בין אם אתם סטודנטים ובין אם אתם חוקרים או מהנדסים בתעשיה.

אז, אם ברצוני לבצע את הפעולות הבאות:

• לייצר נוסחאות הכוללות פקודות LaTeX

• לפרמט את הטקסט והפונטים כך שיכללו הדגשות, קווים נטויים, לינקים וכו'

• להפיק רשימות ממוספרות או עם Bullets

• לתפוס גרפים שהוכנו בעזרת MATLAB ולשלב אותם במסמך חיצוני

יש כמה דרכים לעשות זאת !

הדרך הראשונה היא על ידי שימוש בפקודה "publish" המובנית ב-MATLAB, ורועי התייחס אליה כחלק מהפוסט שלו שנקרא "עולם הפרסום" שפורסם לפני כשלוש שנים. פקודה זו לוקחת קובץ MATLAB, ובהתאם למבנה שלו היא מפיקה ממנו מסמך הכולל קטעי קוד, הערות, גרפים ותמונות שמופקים כתוצאה מהרצת הקוד וכו'. בגרסת R2012b כל היכולות הרלוונטיות שולבו ב-TAB בעל השם PUBLISH, והוא יתגלה לכם כאשר תהיו במצב עריכה של קובץ m:

סרגל PUBLISH בגרסת R2012b

אופציה זו היא שימושית מאוד, בעיקר אם עובדים עם פונקציה או סקריפט בודד, ודוגמה לכך נמצאת בתיקיה מכווצת זו (פשוט בצעו publish לדוגמה מספר 1). באופן אישי, בסמינרים שאני מעביר כיום, אני נעזר בפונקציה הזו בכדי לסנכרן את כל ההדגמות שלי (אני משלב מקטעי תיאור של ההדגמה, מוסיף נוסחאות שמתארות התהליך, לינקים שמעבירים אותי בין קבצים ובין הרצות, וכמובן - כל המסמך הזה יכול להיפתח ב-browser של MATLAB או אחד חיצוני). אבל - השיטה הזו בעייתית כאשר רוצים לייצר מסמכים ממספר קבצים או כשרוצים לפרמט את התוצר הסופי בצורה מסויימת, למשל: אם רוצים לייצר מסמך Word שיהיה בעל עמודים ממוספרים, או אם מעוניינים בגרפים עם כותרות משתנות (כתוצאה מעשרות הרצות), או אם רוצים אפשרות לקבוע שלפעמים כן יופקו גרפים ולפעמים לא
(Conditional Reporting).

השיטה השניה מרחיבה את יכולות האפשרות הראשונה והיא בעלת גמישות גבוהה יותר (אבל - לא מגיעה כחלק מחבילת ה-MATLAB הבסיסית). היא נעזרת בפונקציות המובנות במוצר MATLAB Report Generator לצורך שליטה מירבית על פורמט הדו"ח המתקבל. אני מאד אוהב להשתמש בממשק המשתמש שמגיע יחד עם המוצר הזה, ונפתח על ידי הפעלת הפקודה "report". ממשק זה, כפי שניתן לראות למטה, מורכב מ-3 חלקים: בחלק השמאלי רואים את מבנה הדו"ח שהולך ונבנה, בפורמט היררכי של "עץ". בחלק האמצעי ניתן לראות רשימה של אובייקטים מוכנים, המחולקים לנושאים (אובייקט הוא בעצם פקודה שתשמש לפירמוט הדו"ח, ופקודה שכזו לדוגמא יכולה להיות "פרק חדש", "תת-פרק חדש", "טבלה", "figure" או "לולאת FOR"). בחלק הימני ניתן לראות את התכונות המשוייכות לאובייקט (למשל, עבור תמונה, ניתן לראות את הגודל שלה, האוריינטציה ועוד).

ממשק המשתמש בכלי  MATLAB Report Generator 

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

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

• טעינת מידע מתוך קבצים (m, MAT) וביצוע פעולות מקדימות נוספות

• הגדרת פרמטרי הבעיה ומספר ההרצות (או התנאים) לכל פרמטר

• בדיקה בלולאות (לרוב לפחות 2 לולאות עבור לפחות 2 פרמטרים)

   o חישוב תוצאות נקודתיות
   o הצגת גרפים עבור כל מקרה ושמירה לצורך תיעוד

• ריכוז נתונים בטבלה או בגרף מסכם

• פעולות לאחר הריצה – שמירת תוצאות ל-MAT, מחיקת משתנים

את כל הפעולות הללו ניתן לבצע בעזרת פקודת report, ודוגמה לכך נמצאת בתיקיה מכווצת זו (בדוגמה מספר 2 יש קובץ לדוגמה וכן מסמך PDF שנוצר בעקבות הפעלתו).

ולפני סיום, כמה מילים על הפקת דו"חות מסביבת Simulink - אלה מכם שעובדים בסביבת Simulink ישמחו לדעת שה-Simulink Report Generator, שהוא מוצר נוסף, מוסיף לכל היכולות שהוזכרו לעיל אובייקטים מוכנים לבלוקים של Simulink ושל Stateflow, וגם הוא כולל בתוכו טמפלייטים מוכנים של דו"חות. ניתן להיעזר במוצר זה ישירות מתוך תפריט ה-File:

דו"חות אוטומטיים עבור Simulink

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

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

האם אתם מפיקים דו"חות רבים במסגרת עבודתכם? האם אתם משתמשים באופציית ה-publish, באופציית ה-report או באף אחת מהן? האם אתם מבצעים סימולציות מונטה-קרלו?
 

יום שלישי, 5 בפברואר 2013

לא רק שואב אבק | דברים ש-MATLAB ו-Simulink יכולים לגרום לרובוט לעשות

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

video
ולמי שלא מצליח לראות את הסרטון, הנה רצף תמונות (ניתן ללחוץ כדי להגדיל):
הרובוט המופיע בסרטון ובתמונות הוא NAO, רובוט משוכלל הניתן לתכנות, פרי פיתוח של Aldebaran Robotics, אשר לדברי החברה נמצא בשימוש במאות אוניברסיטאות יוקרתיות ומעבדות מחקר ברחבי העולם. גובהו של הרובוט 57 ס"מ, והוא בעל 25 דרגות חופש, דבר המאפשר לו לבצע תנועות אנושיות. כאמור, בהדגמה שניתן לראות למעלה השתמשו ב-MATLAB ו-Simulink כדי להעביר את המידע שהתקבל ממערכת חישת-התנועה Kinect בתור הוראות לרובוט NAO, במטרה שיחקה במהירות את תנועות האדם אשר ניצב לידו. כיצד עשו זאת?
מודל ה-Simulink אשר שימש לכך מופיע למטה (חלק עליון), והוא עושה שימוש באתר שיתוף הקבצים של MathWorks, בו יש סט של בלוקי Simulink תחת השם Simulink Support for Kinect. אוסף בלוקים זה מאפשר לקחת בקלות את המידע מה- Kinect של מיקרוסופט (או ממערכת Xtion PRO של Asus), להכניסו לתוך Simulink (צד ימין למטה) ולייצר skeleton (צד שמאל למטה), וכל זה קורה בחצי השמאלי של המודל (כלומר בצד שמאל של החלק העליון).
Level-2 MATLAB S-Function (מסומן בחץ ירוק בחצי הימני של המודל) לוקח את ה-skeleton וממיר אותו לזוויות למפרקים הנשלחות כהוראות לרובוט בעזרת ה-API של Aldebaran Robotics.
קשה היה להישאר אדיש מול ההדגמה הזו, ואפילו קליב מולר, ממציא ה-MATLAB, ניסה ללמד את הרובוט מספר תנועות:

מה דעתכם על ההדגמה הזו? האם אי פעם השתמשתם בכלי MathWorks כדי לשלוט על חומרה? ומתי לאחרונה כתבתם S-Function בעצמכם?