Stream Processingבתוך ,MATLAB האצת ביצועי אלגוריתמי עיבוד אות ,תמונה ווידאו ב fixed-point-ויצירה אוטומטית של קוד Cמתוכם רועי פן ,מהנדס אפליקציה ,סיסטמטיקס בע"מ [email protected] משתמשי MATLABיכולים לייצר בפקודה אחת קוד Cמתוך קוד ה MATLAB-שלהם .אולם למרות התמיכה ביותר מ 300-פונקציות ואופרטורים של 110 ,MATLABפונקציות מה- Fixed-Point Toolboxו 40-פונקציות מה ,Signal Processing Toolbox-יצא לי לפגוש במשך השנים מספר רב של משתמשים שטענו שאוסף הפונקציות והאופרטורים הזה, המכונה ,Embedded MATLABאינו מספיק עבורם .אותם אנשים הסבירו כי באלגוריתמים שלהם קיימות פונקציות שאינן ברשימת הפונקציות והאופרטורים המותרים בשימוש, וכתוצאה מכך אינם יכולים להמיר בקלות את האלגוריתמים הללו לקוד Cאו להאיץ סימולציות .fixed-point בדרך כלל הייתי מציע לאותם מפתחים מספר פתרונות אפשריים: .1יצירת גרסה קומפטבילית מבחינת Embedded MATLABשל הפונקציות הבעייתיות .למשל ,פונקצית ,edgeהשייכת ל,Image Processing Toolbox- ניתנת למימוש על ידי שתי פעולות קונבולוציה דו-מימדית ) (conv2של התמונה עם הגרעין המתאים ,כפי שניתן לראות בתמונה מספר .1כתיבת הגרסה כרוכה בהשקעה מסוימת ,אולם מדובר בהשקעה חד פעמית שניתן לעשות בה שימוש חוזר בפרויקטים נוספים. .2חיפוש גרסה קומפטבילית באינטרנט .למשל ,אני יכול להעיד שבמקום לכתוב גרסה קומפטבילית משלה ,אחת מהחברות בארץ עושה בימים אלה שימוש בגרסה ל- medfilt2שהועלתה לאתר שיתוף הקבצים של .MathWorks .3שילוב של מימוש בקוד Cשל הפונקציות הבעייתיות בתוך קוד ה.MATLAB- .4יצירת קוד Cרק מתוך החלק הקומפטבילי של האלגוריתם. .5שימוש ב Simulink-לפיתוח האלגוריתם ,בו רוב אבני הבניין קומפטביליות מבחינת יצירת קוד. .6המתנה עד ש MathWorks-תרחיב את האוסף של הפונקציות והאופרטורים הנתמכים. תמונה 1 באשר לחלופה האחרונה ,הרי שכל מי שהמתין להרחבת משפחת הEmbedded - MATLABישמח לדעת שהחל מגרסת R2010aשל כלי ,MathWorksשיצאה בתחילת חודש מרץ ,ניתן לייצר קוד Cמתוך עוד עשרות פונקציות מתחום עיבוד האות ,התמונה והוידאו .הדבר מתאפשר באמצעות שימוש באובייקטי מערכת ) ,(System Objectsשהם כלים ואלגוריתמים בסביבת MATLABהמאפשרים עיבוד רצף ),(Stream Processing מידול מורחב במיוחד ב fixed-point-וכפי שצוין -יצירת קוד .למעשה ,אובייקטי מערכת 1 מייצגים אלגוריתמים מבוססי זמן ומאפשרים גישה לאותם פרמטרים ,טיפוסים נומריים וביצועים המוכרים מהבלוקים של ה Signal Processing Blockset-ושל הVideo and - .Image Processing Blocksetוכל זאת -ללא צורך בידע ב ,Simulink-ועבור חלק מהפונקציונליות – אפילו ללא צורך ברישיון ל .Simulink-ובמספרים ,אובייקטי מערכת מאפשרים להשתמש במעל 80אלגוריתמים וכלים מהSignal Processing Blockset- ובמעל 60אלגוריתמים וכלים מה Video and Image Processing Blockset -גם בסביבת .MATLABהם מוגדרים באמצעות שיטת המחלקות ) (classesשל ,MATLABוניתן להשתמש בהם הן מתוך תוכניות MATLABוהן מתוך מודלים של ) Simulinkבאמצעות בלוק ה.(Embedded MATLAB Function- לסיכום ,אובייקטי מערכת מאפשרים: • שימוש משולב ב MATLAB-ו Simulink-לייצוג מערכות דינמיות ,בזמן רציף ובזמן בדיד. • ממשק אידיאלי להתחברות לחומרה לרכישת מידע ולפיתוח אלגוריתמים המיועדים להזרמת מידע בצורה מדויקת ויעילה. • יכולות floating-pointו fixed-point-המרחיבות את ה.Fixed-Point Toolbox- • הרחבת יכולות יצירת הקוד מתוך משפחת ה Embedded MATLAB-למערכות משובצות מחשב עם אלגוריתמים מורכבים ומגוון חומרות-יעד. 2 הגדרת אובייקטי מערכת ,מתודות שימושיות ,עיבוד מבוסס דגימות /מסגרות ניתן ליצור instanceאחד או יותר של אובייקטי מערכת בשורת הפקודה של MATLABאו בקובץ .MATLABכדי ליצור instanceשל אובייקט ,FFTשמבצע חישוב של התמרת פוריה מהירה ) ,(Fast Fourier Transformיש להשתמש בפקודה: ;hFFT = signalblks.FFT כאשר hFFTהוא ה handle-לאובייקט המערכת החדש ) FFTשם האובייקט( ,ו- signalblksהוא שם ה .Signal Processing Blockset) package-ניתן גם להשתמש ב- videoעבור ה.(Video and Image Processing Blockset- הצגת רשימת ערכי ברירת המחדל של כל המאפיינים של אובייקט המערכת הנ"ל מתאפשרת על ידי הקלדת שם ה ,hFFT) handle-במקרה הנדון( ,ולחילופין – ניתן לצפות בערך של מאפיין ספציפי ,וזאת על ידי הקלדת שם המאפיין אחרי שם ה) handle-למשל, עבור מאפיין ה TwiddleFactorComputation-במקרה הנדון ,יש להקיש .(hFFT.TwiddleFactorComputation קל להתרשם כי מאפייני אובייקט המערכת הנדון מאפשרים שליטה דומה לזו שמאפשר בלוק ה FFT-של ה) Signal Processing Blockset-תמונה .(2 תמונה 2 3 ניתן לשנות את המאפיינים של אובייקט מערכת כך שישקף את האלגוריתם שאותו רוצים למדל )כאן המקום לציין שמאפיינים מסוימים ניתנים לשינוי אפילו במהלך ריצת האלגוריתם(. רוב המאפיינים הינם גלויים תמיד ,בעוד שמספר מאפיינים רלוונטים רק כאשר מאפיינים אחרים מכילים ערכים מסויימים .כאשר מאפיין אינו רלוונטי ,הוא אינו מוצג ,אך עדיין ניתן לגשת אליו באמצעות המתודה ,getולשנות אותו עם ) setתתקבל הודעת אזהרה במצב זה( .מספר מאפיינים הינם בעלי מספר מוגבל של ערכים ,ועבורם ניתן להשתמש בהשלמה עם tabכדי לקבוע אילו ערכים אפשריים )תמונה ,(3ולאחר מכן לבחור את הערך הרצוי. תמונה 3 כל אובייקט מערכת תומך בארבע המתודות הבאות: - stepהמתודה משתמשת בקלטים של אובייקט המערכת כדי לחשב את .1 הפלטים ולעדכן את המצבים הפנימיים שלו .הסינטקס של מתודה זו משתנה כתלות בסוג האובייקט שעליו היא פועלת -היא נטולת קלטים עבור אובייקט מקור ) ,(sourceונטולת פלטים בעת עיבוד של אובייקט מוצא ) .(sinkמתודה זו מאתחלת כל משאב נדרש .ברגע שבו היא נקראת ,מפרט ה input-לא ניתן לשינוי )מימדים ,טיפוס מידע ,היותו מרוכב או לא( ,ובמהלך ביצוע ,מתודה זו מונעת שינוי של מאפיינים שאינם ניתנים לכיוונון. – resetהמתודה מאתחלת את המצבים הפנימיים של אובייקט לערכי ההתחלה .2 שלו. – getNumInputsהמתודה מחזירה סקלר שלם המייצג את מספר הקלטים .3 שהמתודה stepמצפה לקבל. – getNumOutputsהמתודה מחזירה סקלר שלם המייצג את מספר הפלטים .4 המרבי של המתודה .step פרט לאלה ,קיימות מתודות המקור והמוצא הבאות: - isDoneעבור אובייקטי מקור בעלי יכולות "סוף מידע" )למשל" :סוף קובץ" – • ,(EOFהמתודה מחזירה trueלוגי כאשר הקריאה הכי עדכנית ל step-מגיעה למצב של "סוף מידע" .היא מחזירה falseאם לא הגיע סוף המידע או אם לאובייקט המקור אין יכולות של "סוף מידע" )למשל ,עבור .(signalblks.AudioPlayer - closeהמתודה משחררת משאבים שנתפסו על ידי האובייקט ,כמו handles • לקבצים device drivers ,וזיכרון ,וזאת לפני שהאלגוריתם מגיע לסוף הפונקציה או הסקריפט. כידוע ,סיגנלים יכולים להגיע מערוץ אחד או ממספר ערוצים ,וניתן לעבד סיגנלים בזמן בדיד "דגימה-דגימה" או "מסגרת-מסגרת" .אם סיגנל מעובד "דגימה-דגימה" ,ולא כ"אוסף של דגימות אחרי אוסף של דגימות" ,העיבוד נקרא "עיבוד מבוסס דגימות" )ואחרת – "עיבוד מבוסס מסגרות"( .בעיבוד מבוסס מסגרות מעובדת מסגרת בכל רגע זמן ,כשכל מסגרת מכילה אוסף דגימות מערוץ בודד או ממספר ערוצים .אובייקטי מערכת תומכים בעיבוד מבוסס מסגרות ,וזו גם ברירת המחדל )כיוון שעיבוד מבוסס מסגרות מאיץ את ביצועי הסימולציה ואת הריצה בזמן-אמת( .על מנת לבצע עיבוד מבוסס דגימות ,יש לשנות את מאפיין ה FrameBasedProcessing-מ true-ל.false- 4 עיבוד זרם מידע באמצעות אובייקטי מערכת ,מספר משתנה של קלטים ופלטים ,שינוי מאפיין במהלך ריצה אובייקטי מערכת מעבדים מקטעים של זרמי מידע בצורה איטרטיבית ,ובכך פוטרים מהצורך לשמור מערכי מידע גדולים בזכרון או מהצורך להמתין זמן רב לקבלת תוצאות העיבוד של תחילת זרמי המידע .קל לעבוד עם אלגוריתמים לעיבוד זרמי מידע בשילוב עם אובייקטי מערכת ,יש פחות סיכוי לשגיאות תכנות בשיטת העבודה הזו ,והקוד הנוצר באופן הזה קריא יותר וברור יותר .אובייקטי מערכת מספקים רבים מהיתרונות של תכנות מונחה עצמים, דוגמת כימוס ) .(encapsulationהם שומרים את מצבי האלגוריתמים והפרמטרים ,ובכך מאפשרים עיבוד של זרם רצוף של מידע ללא צורך בניהול מצבי האלגוריתם בין איטרציה אחת של הלולאה והאיטרציה הבאה אחריה .דוגמה לעיבוד וידאו )(edge detection באמצעות MATLABמובאת בתמונה .4 תמונה 4 ניתן להתרשם שהחל מגרסת R2010aהמשתמש אינו צריך לדאוג עוד לקידום הפריימים של סיגנל הוידאו. חלק מאובייקטי המערכת מאפשרים מספר משתנה של קלטים ופלטים .יש צורך להגדיר מה המספר המדויק לפני עיבוד המידע )כלומר ,לפני לולאת העיבוד( ,ובזמן שהאובייקט רץ לא ניתן לשנות את גודל המידע ,טיפוסו ואת היותו מרוכב או לא .הדבר מאפשר לאובייקט לשמור על מצביו ולהקצות זכרון ,וכן מספק קוד יעיל. אם מאפיין של אובייקט מערכת מוגדר כ ,tunable-ניתן לשנות את ערכו במהלך ריצה .על מנת לדעת אם מאפיין כלשהו הינו כזה ,ניתן להיעזר ב help-מתוך שורת הפקודה .לדוגמה, כדי לדעת באילו תנאים מאפיין ה Amplitude-של אובייקט המערכת ) SineWaveמתוך ה- (signalblks packageמוגדר כ ,tunable-יש להשתמש בסינטקס: help signalblks.SineWave.Amplitude בנוסף לכך ,עמוד העזרה )הנפתח על ידי פקודת (docשל כל אובייקט מערכת מפרט עבור כל מאפיין האם הוא ניתן לשינוי במהלך ריצה. כשמפעילים את מתודת ,stepאובייקט המערכת מבצע אתחול ראשוני .האתחול נועל מאפיינים שאינם ניתנים לשינוי במהלך ריצה ,וכן הוא נועל מימדים ,מרוכבות וטיפוסי מידע של הקלטים .ניסיון לשינוי אחד מהמאפיינים שאינם ניתנים לשינוי במהלך ריצה או אחת מהגדרות הקלט יסתיים בהודעת אזהרה של אובייקט המערכת. 5 עבודה עם Embedded MATLAB כפי שנכתב לעיל ,אובייקטי מערכת מרחיבים את יכולות ,Embedded MATLABתת הקבוצה של שפת MATLABאשר נתמכת ליצירת קוד יעיל למערכות Embeddedולהאצת אלגוריתמים ב .fixed-point-מעל 50אובייקטי מערכת מתוך ה Signal Processing Blockset-וקרוב ל- 40אובייקטי מערכת של ה Video and Image Processing Blockset-תומכים ביצירת קוד ,וביניהם DCT ,EdgeDetector , FFT ,BlobAnalysisו .HoughTransform -הללו תומכים ביצירת קוד הן מתוך ,MATLABוהן מתוך בלוק הEmbedded MATLAB - functionשל .Simulinkלצורך יצירת הקוד יש לעשות שימוש בEmbedded MATLAB - ,Coderהמופעל על ידי הפונקציה emlcשנכללת בכלי Real-Time Workshopומאפשרת המרה של קוד MATLABישירות לקוד .C ניתן להיעזר במתודת getבאלגוריתם שמיועד להמרה לקוד ,Cאך לא במתודה .setניתן גם לקבל מאפיינים של אובייקט באמצעות ציון ה"נקודה" ) ,(a.bאך אסור לשנותם .מומלץ להגדיר את אובייקטי המערכת כמשתני ,persistentוכן מומלץ לקרוא ל constructor-בדיוק פעם אחת לכל מופע של אובייקט מערכת .פונקציה לדוגמה ,המבצעת ,edge detection מובאת בתמונה .5 תמונה 5 בעבר ,יצירת קוד לאלגוריתם המבצע edge detectionלוידאו היתה אפשרית רק על ידי מימושו עם הבלוק Edgeמתוך ה Video and Image Processing Blockset-או עם אבני בניין קומפטביליות )תמונה .(1החל מגרסת ,R2010aניתן לייצר קוד Cאוטומטית מתוך הפונקציה myedgeהמופיעה בתמונה ,5וזאת על ידי הגדרת קלט לדוגמה וקריאה לפונקציה emlcבאמצעות הסינטקס: ;))a=single(zeros(120,160 emlc -eg {a} myedge -report ניתן לקבל קוד איכותי יותר על ידי שימוש בReal-Time Workshop Embedded Coder- תוך הגדרת אובייקט קונפיגורציה בו יוגדרו מאפייני הקוד אותו רוצים לקבל. 6 עבודה עם טיפוסי מידע מסוג fixed-point למעלה מ 40-אובייקטי מערכת מתוך ה Signal Processing Blockset-וקרוב ל40- אובייקטי מערכת של ה Video and Image Processing Blockset-תומכים בעיבוד מידע מטיפוס ,fixed-pointוהינם בעלי מאפייני .fixed-pointאם אובייקט המערכת תומך בעבודה ב ,fixed-point-הדבר מוזכר לאחר רשימת המאפיינים שמתקבלת באמצעות הפעלת help בשורת הפקודה וכן מופיע בעמוד העזרה של האובייקט. למידע מורחב על מאפייני fixed-pointשל אובייקט ,יש להשתמש בסינטקס הבא בשורת הפקודה: <packagename>.<ObjectName>.helpFixedPoint למשל: video.EdgeDetector.helpFixedPoint ניתן להציג ולהעלים את מאפייני ה fixed-point-של אובייקטי מערכת בשורת הפקודה, באמצעות הפקודות הבאות )בהתאמה(: matlab.system.ShowFixedPointProperties matlab.system.HideFixedPointProperties או מתוך תיבת הדיאלוג של ה: preferences - File menu > Preferences > System Objects שינוי ערך של מאפיין fixed-pointמבוצע באופן הבא :ראשית ,נייצר רפרנס לאובייקט המבצע :threshold ;h = video.Autothresholder ואז ,נשנה ,למשל ,את מאפיין מוד העיגול: ;'h.RoundMode = 'ceiling כידוע Embedded MATLAB MEX ,היא פונקציה המקצרת את זמן הריצה של פונקציות MATLABעל ידי הפיכת קוד ה MATLAB-לפונקציות C-MEXהמכילות אופטימיזציות להאצה אוטומטית של אלגוריתמים ב fixed-point-למהירות של קוד Cמקומפל ,והכל בסביבת .MATLABלמשל ,עבור הפונקציה המופיעה בתמונה ,5יש להגדיר קלט לדוגמה ואז לקרוא לפונקציה emlmexבאמצעות הסינטקס: ;))a=single(zeros(120,160 emlmex -eg {a} myedge יש לזכור שעבודה עם טיפוסי מידע מסוג fixed-pointבסביבת MATLABמצריכה את ה.Fixed- Point Toolbox- מידע נוסף רשימה מלאה של אובייקטי המערכת נמצאת בתיעוד של הSignal Processing Blockset- )תמונה (6ושל ה . Video and Image Processing Blockset-עבור כל אובייקט מערכת, התיעוד מכיל מידע בדבר הפונקציונליות של אובייקט המערכת ,ברירות המחדל לשימוש באובייקט ,שימוש באובייקט באמצעות סינטקסים שונים ,רשימת שמות של מתודות )כל שורה מהווה בעצמה קישור למידע נוסף( ,ערכים אפשריים של מאפייני האובייקט ומתי ניתן לשלוט עליהם ,קישור לרשימת מאפייני ) fixed-pointבמידה ואובייקט המערכת תומך בפעולות ,(fixed-pointדוגמה לשימוש באובייקט המערכת וקישורים רלוונטים. מהנדסי האפליקציה של סיסטמטיקס בע"מ ,ואני ביניהם ,ישמחו לענות על כל שאלה בנוגע לחידוש המשמעותי הזה בגרסת ,R2010aשאמור להיות שימושי עבור רבים ממשתמשי MATLABבעולם ובארץ ,וביניהם כאלה העוסקים בתכנון מערכות אודיו ,ברכישת מידע, בפיתוח טלפונים ניידים ,קוצבי לב או מכשירי שמיעה ,באיתור אובייקטים ועקיבה אחריהם, בראיית stereoובסופר-רזולוציה. תמונה 6 7 8
© Copyright 2025