Calculator 73
Scaling factor
Calculator 75
Sum of
Absolute
Calculator 74
First order
Lowpass Filter 76
Output gain
Scaling unit 77
Short-term
Postfilter 72
Long-term
Postfilter 71
Postfiltered
Speech
Decoded
Speech
From postfilter adaptor (block 35)
شکل (۳-۴) : طرح بلوکی پست فیلتر
پست فیلتر زمان- بلند (۷۱ ) که گاهی پست فیلتر pitch نامیده می شود ، یک فیلتر شانه ای[۲۸] است که پیکهای طیفی آن در مضارب فرکانس pitch صحبتی که باید پست فیلتر شود ، واقع شده است . پریود pitch را میتوان از صحبت دیکد شده با بهره گرفتن از یک آشکارساز pitch استخراج کرد. اگر p پریود pitch (به نمونه) بدست آمده از آشکارساز pitch باشد ، آنگاه تابع انتقال پست فیلتر زمان-بلند بصورت زیر میتواند بیان شود :
که درآن ضرایب gl ،,b وپریود pitch در تطبیق دهنده پست فیلتر ساخته ودر هر ۴بردار (یک فریم) تجدید می شوند .
پست فیلتر زمان-کوتاه (۷۲) شامل یک فیلتر مرتبه۱۰ صفر-قطب بدنبال یک فیلتر تمام-صفر مرتبه ۱ است . فیلتر مرتبه ۱۰ صفر-قطب ، مؤلفه های فرکانسی بین پیک های فرمنت را تضعیف می کند . در حالیکه فیلتر مرتبه اول تمام- صفر می کوشد تا پاسخ فرکانسی فیلتر صفر-قطب مرتبه ۱۰ را هموار سازد .
فرض کنید که ai ,i=1,2,…,۱۰ ضرایب LPC مرتبه ۱۰ وK1 اولین ضریب انعکاس حاصل از آنالیزمعکوس LPC صحبت دیکد شده باشند آنگاه ai وK1 را میتوان باهم از آنالیز PC معکوس مرتبه ۵۰ (بلوک ۳۳ در شکل(۳-۲) ) بدست آورد . فقط باید تکرار Durbin مرتبه ۵۰ را در مرتبه ۱۰ متوقف کرده وضرائب فوق را ذخیره کرد و
سپس تکرار Durbin را از مرتبه ۱۱ تا ۵۰ ادامه داد .
تابع انتقال پست فیلتر زمان-کوتاه بصورت زیر است :
که در آن ضرایب ai ,bi در هر فریم یک بار و در اولین بردار آن تجدید می شوند . در حالت کلی بعد از اینکه صحبت دیکد شده از پست فیلتر زمان-بلند و زمان-کوتاه می گذرد ، صحبت فیلتر شده همان انرژی اولیه را نداردو بدین منظور بلوکهای ۷۳ تا ۷۷ کار کنترل اتوماتیک بهره وحفظ انرژی صحبت را انجام می دهند .
فصل ۴
شبیه سازی ممیزثابت الگوریتم به زبان C
۴-۱- مقدمه
شبیه سازی یک الگوریتم بر روی کامپیوتر بوسیله یک زبان سطح بالا مانند C،گام نخست جهت پیاده سازی آن الگوریتم برروی DSP بشمار می رود . همانطور که در فصل ۵ بیان خواهد شد، با توجه به پیاده سازی کدک G.728 برروی DSP های ممیزثابت ، لازم است که ابتدا آلگوریتم کدک را بصورت ممیزثابت شبیه سازی نماییم. در این فصل ابتدا ویژگی های برنامه نویسی ممیز ثابت را شرح میدهیم . سپس ساده سازی محاسبات برای برنامه نویسی ممیزثابت را بیان نموده و پس از آن بلوک ها ومتغییرهای برنامه را به اختصار شرح می دهیم. در قسمت آخر هم روندنمای برنامه اینکدر و دیکدر را توصیف می کنیم .
۴-۲- ویژگی های برنامه نویسی ممیز ثابت
۴-۲-۱- نمایش اعداد
واحد پایه در پیاده سازی ۱۶ بیتی ، کلمه ۱۶ بیتی است که برای اعداد صحیح علامت دار بین ۳۲۷۶۷ تا ۳۲۷۶۸- تغییر می کند و بصورت مکمل ۲ ذخیره می گردد. برای نمایش اعداد اعشاری یک نقطه اعشاری بایدبین دوبیت کلمه در نظر گرفته شود .مثلاً برای نمایش اعداد بین - ۱ ,+۱ بایستی نقطه اعشاری بین بیت های ۱۴و۱۵ قرار گیرد. این فرمت خاص Q15 نامیده می شود زیرا ۱۵ بیت در سمت راست نقطه اعشاری وجود دارد . Qn فرمت بدین صورت تعریف می شود که n بیت در سمت راست نقطه اعشاری وجود داشته باشد . اعداد صحیح بصورت Q0 نمایش داده می شوند.
برخی داده ها به دقت بیشتری نیاز دارند از اینکه با یک کلمه ۱۶ بیتی نمایش داده شوند . مانند رجیسترهای ضرب و اکومولاتور در چیپ های DSP که می توانند اعداد با دقت از ۱ تا را نمایش دهند که به دقت مضاعف معروف است .
برخی داده ها رنج وسیعتری دارند از اینکه بتوان با یک فرمت ۱۶ بیتی ثابت نمایش داده شوند . شاید ۱۶ بیت دقت کافی باشد ولی باید از مقیاس کردن دینامیک استفاده شود. این نوع داده ها را می توان بصورت ممیز شناور و با دقت معمولی نشان داد . یعنی اینکه داده با ۲ کلمه نشان داده می شود، اولین کلمه حاوی عددی است که اندازه آن بین ۱۶۳۸۴و۳۲۷۶۷ می باشد . این مانتیس مقدار است و می گوئیم که مقدارش در فرمت نرمالیزه نمایش داده می شود اگر مقدار مثبت باشد ، بیت ۱۴ مانتیس ۱ است . کلمه دوم حاوی تعداد شیفت به چپ (NLS [۲۹]) هایی است که بکار رفته تا عدد را در مقدار نرمالیزه اش قرار دهد .
بنابراین کلمه دوم مشخص کننده Q فرمت مانتیس می باشد. اگر این فرمت برای یک مقدار منفرد بکار رود ممیز شناور اسکالر نامیده می شود . همچنین امکان دارد که یک آرایه از n مقدار را با n+1 کلمه، با بهره گرفتن از ممیز شناور بلوکی نمایش داد. با بهره گرفتن از این فرمت ، بزرگترین مقدار در آرایه باید به همان صورتی که برای ممیز شناور اسکالر گفته شد ، نمایش داده شود . بقیه مقادیر در آرایه باید از همان NLS استفاده کنند و مانتیس آنها لزوما نباید در فرمت نرمالیزه باشد. گسترش این نمایش بصورت ممیز شناور بلوکی قسمت شده می باشد . در این حالت یک آرایه mn مقداری بوسیله m(n+1) کلمه نمایش داده می شود . این آرایه تقسیم می شود به m زیر آرایه با اندازه n ،که هر زیر آرایه بصورت ممیز شناور بلوکی با n کلمه برای اندازه ها و ۱ کلمه برای NLS نمایش داده می شود .
نوع دیگری از نمایش بکار رفته بصورت ممیز شناور با دقت مضاعف است. در این حالت اعداد صحیح با دقت مضاعف بعنوان مانتیس بکار می روند و یک کلمه با دقت معمولی برای NLS استفاده می شود. در مجموع انواع مختلف نمایش ها عبارتند از ممیز ثابت با دقت معمولی، ممیز ثابت با دقت مضاعف برای اکومولاتورها و رجیسترهای ضرب، ممیز شناور اسکالر با دقت معمولی و ممیز شناور بلوکی با دقت معمولی و مضاعف.
۴-۲-۲- عملیات حسابی
از آنجا که ضرب دو کلمه ۱۶ بیتی یک عدد ۳۲ بیتی تولید می کند، رجیسترهای ضرب و اکومولاتور ها باید حداقل ۳۲بیتی باشند . در محاسبات مجموع حاصلضرب ها مانند کانولوشن و فیلتر کردن IIR,FIR ممکن است که آکومولاتور سرریز (overflow) شود که بطور جداگانه مشخص می گردد . در فیلتر کردن IIR مجموع حاصلضربها یا نتیجه عملیات ضرب و انباشت (MAC) بخشی از حافظه فیلتر برای مرحله بعدی است و ۱۶ بیت بالای خروجی در ورودی ضرب کننده استفاده می شود . یک سرریز که موجب می شود تا یک عدد بزرگ مثبت به یک عدد بزرگ منفی تبدیل شود، موجب اختلاف زیادی در خروجی فیلتر می گردد . از اینرو از مد اشباع در فیلترهای IIR استفاده می کنیم . مد اشباع یعنی اینکه اگر کلمه بالایی بزرگتر از ۳۲۷۶۷ یاکوچکتراز۳۲۷۶۸- باشد آنگاه مقدار آن برش می خورد (به این دو حد محدود می گردد).
الف- شیفت و رند کردن
حاصلضرب یک مقدار Qn فرمت در یک مقدار Qm فرمت در رجیستر حاصلضرب بصورت (n+m) Q فرمت و با دقت مضاعف ذخیره می شود . اگر لازم باشد که این نتیجه ذخیره گردد یا با دقت دیگری جمع شود ، آنگاه نتیجه باید شیفت داده شود و یا رند گردد تا به دقت مناسب برسد . نکته ای که در عملیات شیفت به راست مکمل ۲ وجود دارد اینست که فرض کنید عدد۳ را یک بیت به راست می خواهیم شیفت دهیم، نمایش ۱۶ بیتی ۳ بصورت ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۱ است که بعد از شیفت، به ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ تبدیل می گردد .
حال اگر عدد۳ - را بخواهیم یک شیفت به راست دهیم داریم :
-۳=۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱ >>1 1111111111111110=-2
در این حالت اندازه مقادیربا هم برابر نیستند و در پیاده سازی باید از این نکته آگاه بود .
همچنین ممکن است که در یک الگوریتم تعداد شیفت به راست از اندازه کلمه بیشتر گردد . مثلا یک کلمه ۱۶ بیتی باندازه ۱۸ بیت شیفت داده شود که با انجام ۱۸ بار شیفت یک بیتی حاصل ۰ یا ۱- می شود البته بسته به علامت اولیه آن عدد. اما در بعضی از کمپایلر ها ممکن است که این کار خطا گرفته شود و این موضوع را باید در نظر داشت .
رند کردن فرایند تبدیل از دقت مضاعف به دقت معمولی در اکومولاتور است. که قبل از ذخیره به صورت ۱۶ بیتی در حافظه ،صورت می گیرد. معمولا با ارزشترین بیت (MSB) در کلمه پایین اکومولاتور چک می شود، اگر این بیت ۱ باشد آنگاه یکی به مقدار کلمه بالایی اضافه می شود و این کلمه بعنوان حاصل رند کردن در نظر گرفته می شود . البته در این حالت باید از سرریز نشدن اکومولاتور مطمئن شد .
ب- تقسیم
تقسیم به اندازه جمع و ضرب زیاد استفاده نمی شود . تنها تقسیمی که بکار می رود بصورت ممیز شناور اسکالر می باشد .صورت و مخرج و خارج قسمت به فرمت نرمالیزه نمایش داده می شوند . NLS خارج قسمت با تفریق NLS مخرج از NLS صورت و جمع با ۱۴ محاسبه می شود . چرا که اگر صورت کمی از مخرج بزرگتر باشد و هر دو دارای NLS=0 باشند خارج قسمت باید دارای NLS=14 باشد تا بصورت صحیح نرمالیزه باشد. اگر مانتیس صورت کوچکتر از مانتیس مخرج باشد آنگاه صورت یکی به چپ شیفت داده می شود و به NLS آن یکی اضافه می شود سپس NLS مخرج محاسبه می گردد و این تضمین می کند که مانتیس خارج قسمت بصورت نرمالیزه باشد.
۴-۳- ساده سازی محاسبات الگوریتم
در این قسمت لازم است که برخی از محاسبات الگوریتم را برای پیاده سازی ممیز ثابت مناسب ساخته و بار محاسباتی آنها را کاهش دهیم .
۴-۳-۱- تطبیق دهنده بهره