تبدیل نرخ نمونه برداری (Sampling Rate conversion)
چکیده
برای سیستمهای مختلف در زمینه صدای دیجیتال نرخ نمونه برداری مختلفی وجود دارد. به طور مثال برای سیستمهای پخش حرفهای از نرخ نمونه برداری 48 KHz و برای سیستمهای غیر حرفهای از نرخ نمونه برداری 44.1 KHz استفاده میشود. برای متصل کردن سیستمهایی که نرخ نمونه برداری متفاوتی دارند لازم است تا بتوان از یک بسته صدا با نرخ نمونه برداری خاص به یک بسته صدای دیگر با نرخ نمونه برداری دیگر رسید. به این عمل تبدیل (Sample Rate Convertion) گفته میشود. روشهای تبدیل نرخ نمونه برداری به دو دسته کلی تبدیل همزمان (Synchronous) با ضریب L/M و تبدیل غیر همزمان (ASynchronous) تقسیم میشود. در این مقاله به روشهای تبدیل همزمان پرداخته شده و یک روش مناسب برای بالا بردن سرعت تبدیل و کاهش حافظه مورد نیاز ارائه خواهد شد.
مبانی تبدیل نرخ نمونه برداری
تبدیل نرخ نمونه برداری به دو بخش UP Sampling و Down Sampling تقسیم میشود. برای انجام Up Sampling به Anti-Imaging و برای down Sampling به Anti-Aliasing نیاز میباشد برای انجام عمل Anti-Imaging و Anti-Aliasing احتیاج است تا یک سری از فرکانسهای اضافه حذف شود برای همین منظور باید از تبدیل فوریه برای تغییر از حالت زمان به حالت فرکانس، طبق فرمول تبدیل فوریه به شرح زیر استفاده شود.
و یا
برای افزایش نرخ نمونه برداری سیگنال x(n) → x(ejΩ) با ضریب L باید اول به شرح زیر تشکیل شود.
w(m) بر اثر افزایش تعداد نمونهها نسبت به x(n) یک سری فرکانس بزرگتر از L را به خود اضافه کرده است. برای حذف فرکانسهای اضافی به وجود آمده باید اطلاعات را با h(m) کانولوشن کنیم یا به عبارت دیگر باید در حالت فوریه آن را در H(ejΩ) ضرب کرد. که به شرح زیر است:
همانگونه که در فرمول بالا ملاحظه میشود فرکانسهای بیش از R/L حذف میشود. به عملی که در بالا انجام شد تا فرکانسهای بالاتر از R/L را حذف کند، در اصطلاح Anti-Imaging گفته میشود.
برای کم کردن نرخ نمونه برداری سیگنال دیجیتال لازم است تا بر عکس روال افزایش نرخ نمونه برداری عمل شود یعنی باید اول عمل Anti-Aliasing انجام شده و در ادامه تعدادی از نمونهها حذف شود برای انجام این مطلب (کم کردن نرخ نمونه برداری با ضریبM ) لازم است تا اطلاعات در تابع زیر ضرب شود:
با انجام این عمل فرکانسهای بالای M از بین میرود زیرا سیگنال به وجود آمده جدید دیگر نمیتواند فرکانس بالای M را نگهداری کند. بعد از انجام این عمل میتوان عمل کم کردن تعداد نمونهها را انجام داد.
تغییر نرخ نمونه برداری
برای پیادهسازی روشهای کاهش یا افزایش نرخ نمونه برداری مخصوصاً برای فرکانسهای حرفهای دو مشکل اساسی وجود دارد یکی بزرگ بودن بافر میانی و دیگری زمانبر بودن آن میباشد. این ویژگیها در سیستمهای سریع موجب کندی شده و مانع کارآمدی میشود. برای حل مسئله روشهای کارآمد و در عین حال سادهتری به کار گرفته میشود.
روش مورد نظر با یک مثال توضیح داده میشود.
فرض میشود صدایی با فرمت wave مشخصات زیر موجود است.
Sample Rate: 8000Hz
Bit per Sample: 16 bit
Channel count: 2
صدای خواسته شده با مشخصات به شرح زیر میباشد.
Sample Rate: 48000Hz
Bit per Sample: 16 bit
Channel count: 1
همانگونه که در مثال بالا مشاهده میشود خروجی از هر نظر با ورودی متفاوت است برای حل این مسئله باید اطلاعات ورودی از چند فیلتر به شرح زیر عبور کند.
طبق شکل بالا در ابتدا اطلاعات ورودی برای پردازش توسط قسمتهای بعدی از فرمت فایل wave (که به صورت عدد صحیح میباشد) به فرمت ممیز شناور تبدیل میشود در ماژولهایی که عمل پردازش سیگنال را انجام میدهند معمولاً از فرمت ممیز شناور استفاده میشود. در ادامه با استفاده از Wave Resampler نرخ نمونه برداری سیگنال تغییر میکند. در مرحله بعدی در صورت لزوم اطلاعات صدا با هم Mix میشوند و در آخر اطلاعات به دست آمده از فرمت داده ممیز شناور به فرمت فایل wave تبدیل میشود.
۱- فیلتر Wave Data To Floating-Point:
این فیلتر سه نرخ بیت(Bit Rate) PCM wave که 8bit و 16bit و 24bit میباشد را به فرمت ممیز شناور تبدیل میکند. نکته مهم در این تبدیل این است که در مدل 16 بیتی و 24 بیتی اطلاعات به صورت مکمل 2 ذخیره میشود. اما در مدل 8 بیتی روش دیگری را برای ذخیره اطلاعات دارد که در آن اطلاعات از 128- تا 127 روی 0 تا 255 قرار میگیرد به عبارت دیگر عدد 16(7F) در یک مدل 8 بیتی معادل صفر میباشد.
۲- فیلتر Wave Splitter:
این فیلتر اطلاعات را براساس تعداد کانال ورودی دستهبندی میکند به عبارت دیگر برای هر کانال یک بافر مجزا درست میکند.
۳- فیلتر Wave Resampler:
این فیلتر مسئولیت تبدیل نرخ نمونه برداری را دارد که در این مقاله به طور خاص به آن پرداخته میشود.برای انجام این کار لازم است تا اطلاعات به حوزه فرکانس برده شود (برای انجام این کار لازم است تا از تبدیل فوریه سریع با اندازه بافر متفاوت استفاده شود). و با تغییر اندازه بافر به حوزه زمان برگردانده شود.
فرض شود در مثال گفته شده لازم باشد تا یک ثانیه از اطلاعات را Resample شود. اطلاعات بعد از عبور از فیلترهای تبدیل به ممیز شناور و تکه کننده به این فیلتر رسیده است. این فیلتر نیز برای انجام کار خود از چند فیلتر دیگر به شرح زیر استفاده میکند.
در این فیلتر دادههای دریافتی پس از تبدیل فوریه در قسمت Repacker تبدیل نرخ نمونه برداری میشود.
به اندازه نصف Min (InputSize,OutputSize) از ابتدای ورودی در ابتدای خروجی ذخیره میشود و به همین اندازه از آخر ورودی در آخر خروجی ذخیره میشود. با انجام این عمل بافر جدید عکس تبدیل فوریه دلخواه میشود. لذا با انجام یک تبدیل فوریه عکس به حوزه زمان برگردانده میشود.
همانگونه که در شکل شماره 3 تا 8 مشاهده میشود عملی که در شکل شماره 2 بیان شد به طور عملی انجام شده است.
۴- فیلتر Wave Mixer:
این فیلتر مسئولیت دستهبندی اطلاعات را براساس کانالها دارد. به عبارت دیگر اطلاعات جدا شده در wave splitter را به هم میچسباند.
۵- فیلتر Floating-Point to Wave Data:
در این فیلتر اطلاعات به Wave Data تبدیل میشود برای اطلاع بیشتر به قسمت 1 مراجعه شود.
اما نکته مهم در انجام این کار احتمال سرریز کردن اطلاعات در اثر تبدیل است که برای حل این مشکل باید اطلاعات بزرگ را برای تبدیل از ممیز شناور به اطلاعات 16 بیتی ، اطلاعات بزرگتر از 16(0FFA) با 16(0FFA) عوض شود. برای اعداد منفی نیز چنین کاری لازم میباشد.
نتیجهگیری
روش عملی ارائه شده قابلیت استفاده در نرمافزارهای پخش را دارا میباشد.و در سیستمهای حرفهای دیگر نیز قابل استفاده میباشد.روش عملی ارائه شده نسبت به روش کلاسیک حدوداً 50 بار سریعتر میباشد. بنابراین به صورت زنده در سیستمهای صدا همزمان با پخش یا ضبط قابل استفاده میباشد.
نگارنده:
آرش جعفرزاده