יום ראשון, 10 באוגוסט 2014

Compiler או Coder ? זו השאלה

אחת מהשאלות הנפוצות ביותר שאני נתקל בהן היא "מה ההבדל בין MATLAB Coder לבין MATLAB Compiler". באופן די מבלבל, השמות של שני הכלים מתחילים ב-"MATLAB Co" ומסתיימים ב-"er", אבל הם כמובן כלים אשר משמשים לדברים שונים, כפי שיוסבר בשורות הבאות.
מה יוצרים?
ה-
Compiler משמש ליצירת קבצי הרצה (סיומת .exe) וכן ליצירת C/C++ shared libraries מתוך קבצי MATAB. בשילוב עם כלי ה-Builder השונים, התוצר אף יכול להשתלב בסביבות Java, דוט נט, ואקסל, ובעזרת כלי בשם MATLAB Production Server – הוא גם יכול לפעול על מערכות Production.
לעומתו, ה-
Coder מאפשר להמיר קוד MATLAB ל-C/C++ Source Code קריא, יעיל ונייד (Portable) לפלטפורמות כמו צ'יפים, מעבדי Arm ושאר פלטפורמות אשר תומכות ב-ANSI/ISO C/C++ Code. כמובן שניתן לקמפל את הקוד אשר יוצר ה-Coder לקבלת exe או dll שמיועדים לפעול על desktops.
מהירות ריצה של התוצר
מבחינת מהירות ריצה, התוצר של ה-
Compiler, הזקוק ל-MATLAB Compiler Runtime (MCR) כדי לפעול, רץ פחות או יותר באותה מהירות בה רץ קוד ה-MATLAB, בעוד שזה של ה-Coder בעל פוטנציאל לרוץ מהר יותר (הדבר מאוד תלוי באלגוריתם, שכן יש פונקציות MATLAB-יות שעברו אופטימיזציה). באותה נשימה, כדאי להדגיש שתוצר ה-Compiler יכול לנצל ריבוי ליבות או GPU כדי לרוץ יותר מהר (באם הקוד המקורי השתמש ב-Parallel Computing Toolbox כדי לעשות זאת), ושקוד C אשר נוצר תוך שימוש ב-Coder, הרץ על מחשב מקומי מרובה ליבות, יכול להיתמך על ידי ממשק ה-OpenMP.
איזו פונקציונליות נתמכת ?
יתרון גדול של ה-
Compiler הוא שכמעט כל הפונקציונליות של MATLAB וה-Toolbox-ים השונים נתמכת על ידי הכלי, בעוד שאצל ה-Coder התמיכה פחות מקיפה (אך עדיין - כוללת מאות פונקציות, אופרטורים ו-System Objects). היתרון הזה קריטי אצל משתמשים אשר פיתחו ממשק משתמש גרפי (GUI), שכן אותו ניתן להפיץ רק עם ה-Compiler.
סיכום
שני הכלים מפותחים ונמכרים על ידי אותה חברה, משמע – הם אינם כלים מתחרים, אלא כלים משלימים, ופעמים רבות יצא לי לראות קריאה לפונקציה שהואצה על ידי המרתה לקוד
C (עם ה-Coder) נכללת בתוך GUI אשר מקומפל עם ה-Compiler. היתרון הגדול של שני הכלים הוא שהם מאפשרים למשתמש להפיץ את הקוד אשר כתב בסביבת MATLAB למחשבים שאין עליהם התקנה של MATLAB, וההפצה הזו אינה כרוכה בתשלום כלשהו למעט התשלום הראשון (והאחרון) בעבור הכלי – Compiler, Coder, או גם וגם...
ועכשיו, אחרי שהוסבר ההבדל בין ה-MATLAB Coder לבין ה-MATLAB Compiler - אם ברצונך לבחון את מידת ההתאמה של אחד מהכלים (או שניהם) עבורך, ללא התחייבות מצידך, עם (או בלי) ליווי של מהנדס מטעם סיסטמטיקס, ניתן לפנות אליי באמצעות royf@systematics.co.il
ובקרוב יהיה גם ניתן להירשם לסמינר מקצועי בנושא (ללא עלות מצידך) שיתקיים בחודש נובמבר 2014 בצפון ובמרכז. פרטים על הסמינר יפורסמו באתר סיסטמטיקס

יום ראשון, 6 ביולי 2014

Cody Coursework - פלטפורמה לאוטומציה של תהליך מתן ציונים למשימות תכנות ב-MATLAB

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

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

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

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

יום שני, 23 ביוני 2014

300 משתתפים בסמינרי עיבוד תמונה וראיה ממוחשבת בסביבת MATLAB

כ-300 משתמשים / משתמשים פוטנציאליים בכלי MathWorks הגיעו באמצע יוני לשני סמינרים חצי-יומיים בנושא עיבוד תמונה וראיה ממוחשבת בסביבת MATLAB, שהתקיימו בחיפה (130) וגבעת שמואל (170).
כ-170 משתתפים בסמינר בגבעת שמואל (לחצו להגדלה)

בסמינרים, שההשתתפות בהם היתה ללא עלות, ראו הנוכחים דוגמאות מעניינות לשימוש בכלי
MathWorks, ונחשפו ליכולות שנוספו לכלים בגרסאות האחרונות שלהם. בין הדוגמאות והיכולות שהוצגו:
  •           גילוי אוטומטי של עגבניות בתמונה וניתוח מימדיהן ורמת הבשלות שלהן, לצורך ביצוע ניתוחים סטטיסטיים המשמשים להשבחת זרעי הפירות והירקות שאנו אוכלים. במהלך הדוגמא בוצע שימוש בטיפוס מידע חדש בשם table, שנוסף לסביבת MATLAB בגרסת R2013b.
  •           האצת אלגוריתמי עיבוד תמונה וראיה ממוחשבת באמצעות מחשבים מרובי ליבות, כרטיסי מסך (GPU) והמרה אוטומטית של אלגוריתמים מ-MATLAB לקוד C. חלק מהאלגוריתמים שהואצו עשו שימוש בפונקציות עיבוד תמונה אשר רק לאחרונה התווספו לרשימת הפונקציות הניתנות להאצה בעזרת ה-GPU או על ידי המרה אוטומטית שלהן לקוד C.
  •           עקיבה אחר אובייקטים בסרטון וידאו המצולם בזמן אמת.
  •          רגיסטרציה של תמונת IR עם תמונה ממצלמת רשת בשיטת Intensity-Based-Registration.
  •          זיהוי תווים אופטי (OCR) בעזרת פונקציה שהצטרפה ל-Computer Vision System Toolbox בגרסת R2014a.
  •          סגמנטציה תוך שימוש בשיטת Active Contours בעזרת פונקציה שנוספה ל-Image Processing Toolbox בגרסת R2013a.
  •         אפליקציה בשם Color Thresholder שנוספה ללשונית ה-Apps בגרסת R2014a של ה-Image Processing Toolbox, המאפשרת ליצור מסיכת סגמנטציה לתמונות צבע על ידי שימוש במרחבי צבעים שונים.
בנוסף, בסמינר הועברה גם הרצאת אורח ע"י אולג טרשנקו, בנושא המרת תמונה מדו-מימד לפסבדו תלת-מימד (שימושי להצגת תמונות שצולמו בטלפון נייד על גבי מכשירי טלויזיה התומכים בתצוגת תלת-מימד סטריאוסקופית).

להורדת קבצי הסמינר, לחצו כאן


יום שישי, 4 באפריל 2014

מנהל מוצרי עיבוד התמונה והראיה הממוחשבת של חברת MathWorks ביקר בישראל

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

בין הדוגמאות שהציג טננבאום במהלך ביקורו ניתן למנות דוגמה לזיהוי תווים (OCR), דוגמה לרגיסטרציה של תמונת IR עם תמונה הנרכשת ממצלמת אינטרנט פשוטה (Intensity-Based Registration), דוגמה לגילוי אוטומטי של פנים (אלגוריתם Viola-Jones) ועקיבה אחריהם (בשיטת (KLT, דוגמה ליכולת להאיץ אלגוריתמי עיבוד תמונה וראיה ממוחשבת באמצעות שימוש בכרטיס המסך (GPU) או באמצעות המרה אוטומטית שלהם לקוד C (בעזרת MATLAB Coder, יכולת אשר שופרה משמעותית בגרסת R2014a), דוגמה לשימוש בפיצ'רים לצורך מציאת אובייקט בתמונה, דוגמה לשערוך פרמטרים אינטרינזים ואקסטרינזים של מצלמה (Camera Calibration), דוגמה לביצוע סגמנטציה של תמונה תוך שימוש בשיטת Active Contours, ודוגמה לזיהוי מחוות.

בדוגמת זיהוי המחוות, יצר האמריקאי skeleton בסביבת MATLAB בזמן אמת, תוך שימוש במערכת חישת-התנועה Kinect (המבוססת על טכנולוגיה של חברת פריים-סנס הישראלית , שנרכשה לאחרונה על ידי חברת Apple). על סמך ה-skeleton מצא האלגוריתם את ידו של המצולם, ותוך שימוש בפעולות מורפולוגיות ו-Blob Analysis – הצליח לקבוע האם האדם מסמן בידו "אבן", "נייר" או "מספרים". בתמונה למטה ניתן לראות את טננבאום מדגים את האלגוריתם בזמן אמת – המצולם מסמן "מספרים", בחלון התצוגה השמאלי מסומן בירוק מרכז הכובד של היד ומסומנות באדום שתי האצבעות אשר זוהו, ובחלון התצוגה הימני מוצגת התמונה הנרכשת בזמן אמת, ועליה ה-skeleton (באדום), אזור היד (ריבוע צהוב), וחיווי המעיד על כך שהאלגוריתם גילה שהאדם בחר ב"מספרים" (scissors). 
טננבאום מדגים זיהוי מחוות, לחצו להגדלה
"זה היה הביקור הראשון שלי בישראל, והוא היה מוצלח במיוחד", סיכם ברוס טננבאום את השבוע העמוס שעבר, "אני בטוח שבמהלך השבוע הזה נחשפו עוד ועוד אנשים ליכולות המתקדמות של כלי MathWorks בתחומים רכישת תמונה (Image Acquisition), עיבוד תמונה (Image Processing), ראיה ממוחשבת (Computer Vision System Toolbox), המרה אוטומטית של קוד MATLAB לקוד C (MATLAB Coder), האצת ביצועי אלגוריתמים (Parallel Computing Toolbox), ניתוח והצגת מידע גיאוגרפי (Mapping Toolbox) וכו'. גם אני למדתי המון על צרכי השוק הישראלי, ואני מאמין שהדרישות השונות שהועלו יקבלו מענה בגרסאות הקרובות של כלי MathWorks. התרשמתי מאוד מהרמה המקצועית של האנשים עימם נפגשתי ומהדברים שאותם הם מפתחים, ואני כבר מצפה לביקור הבא שלי בישראל".
כל הדוגמאות בהן עשה טננבאום שימוש נמצאות ברשותי, במידה ותרצו לקבל אותן או שאגיע על מנת להציגן אצלכם, אנא כתבו לי ל-  royf@systematics.co.il

יום חמישי, 20 במרץ 2014

Rational Fitting


אני שמח לארח בבלוג כותב חדש, גיל הנדלסמן, מהנדס אפליקציה העובד יחד עמי בחברת סיסטמטיקס. גיל הוא מהנדס אלקטרוניקה עם למעלה מ-10 שנות ניסיון בתחום התקשורת והמוליכים למחצה, והוא מוביל בסיסטמטיקס את תחום התקשורת לסוגיה, ובפרט - RF.
יישומים רבים, ובמיוחד יישומי תקשורת,  נדרשים לעבד מידע בתחום הזמן (Time Domain) על סמך אופיו בתחום התדר (Frequency Domain). עד לא מזמן, פתרון נפוץ לכך היה שימוש במודלים של "טורי פורייה" או "התמרות פורייה" (פונקציתFFT , שפותחה בשנות השישים של המאה הקודמת, המתבססת על מודל Cooley–Tukey של התמרת פורייה בדידה, ודאי מוכרת לרוב קוראי הפוסט). הטענה בבסיסה של שיטה זו היא שתחת תנאים מסוימים ניתן להציג כל אות בעזרת סכום (טור) אינסופי של פונקציות הרמוניות. אך עם התקדמות הטכנולוגיה, המידע נעשה מהיר ומגוון יותר, והאתגרים בניתוחו (וכן בסימולציה שלו) נעשו קשים יותר, ובאופן טבעי - התעשייה החלה לחפש מודלים מהירים יותר ויעילים יותר.
בסוף המאה הקודמת, וליתר דיוק - ביולי 1999, פרסמו צמד חוקרים, ביורן גוסטבן ואדם סמליאן, שיטה חדשה במטרה לענות על הצורך לעיל, שזכתה לשם "התאמה וקטורית" (Vector Fitting), ואשר עם השנים הותאמה ליישומי תקשורת. העיקרון בבסיסה של שיטה זו הוא מציאת קטבים ו- residues שמתאימים ((fit בצורה מדויקת כרצוננו אל האות המקורי, כאשר ניתן בעזרת מספר רב יותר של קטבים וresidues- להשיג התאמה מדויקת יותר (מספר הקטבים וה-residues תמיד יהיה זהה). רבים מתבלבלים בין אפסים ל-residues, אז זה המקום להדגיש שבשיטה זו המונה הינו חלק מפתרון של בעיה קומפלקסית, ולכן ניקרא residues ולא אפסים (בשונה מפונקצית תמסורת). השיטה עובדת באופן איטרטיבי, כאשר נבחרים קטבים ראשונים ובעזרת ה-residues נמצא פתרון למערכת לינארית. בשיטה זו, המניפולציות מבוצעות לא על האות המקורי, אלא על תוצאותיה.
להלן נוסחה של Rational Fitting - פרמטרD  הינו רכיב סקאלרי והרכיבים  C ו-A   יכולים להיות (וברוב המקרים גם יהיו) וקטורים:


בשנים האחרונות שיטה זו תופסת תאוצה בקרב מפתחים וזאת כיוון שביישומים רבים שיטה זו עולה על קודמתה (
FFT) ומצליחה ליעל את תהליך עיבוד המידע – היא מאפשרת לקבל בזמן קצר יותר תוצאות באותה רמת הדיוק כמו קודמתה. בנוסף - היא מותאמת הרבה יותר לשיטות הנומריות עליהן המחשוב מתבסס.
מימוש של שיטה זו קיים בMATLAB- בכלי ה- RF Toolbox, בפונקציה הנקראת rationalfit (למטה מובאת השוואה בין הרצת IFFT והרצת Rational Fitting בסביבת MATLAB). בעזרת פונקציה אחת, מהירה ונוחה, ניתן להמיר את אות המידע (לדוגמא קובץ פרמטרי מערכת - S-parameters) לתוצאות אשר מוצגות במשטח העבודה כאובייקט בעל פרמטרים רלוונטיים. ובעזרת פונקציות נוספות - ניתן להציג את תגובת המדרגה של האות בציר הזמן לאחר הפעלת הפונקציה  rationalfit(פקודת stepresp), ולהשלים את פעולת הצגת האות בציר התדר (פקודת freqresp). המעוניינים יכולים להוריד ע"י לחיצה כאן שני קבצים שאחד מהם הינו קוד המדגים הלכה למעשה את השימוש בפונקציות לעיל - בדוגמה האינפורמציה בקובץ המידע S21 עוברת בפונקציה rationalfit ולאחר מכן מוצגת כתגובת מדרגה בציר הזמן.


לסיום, בעלי  רישיון
RF Toolbox  מגרסה R2013a ומעלה יכולים ליהנות מאפליקציה מעניינת שפותחה לאחרונה ע"י קולגה שלי ב-MathWorks, המאפשרת התאמה (fit) מהירה של S-parameters, הגדרת רמת הדיוק, ההשהיה, הגדרת קטבים משמעותיים וכן הצגת התוצאות במשטח העבודה (לחצו לקישור לאפליקציה).

יום חמישי, 27 בפברואר 2014

געגועים ללאס וגאס | סימולציה של מזרקות הבלאג'יו


אני שמח לארח בבלוג פעם נוספת את יגאל ירוסלבסקי, אשר כבר כתב פה בעבר (לחצו לקריאת הפוסט האחרון שלו).
בתחילת החודש חזרתי מנסיעת עבודה לארה"ב, במהלכה הייתי בעיקר בסן-דייגו, אך גם קצת בלאס וגאס.
לאס וגאס היא עיר מדהימה, עיר חטאים של ממש, וכמעט כל דבר בה מיועד אך ורק למען מטרה אחת – לגרום לכם להוציא עוד ועוד כסף. יש שם הכל מהכל - הצגות, מסעדות, מסיבות, שולחנות משחק, להקות שמנגנות מוזיקה חיה וכו'. אך הדבר שהרשים אותי יותר מכל דבר אחר, היה המזרקות של קזינו בלאג'יו. טוב, זה לא ממש מפתיע, הרי אני מהנדס, ומזרקות הבלאג'יו הן יצירת אומנות הנדסית (וגם הבלוג הזה אינו בלוג טיולים...)
מזרקות הבלאג'יו הרשימו אותי עד כדי כך, שהלכתי לראותן 5 פעמים, חיפשתי עליהן מידע שימושי באינטרנט, וכמובן שהתלהבתי כאשר רועי שלח אליי קישור לסימולציית Simulink של המזרקות הנפלאות האלה.
Simulink, למי שלא מכיר, היא סביבה מובילה לפיתוח וסימולציה של מערכות
רב-תחומיות (
Multidomain), וככזאת - הסביבה הינה מושלמת לסימולציה של מערכות המשלבות בקרה ספרתית, מכאניקה ואף זרימה. וזה אידיאלי עבור סימלוץ מזרקות הבלאג'יו, שכן כל אחד מיותר מ-100 סילוני המזרקות הוא מערכת אלקטרומכאנית הכוללת משאבת מים בלחץ גבוה, מנועי שליטה על כיוון הסילון ותאורה, והכל מבוקר על ידי תוכנת מחשב המסנכרנת את הסילונים עם המנגינה שמשתנה בכל רבע שעה. נשמע מסובך? מסתבר שלא, לפחות לא עם Simulink.

על מנת לקרוא על מודל מזרקות הבלאג'יו שפותח והועלה ל-File Exchange על ידי John Hedengren, לראות סרטון הדגמה של המודל בפעולה וכמובן להוריד את המודל - לחצו פה.