יום שלישי, 31 בינואר 2017

חידושים בהמרה אוטומטית של קוד MATLAB ומודלים של Simulink לקוד C++/C ובניתוח סטטי של קוד C++/C

לפני כארבעה חודשים שוחררה גרסת ה-MATLAB השנייה לשנת 2016, R2016b. הגרסה כוללת הרבה שיפורים ויכולות חדשות ל-MATLAB ולכלים המשלימים אותו, ובפרט – לכלים המאפשרים המרה אוטומטית של קוד MATLAB ומודלים של Simulink לקוד C/C++ והמאפשרים ניתוח סטטי של קוד C/C++. במסגרת סדרת הפוסטים העוסקים בחידושים בגרסה הנ"ל (לחצו לפוסט הקודם בסדרה), מובאת להלן סקירה בנושאים שבכותרת, אשר נכתבה על ידי מיכאל דוננפלד, מהנדס אפליקציה בחברת סיסטמטיקס, המהווה מוקד ידע בכל הקשור לשימוש בכלים המוזכרים להלן.

MATLB Coder
בכלי המאפשר המרת קוד MATLAB לקוד C/C++, נוספו:
·         תמיכה בפונקציות רקורסיביות ו-Anonymous Functions.
·         תמיכה באלגוריתמי לימוד מכונה מסוג SVM  ו-Logistic Regression.
·         תמיכה ב-29 פונקציות מתוך ה-Wavelet Toolbox, כלי לניתוח אותות ותמונות באמצעות גלונים.

Simulink Coder
בכלי המאפשר המרת מודלים של Simulink (כולל Stateflow) לקוד C/C++, נוספו היכולות הבאות:
·         ייצור קוד מתוך בלוקים ייעודיים המגדירים כיצד לאתחל את המודל, לאפס את המודל ולסיים את ריצת המודל  (Initialize Function, Reset Function, Terminate Function).
·         ייצור קוד מבלוקים המאפשרים לקרוא ולכתוב ל-states של המודל.
·         ייצור קוד אוטומטי התומך בלוח Nucleo של חברת STMicroelectronics.

Embedded Coder
בכלי, המאפשר קבלת קוד C/C++ אופטימלי עבור מערכות Embedded, מתוך קוד MATLAB או מודלים של Simulink, תוך שימוש בכלי/ם הרלוונטי/ם המוזכר/ים לעיל, נוספו היכולות הבאות:
·         אפשרות לקבוע את ממשק התוכנה של פונקציות המיוצרות מ-Simulink Function block.
·         תמיכה בייצור קוד המוכוון ללוח מסוג STM32F746G-Discovery  המבוסס על Cortex-M7.
·         הקטנת כמות הזיכרון הנדרש ע"י שימוש חוזר במרחב זיכרון (Buffer reuse) במקרים שונים כגון: מבנים גלובליים של nonreusable subsystems.
·         אופטימיזציה בקוד של חישוב אינדקסים בגישה למטריצות בתוך לולאות.
·         הקוד המחולל מיוצר ללא שימוש בפעולות כפל, אלא משתמש רק בפעולות חיבור והזזה.

Polyspace Bug-Finder & Code-Prover
בכלים המאפשרים איתור באגים בתוכנה בעזרת Static Analysis והוכחה של העדר שגיאות run-time בקוד, נוספו היכולות הבאות: 
·         קונפיגורציה אוטומטית לבדיקת קוד שמקומפל ע"י Diab Compiler.
·         אפשרות הגדרות נוחה המבחינה בין קוד שרץ כמשימה מחזורית מול קוד שרץ דרך פסיקה. זאת על מנת לאפשר זיהוי בעיות הנוגעות ל-multitasking כגון: race condition, read/write contentions וכדומה.
·         אפשרות להריץ את הכלי מתוך שורת מערכת ההפעלה.
·         אפשרות להריץ אנליזה של הכלי אוטומטית מסביבת IBM®  Rhapsody 8.1 באמצעות שימוש ב-add-in  ייעודי.
·         קבלת מדד המשערך את כמות הזיכרון של משתנים מקומיים בקוד.



יום רביעי, 21 בדצמבר 2016

חידושים בבקרה ומידול פיסיקלי בגרסת R2016b

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

מידול פיסיקלי

Simscape
          Gas Domain - מידול מערכות גז ברמות דיוק שונות
          PS Lookup Table (4D) - חישוב שיערוך פונק' מרובות משתנים f = f(x1,x2,x3,x4)
וקבלת פלטים פיסיקליים
          יצירת קוד משופרת (C / C++), מורחבת ומודולרית יותר
          קישוריות משופרת בין עץ התוצאות לבין בלוקים במודל
          Simscape Language - התניית קטעי קוד, הוספת אופרטורים מ-MATLAB לעריכת רכיבים, הכרזת פונקציות בקוד הרכיבים

Simscape Multibody
          מצלמה דינאמית למעקב אחר אובייקטים במהלך הסימולציה
          יצירת קבצי וידאו בפורמטים שונים ושליטה בקצב וגודל המסגרות משורת הקוד (smwritevideo) או מכלי ממשק גרפי יעודי
         עידכון והרחבת סוגי היחידות הפיסיקליות הנתמכות

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

Simscape Fluids
          ספריית  Hydraulic Pump and Motor- שיפור החישובים הנומרים למעבר בין משטרי העבודה השונים (forward / reverse)
          התיחסות ליעילות והפסדים נפחיים / מכאניים עבור משאבות ומנועים הידראולים
(תזוזה קבועה / משתנה)
          ממשק TL-IL - חיבור בין רשת מידול נוזלים תרמיים (thermal liquid) לבין רשת מידול הידראולית (isothermal liquid)

Simscape Electronics
          בלוק MOSFET - מידול מדויק יותר באזורי עבודה של מתח הסף
          מידול טרנזיסטורים LDMOS/VDMOS - מתאים למערכות מתח גבוה
          מידול מעבר חום עבור בטריות ומדידת השינויים הפנימיים
          מנועי סרבו - שימוש בטבלאות נצילות וטיפול בכשלים

Simscape Power Systems
          שינויים תרמיים - מידול הפסדים כתוצאה מהולכה ופעולות מיתוג
          מידול קבל-על בעל יכולות טעינה / פריקה מהירות
          ספריית בקרה המכילה רכיבי PWM תלת פאזיים (2-3 שלבים)

בקרה

Control System Toolbox
          כוונון מערכות בקרה לתחום חרוט, עפ"י גבולות קבועים או גבולות התלויים בתדר
          כוונון בקרה משופר עבור מערכות פסיביות
          הגדרת הימנעות קטבים ואפסים מלהגיע לאינסוף (MaxRadius)
          שיערוך מצבים עבור מערכות לא לינאריות באמצעות אובייקטי Kalman Filter מורחבים

Simulink Control Design Toolbox
          גזירת קבוצת נקודות - שינוי פרמטרי המודל וחישוב מספר נקודות עבודה בתהליך מואץ (compilation)
          תהליך יצירת מערכות LPV (Linear Parameter-Varying) משופר, חישוב היסטים עבור נקודות עבודה מרובות תוך התחשבות בקלטים, פלטים, מצבים ונגזרותיהם
          יצירת מערך אובייקטים עבור מפרטי נקודות עבודה

Robust Control Toolbox
          חישוב חוסן היציבות של מערכת הבקרה כתלות בתדר
          פונקציות משופרות לחישוב הערך הסינגולרי (Miu) וזיהוי שיאים קריטיים היכולים להשפיע על אזורי היציבות – קבלת גבולות יציבות מדויקים יותר

Model Predictive Control Toolbox
          בלוק  Multiple Explicit MPC Controllers - מידול בקר מסוג Explicit MPC בעל הגברים מתוזמנים (עבור כל נקודת עבודה), עבור כל הגדרת תת-בקר מסוג זה יהיה שימוש ב- Lookup Table מתאימה
          MPC Designer App - שיערוך אוטומטי של זמן הדגימה וייבוא מודלים אשר נוצרו ע"י ה- System Identification (המרה אוטומטית)

System Identification Toolbox
           Standalone Application - פריסה של הכנת הנתונים ושיערוך המודל באמצעות
ה-
MATLAB Compiler
          זיהוי פונק' תמסורת עפ"י נתונים במישור התדר, בצורה מהירה ומדויקת יותר
          פונקציות משופרות עבור ניבוי התגובה והשגיאות
          טיפול בהשהיות במהלך שיערוך המודל הלינארי (במישור הזמן)


יום רביעי, 23 בנובמבר 2016

חידושים בעבודה עם מידע

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

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

ניתן לשלוט בקלות באופן ייבוא מידע מקבצים, מבלי שנצטרך לפתוח אותם - באמצעות הפונקציה  dete​ctImportOptionsהטעינה עצמה תתבצע באמצעות פקודת readtable שהתווספה לפני כשלוש שנים.

שלב העיבוד המקדים צורך זמן רב בעבודה עם מידע. פונקציות ויכולות חדשות שנוספו בגרסת R2016b מאפשרות לייעל ולזרז את התהליך. לדוגמא: 
-          טיפול במידע חסר או שגוי באמצעות פונקציה ייעודית כמו fillmissing, אשר התווספה ל-standardizeMissing  
-          חלוקה למקטעים במרווח קבוע של מערכי זמן מסוג datetime ו-duration, באמצעות פונקציית discretize
-          אפשרות להתעלם מערכים חסרים בעבודה עם פונקציות שמבצעות פעולה מצטברת ((cumsum, cummax, cummin

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

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



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


     - ניתן לעבוד עם טקסט בפשטות ובמהירות - באמצעות טיפוס נתונים חדש הנקרא string שמאפשר שמירה בזיכרון, עיבוד והשוואה של מידע טקסטואלי באופן יעיל ואינטואיטיבי. לטיפוס נתונים זה הצטרפה ערימת פונקציות ייעודיות לשרשור, מיון ופיצול מערכים של טקסט, חיפוש וכו' – רלוונטי מאוד לעובדים עם טקסט בתחומים rocessingNatural Language P ו-Machine Learning. בעזרת פונקציות חדשות, ניתן לעבור ממשתנים מסוג cell או char למשתנה string, לקרוא מקבצים הישר למשתנה string, לגשת לאותיות מסוימות, לחבר מילים על ידי אופרטור +, למצוא מילים לפי האות הראשונה או האחרונה ועוד. בתמונה למטה ניתן לראות מספר פעולות לדוגמה (בצד שמאל), ואת תוצאות הפעלתן (בצד ימין) – ניתן ללחוץ להגדלה.


רוצים מידע נוסף על עבודה עם מידע? לחצו פה.