פורמטים של נתונים

אנדרואיד משתמשת במגוון רחב של פורמטים של נתוני אודיו באופן פנימי, וחושפת תת-קבוצה של אלה בממשקי API ציבוריים, פורמטים של קבצים ובשכבת הפשטה של ​​החומרה (HAL).

נכסים

פורמטי נתוני האודיו מסווגים לפי המאפיינים שלהם:

דְחִיסָה
לא דחוס , דחוס ללא אובדן , או דחוס עם הפסד . PCM הוא פורמט האודיו הלא דחוס הנפוץ ביותר. FLAC הוא פורמט דחוס ללא אובדן, בעוד MP3 ו-AAC הם פורמטים דחוסים עם אובדן.
קצת עומק
מספר ביטים משמעותיים לכל דגימת אודיו.
גודל מיכל
מספר הביטים המשמשים לאחסון או שידור דגימה. בדרך כלל זה זהה לעומק הסיביות, אבל לפעמים סיביות ריפוד נוספות מוקצות ליישור. לדוגמה, דוגמה של 24 סיביות יכולה להיכלל בתוך מילה של 32 סיביות.
יישור
אם גודל המיכל שווה בדיוק לעומק הסיביות, הייצוג נקרא packed . אחרת, הייצוג יפורק . הסיביות המשמעותיות של הדגימה בדרך כלל מיושרות עם הסיביות השמאלית ביותר (המשמעותית ביותר) או הימנית ביותר (הפחות משמעותית) של המיכל. מקובל להשתמש במונחים ארוז ופרק רק כאשר עומק הסיביות אינו חזק של שניים .
חתימה
בין אם הדוגמאות חתומות או לא חתומות.
יִצוּג
נקודה קבועה או נקודה צפה; ראה למטה.

ייצוג נקודה קבועה

נקודה קבועה היא הייצוג הנפוץ ביותר עבור נתוני שמע PCM לא דחוסים, במיוחד בממשקי חומרה.

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

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

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

|largest negative value| = |largest positive value| + 1

סימון Q ו-U

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

אמ . n הוא עבור מספרים ללא סימנים: m סיביות שלמות ו- n סיביות חלקיות, וה-"U" נחשב כאפס ביטים. המספר הכולל של סיביות הוא m + n .

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

ייצוג נקודה צפה

נקודה צפה היא חלופה לנקודה קבועה, שבה מיקום הנקודה יכול להשתנות. היתרונות העיקריים של נקודה צפה כוללים:

  • מרווח ראש וטווח דינמי גדולים יותר; אריתמטית נקודה צפה סובלת מעבר לטווחים נומינליים במהלך חישוב ביניים, ורק מהדקת ערכים בסוף
  • תמיכה בערכים מיוחדים כמו אינסוף ו-NaN
  • קל יותר לשימוש במקרים רבים

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

פורמטים של אנדרואיד לאודיו

הפורמטים העיקריים של אנדרואיד לאודיו מפורטים בטבלה שלהלן:

סִמוּן
תכונה Q0.15 Q0.7 1 Q0.23 Q0.31 לָצוּף
מְכוֹלָה
ביטים
16 8 24 או 32 2 32 32
חתיכות משמעותיות
כולל שלט
16 8 24 24 או 32 2 25 3
חדר ראשי
ב-dB
0 0 0 0 126 4
טווח דינמי
ב-dB
90 42 138 138 עד 186 900 5

לכל הפורמטים של נקודות קבועות למעלה יש טווח נומינלי של -1.0 עד +1.0 פחות LSB אחד. יש יותר ערך שלילי אחד מערך חיובי עקב ייצוג המשלים של השניים.

הערות שוליים:

  1. כל הפורמטים שלמעלה מבטאים ערכים לדוגמה חתומים. פורמט 8 סיביות נקרא בדרך כלל "לא חתום", אבל הוא למעשה ערך חתום עם הטיה של 0.10000000 .
  2. Q0.23 עשוי להיות ארוז ל-24 סיביות (שלושה בתים של 8 סיביות, אנדיאן קטן), או לפרוק ב-32 סיביות. אם הם פורקים, הביטים המשמעותיים מוצדקים לכיוון ה-LSB עם ריפוד הרחבת סימן לכיוון ה-MSB (Q8.23), או מוצדקים שמאלה לכיוון ה-MSB עם מילוי אפס לכיוון ה-LSB (Q0.31). Q0.31 מאפשר תיאורטית עד 32 סיביות משמעותיות, אך ממשקי חומרה שמקבלים Q0.31 רק לעתים רחוקות משתמשים בכל הסיביות.
  3. לנקודה צפה בעלת דיוק יחיד 23 סיביות מפורשות פלוס ביט מוסתר אחד וסיבית סימן, וכתוצאה מכך 25 סיביות משמעותיות בסך הכל. למספרים לא נורמליים יש פחות ביטים משמעותיים.
  4. נקודה צפה בעלת דיוק יחיד יכולה לבטא ערכים של עד ±1.7e+38, מה שמסביר את מרווח הראש הגדול.
  5. הטווח הדינמי המוצג מיועד לדינורמלים עד לערך המרבי הנומינלי ±1.0. שים לב שחלק מיישומי נקודה צפה ספציפית לארכיטקטורה כגון NEON אינם תומכים בדנורמליות.

המרות

חלק זה דן בהמרות נתונים בין ייצוגים שונים.

המרות נקודה צפה

כדי להמיר ערך מ-Q m . n פורמט לנקודה צפה:

  1. המר את הערך לנקודה צפה כאילו הוא מספר שלם (על ידי התעלמות מהנקודה).
  2. הכפל ב -2- n .

לדוגמה, כדי להמיר ערך פנימי של Q4.27 לנקודה צפה, השתמש ב:

float = integer * (2 ^ -27)

המרות מנקודה צפה לנקודה קבועה פועלות לפי הכללים הבאים:

  • לנקודה צפה בעלת דיוק יחיד טווח נומינלי של ±1.0, אך הטווח המלא עבור ערכי ביניים הוא ±1.7e+38. המרה בין נקודה צפה לנקודה קבועה עבור ייצוג חיצוני (כגון פלט להתקני שמע) תשקול רק את הטווח הנומינלי, עם הידוק עבור ערכים החורגים מטווח זה. בפרט, כאשר +1.0 מומר לפורמט של נקודה קבועה, הוא מהודק ל-+1.0 פחות LSB אחד.
  • דנורמליות (תת-נורמליות) ושניהם +/- 0.0 מותרים בייצוג, אך עשויים להיות מומרים בשקט ל-0.0 במהלך העיבוד.
  • אינסוף יעבור דרך פעולות או שיוגבל בשקט ל-+/- 1.0. בדרך כלל האחרון מיועד להמרה לפורמט של נקודה קבועה.
  • התנהגות NaN אינה מוגדרת: NaN עשוי להתפשט כ-NaN זהה, או עשוי להיות מומר ל-NaN ברירת מחדל, עשוי להיות מוגבל בשקט ל-+/- 1.0, או להמיר בשקט ל-0.0, או לגרום לשגיאה.

המרות נקודות קבועות

המרות בין Q m שונים. n פורמטים פועלים לפי הכללים הבאים:

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

לדוגמה, כדי להמיר ערך Q4.27 ל-Q0.15 (ללא תנועות או עיגול), הזז ימינה את ערך Q4.27 ב-12 סיביות, והצמד את כל התוצאות החורגות מטווח הסימנים של 16 סיביות. זה מיישר את הנקודה של ייצוג Q.

כדי להמיר Q7.24 ל-Q7.23, בצע חלק בסימן ב-2, או הוסף באופן שווה ערך את סיביות הסימן לכמות ה-Q7.24 השלם, ולאחר מכן סימן תזוזה ימינה ב-1. שים לב שהסטה פשוטה עם סימן ימינה אינה שווה ערך ל חלק חתום ב-2.

המרות חסרות אובדן והפסד

המרה היא ללא הפסדים אם היא ניתנת להפיכה : המרה מ- A ל- B ל- C מביאה ל- A = C . אחרת ההמרה אובדת .

המרות ללא אובדן מאפשרות המרת פורמט הלוך ושוב .

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