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

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


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

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

 

יום שלישי, 28 בינואר 2014

מציאת עיגולים בתמונה

רבים מכירים את התמרת Hough המשמשת לצורך מציאת קוים ישרים בתמונה, ואשר ממומשת ב-Image Processing Toolbox באמצעות הפקודה Hough.
כידוע, ההתמרה הזו הורחבה לפני עשרות שנים כך שתוכל לשמש לצורך מציאת צורות שרירותיות שונות, לאו דווקא קוים ישרים, אלא למשל עיגולים.
לפני כשנתיים, בגרסת R2012a, נוספו ל-Image Processing Toolbox שתי פקודות המשמשות למציאת עיגולים בתמונה (imfindcircles) ולציור העיגולים אשר נמצאו (viscircles).
ננסה למצוא את העיגולים בתמונה הבאה ולהציגם (ניתן ללחוץ עליה כדי להגדילה):


בתמונה יש עיגולים במימדים שונים, ועל מנת לקבל תחושה לגבי טווח הקטרים שלהם, ניתן להיעזר בפקודה imdistline:
הפקודה מביאה להופעת סרגל מדידה הניתן להזזה ומתיחה/כיווץ (ראו על המטבע של חצי השקל), ובעזרת הכלי ניתן להסיק כי קוטר העיגול הגדול ביותר בתמונה (מטבע של חצי שקל) הוא כ-410 פיקסלים, כלומר – רדיוס העיגול הגדול הגדול ביותר הוא כ-205 פיקסלים. באופן דומה, רדיוס העיגול הקטן ביותר (מטבע של שקל) הינו כ-130 פיקסלים.
למרבה הצער, הפעלת הפקודה imfindcircles על התמונה תוך שימוש בתחום רדיוסים זה  אינה מניבה רשימה של מרכזי עיגולים ורדיוסים שלהם:
שתי סיבות לתוצאה העגומה הנ"ל. האחת הינה שברירת המחדל של הפקודה היא לחפש עיגולים אשר בהירים יותר מהרקע, וזה לא המצב בתמונה הנ"ל, ועל כן יש לשנות פרמטר בשם ObjectPolarity. אולם, מבדיקה, גם שינוי פרמטר זה אינו מספיק, ויש לשלוט על פרמטר נוסף בשם Sensitivity, הקשור למידת ה"מתירנות" של גלאי העיגולים (עד כמה הוא מוכן "לעגל פינות" ולהכריז על אובייקט מסויים כעיגול). הפרמטר מקבל ערכים בין 0 ל-1, וברירת המחדל שלו היא 0.85, ועל כן נגדיל את הערך הזה.
ניתן לראות כי הפקודה החזירה ארבעה מרכזים של עיגולים, ורדיוסים תואמים. על מנת לוודא שאכן מדובר במטבעות אשר בתמונה, ניתן להשתמש בפקודה viscircles כדי לצייר עיגולים סביב אותם מרכזים, ברדיוסים המתאימים, והנה התוצאה:
לשתי הפקודות, imfindcircles ו-viscircles פרמטרים נוספים שכדאי להכיר, ועל כן מומלץ להיעזר בתיעוד שלהן. לחצו לתיעוד של  imfindcircles ולתיעוד של viscircles .

יום שלישי, 31 בדצמבר 2013

ניקיון בררני


קרה לכם פעם שרציתם למחוק משתנים רבים מה-workspace, אך לא את כל אלה
שבו ? למשל, נניח שב-
workspace שלנו יש משתנים ששמותיהם הינם שמות האותיות ב-ABC, ואנו מעוניינים לשמור רק את משתנה R.

אחת הדרכים לעשות זאת היא באמצעות פקודת clear, תוך ציון שמות כל המשתנים שאתם מעוניינים למחוק:  clear A B C D…Q S T…Z

דרך אחרת הינה לסמן את כל המשתנים המיותרים ב-workspace, ללחוץ על הלחצן הימני של העכבר, ולבחור ב-delete.

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

במקרה שתואר לעיל, השימוש בפונקציה על מנת להסיר את כל המשתנים למעט R ייעשה באופן הבא:

clearvars –except R

ואגב, אם ה-workspace שלכם נראה כמו זה:


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

clearvars -except A*

למידע נוסף על clearvars, כולל סינטקסים נוספים לשימוש בפונקציה – לחצו כאן.

 

יום רביעי, 27 בנובמבר 2013

נתח לוגי

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


-          שלום, אני יגאל, וגם אני הייתי סטודנט להנדסת חשמל
-          כולם ביחד: אנחנו אוהבים אותך יגאל
-          ובאותם הימים עבדתי במשרת סטודנט באחת מחברות ההזנק הישראליות שלימים נמכרה לחברת ענק בינלאומית
-          כולם ביחד: אנחנו גאים בך, יגאל
-          התפקיד שלי היה לבנות סביבת אימות לקוד לוגי שנכתב ע"י המפתחים, להריץ אותו ע"ג שרתי הסימולציה ולנתח את התוצאות שלו
-          כמה מהאנשים בקהל מהנהנים בראשם בהבנה
-          הו, כמה שעות נפלאות העברתי בניתוח צורות גלים (waveforms) וניסיונות להבין מדוע נכשלה הסימולציה
-          מהנדס בחולצת פסים בגוונים של כחול בשורה שלישית: תגיד להם איש, תגיד להם!
-          למעשה, גם היום קשה לדמיין דרך יותר נוחה לנתח התנהגות מערכות לוגיות ומכונות מצבים מאשר צורת גל לוגית או נתח לוגי (Logic Analyzer). אלא ששום דבר לא נמשך לנצח, וברגע שעברתי מתחום הפיתוח הלוגי לתחום האלגוריתמיקה והנדסת מערכת נשארתי ללא כלי waveform שכל כך אהבתי, שכן במשפחת MATLAB & Simulink לא היו את הכלים האלה...
-          מהנדסת בג'קט אפור, היושבת בשורה הראשונה, מזילה דמעה שקטה של הזדהות ומנגבת אותה בנייר טישו
-          וכך, למרות כל הקושי, נשארתי waveform clean במשך כמה שנים טובות
-          קול מאחת השורות האחוריות: תהיה חזק, אתה לא לבד במלחמה היום יומית הזאת!
-          אז ככה, יש לי משהו חשוב לספר לכם! לא רבים יודעים, אבל החל מגרסת R2013a של כלי MathWorks הצטרף ל DSP System Toolbox כלי חדש, ה Logic Analyzer!
-          מחיאות כפיים, שריקות של עידוד, קולות YEAH מוקלטים ברקע... FADE TO BLACK... כתוביות... מנגינה... 

כפי שהבנתם, נושא הפוסט הוא כלי מדידה יחסית חדש - ה dsp.LogicAnalyzer, שנכלל ב DSP System Toolbox. הכלי מאפשר לבצע ניתוח שינוי ערך האות (signal transition) בתחום הזמן כאשר מספר הערוצים לניתוח מוגבל רק ע"י יכולת המחשב שלכם. מתוקף היותו של Logic Analyzer ממומש כ System Object, יש לו הן את היכולת לנתח את כל האותות המוכנסים אליו כחתיכה (frame) אחת לכל ערוץ, והן את היכולת לתח את האותות בצורת דגימות זורמות (streaming signal processing). וכפי שהתרגלתם בעבודתכם בסביבת MATLAB, גם ה Logic Analyzer תומך במגוון שורשי יסוד (Radixes), פורמטים וצורות תצוגה. מגניב? בטח מגניב! אז בוא נראה דוגמא...
הנה תרשים בלוקים (הניתן להגדלה ע"י לחיצה) ובו Digital Up-Converter:

בקודMATLAB , התהליך נראה כך:


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


נקרא כעת לאובייקט ה
Logic Analyzer :

שימו לב לכך שהגדרות שמות הערוצים, ה
Radix לכל ערוץ, קצב הדגימה של התצוגה והמפריד (Divider) - הם רק חלק מהאפשרויות העומדות לרשות המשתמש באובייקט לטובת שיפור צורת התצוגה והפיכת לברורה יותר. תוצאת הפעלת האובייקט הזה היא:

מה שקבלנו כאן הוא למעשה "תחליף זמין" לכלי
Waveform Display הנכללים בדרך כלל בכלי סימולצית קוד חומרה כמו Mentor Graphics ModelSim ומתחריו. הכלי מאפשר לנו לנתח התנהגות דינמית של אותות המערכת ברמת מעבר בודד, מה שהופך את הכלי למושלם לעבודות דיבוג של בעיות בעלות אופי דינאמי. הכלי יקל עלינו לוודא שאותות
סימון (
Signaling) או בקרה (Control) מופעלים בתזמון נכון, ובעיות כמו אובדן חלק מהמידע כתוצאה מאותות בקרה שמופעלים בתזמון לא נכון - לא יתרחשו.
מפני שהכלי ממומש כ System Object, השימוש בו אפשרי לא רק בסביבת MATLAB אלא גם בסביבת Simulink, רק חשוב לציין ששימוש בסביבה האחרונה ידרוש מהמשתמש גם פעולה של  Logging לאותם אותות שהוא יהיה מעוניין לנתח.

לקריאה נוספת:
- תיעוד מתוך אתר MathWorks (לחצו כאן)
- פוסט באנגלית בנושא (לחצו כאן)

יום שני, 28 באוקטובר 2013

מפתחים מערכות LTE ? יש לנו הפתעה בשבילכם !


חברת MathWorks שיחררה באמצע אוקטובר כלי חדש במשפחת ה-System Toolboxes – את ה-LTE System Toolbox. הכלי מאפשר יכולות חדשות שנדרשו על ידי לקוחות העוסקים בפיתוח ה-Physical Layer של מערכות תקשורת אלחוטיות הפועלות בתקני LTE ו-LTE-Advanced.

לצורך פעולתו, הכלי מחייב רישיון ל-Communications System Toolbox (וכלי זה מחייב את ה-DSP System Toolbox, שדורש את ה-Signal Processing Toolbox היושב על MATLAB).

למידע נוסף, היכנסו לעמוד המוצר באתר MathWorks

לגרסת התנסות – אנא פנו באמצעות matlab.israel@gmail.com

 

יום שני, 23 בספטמבר 2013

R2013b מוכנה להורדה !


בחודש ספטמבר שוחררה גרסה חדשה של כלי MathWorks, גרסת R2013b, הכוללת עדכונים ל-MATLAB  ו-Simulink, ושדרוגים + תיקוני באגים לכ-80 כלים אחרים.

בין היכולות החדשות במשפחת מוצרי MATLAB:
* MATLAB – שני Data Types חדשים (לחצו לסרטון) – (1) מערך categorical למידע סדור ולא-סדור (2) מיכל מידע table לניהול, אחסון וסינון מידע מעורב (נומרי, טקסט, תאריך) המאורגן בצורת טבלה; פונקציית timeit להערכה רובסטית של זמן הביצוע של פונקציה; שיפור ביצועים של מגוון פונקציות.
* MATLAB Compiler גרסה משמעותית, הכוללת: ממשקי משתמש חדשים ליצירת אפליקציות Stand-alone ו-DLL-ים (ה-deploytool הוחלף ב-applicationCompiler וב-libraryCompiler); אפשרות להוסיף icon לאפליקציה המקומפלת ו/או ל-installer שלה; יכולת ליצור installer מותאם אישית, כולל splash screen אשר יופיע במהלך תהליך ההתקנה; url חדש להורדה אוטומטית של MCR מתאים מאתר MathWorks.
* Image Processing Toolbox יכולת האצה של 22 פונקציות נוספות (וסה"כ – 33) באמצעות כרטיס המסך (GPU) על ידי ה-Parallel Computing Toolbox, וביניהן edge, imresize, bwmorph ו-medfilt2; התמרות גיאומטריות דו-מימדיות חדשות ופונקציה חדשה (fitgeotrans) להתאמת התמרה גיאומטרית לאוסף נקודות בקרה.
* Parallel Computing Toolbox פרט ל-22 הפונקציות המוזכרות לעיל מתוך הכלי הקודם, פונקציות MATLAB נוספות ניתנות כעת להאצה באמצעות ה-GPU; אינטראקציה קלה יותר עם מאגר workers מקביליים באמצעות פקודת parpool (מחליפה את matlabpool); פתיחה אוטומטית של מאגר workers בעת הפעלת קוד העושה שימוש ב-parfor או spmd; ב-MATLAB Coder נוספה תמיכה בפונקציית parfor לצורך יצירת קוד Stand-alone המסוגל לפעול על מספר ליבות במקביל.
* Statistics Toolbox כולל כעת מודלים של רגרסיית Linear mixed-effects; פונקציות פילוגי הסתברות וסטטיסטיקה תאורית הנכללות בו ניתנות להמרה אוטומטית לקוד C/C++ באמצעות MATLAB Coder (ובסך הכל יותר מ-100 פונקציות של ה-Statistics Toolbox נתמכות).
* Image Acquisition Toolbox הרחבת התמיכה ב-Kinect על Windows; אפשרות לקימפול ה-System Object של רכישת התמונה באמצעות ה-MATLAB Compiler.

* Curve Fitting Toolbox אפליקציית ה-Curve Fitting תומכת כעת ב-Linear least-squares fitting גם עבור משוואות המוגדרות על ידי המשתמש.
* Instrument Control Toolbox תומך בתקשורת עם מעגלים משולבים באמצעות פרוטוקול SPI.
* Financial Toolbox מאפשר כעת אופטימיזציה של תיקי השקעות בשיטת Mean-Absolute Deviation (MAD). 

בין היכולות החדשות במשפחת מוצרי Simulink:
* Simulink – שיפורים ב-Editor (אפשרות לבצע preview לתוכן של תת-מערכת, comment through blocks, וחיווי ברור במקרה של קווי סיגנל החוצים זה את זה); בלוק חדש לשילוב System Objects שנכתבו ב-MATLAB לתוך מודלים של Simulinkאפשרות לייצר ממשקי בלוקים מותאמים אישית עשירים יותר באמצעות ה-Mask Editor החדש; שיפור התמיכה בחומרת Arduino; מידול פשוט יותר של תכנונים ב-single precision; קומפיילר LCC חינמי הנתמך על פלטפורמת Windows 64 bit. 
* Simscape – בכלי המידול והסימולציה של מערכות פיזיקליות רב-תחומיות הועשרה השפה בהגדרות נוספות, המאפשרות ייבוא, חיבור והפרדה לתת רכיבים ומכלולים שונים; מתאפשרת כעת הצגת סטטיסטיקה על המודל; נוסף domain חדש המאפשר מידול של מערכות זורמים תרמיים (Thermal Liquid) – כגון שינויי טמפרטורה לנוזלים במערכות צנרת, חימום של מפעילים כתוצאה מחיכוך, ומעבר חום במערכות מורכבות כמו מחליפי חום.
* SimPowerSystems – דור שלישי למוצר המאפשר מידול, סימולציה ותכנון של מערכות הספק חשמליות. הדור החדש מאפשר שליטה גבוהה יותר על רכיבים וספריות, מאפשר שינוי בלוקים קיימים בעזרת שפת Simscape, ומכיל דוגמאות ובלוקים נוספים בתחום מכונות ושנאים. בעלי רישיון ל-SimPowerSystems יכולים לעבוד באותם המודלים גם עם הדור השלישי וגם עם הדור השני.
* SimMechanics – לדור השני של המוצר המאפשר מידול וסימולציה של מערכות מכאניות נוספה היכולת ליצור תנועה מאולצת במפרקים השונים. כעת ניתן להשתמש במודלים שתוכננו בדור השני בכדי לאלץ תנועה מסויימת, ולמדוד כוחות הנוצרים במפרקים השונים, ובכך לתכנן מערכות הנעה מתאימות.
* Stateflow – בכלי המידול והסימולציה של תרשימי זרימה, מכונות מצבים וטבלאות אמת נוספה יכולת מובנית לשימוש במושגי זמן כתנאי מעבר בין מצבים; מתאפשרת כעת "השלמה באמצעות Tab" למילים שמורות בתוך Stateflow; נוספה תצוגה מוקדמת (preview) לתכנים בתוך דיאגרמות Stateflow.
 
בין היכולות החדשות במשפחת ה-System Toolboxes:
* Computer Vision System Toolbox – לכלי המשמש לעיבוד וידאו, עיבוד תמונה וראיה ממוחשבת בסביבות MATLAB ו-Simulink נוספו פונקציות ואפליקציה לכיול מצלמה (שערוך הפרמטרים האינטרינזים, האקסטרינזים, ועיוות העדשה); נוסף מחלץ פיצ'רים בשיטת Histogram of Oriented Gradients (HOG); נוספה תמיכה בהמרה אוטומטית לקוד C  באמצעות ה-MATLAB Coder עבור 12 פונקציות ו-System Objects וביניהם detectSURFFeatures, disparity, detectMSERFeatures, detectFASTFeatures, extractFeatures, vision.CascadeObjectDetector, vision.PeopleDetector ו-vision.PointTracker.
* Phased Array System Toolbox – הכלי משמש לתכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות Ultrasound ומערכות תקשורת מרובות-אנטנות, וכעת רוב הפונקציות וה-System Objects הנכללות בו ניתנות להמרה אוטומטית לקוד C/C++ באמצעות ה-MATLAB Coder. 

בין היכולות החדשות בתחום ה-Code Generation:
* MATLAB Coder – הכלי המאפשר יצירת קוד C/C++ בצורה אוטומטית מתוך קוד MATLAB תומך כעת בעוד מגוון פונקציות ו-System Objects, וביניהן 12 מה-Computer Vision System Toolbox ופונקציות ו-System Objects מה-Phased Array System Toolbox ומה-Statistics Toolbox; נוספה תמיכה בפונקציית parfor לצורך יצירת קוד Stand-alone המסוגל לפעול על מספר ליבות במקביל.
* HDL Coder – הכלי המאפשר יצירת קוד VHDL/Verilog מתוך MATLAB ו-Simulinl תומך כעת ביצירת קוד HDL מתוך System Objects שפותחו על ידי המשתמש; הכלי מאפשר כעת יצירת קוד בצורה אינקרמנטלית ממודלים העושים שימוש ב-Model Reference; נוספה תמיכה ביצירת קוד עבור Xilinx Zynq ו-ZedBoard.

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