چکیده
براي سيستمهاي مختلف در زمينه صداي ديجيتال نرخ نمونه برداري مختلفي وجود دارد. به طور مثال براي سيستمهاي پخش حرفهاي از نرخ نمونه برداري 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 احتياج است تا يك سري از فركانسهاي اضافه حذف شود براي همين منظور بايد از تبديل فوریه براي تغيير از حالت زمان به حالت فركانس ، طبق فرمول تبديل فوریه به شرح زير استفاده شود.
و یا
براي افزایش نرخ نمونه برداری سيگنال با ضريب L بايد اول به شرح زير تشكيل شود.
بر اثر افزایش تعداد نمونه ها نسبت به یک سری فرکانس بزرگتر از 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
همانگونه كه در مثال بالا مشاهده ميشود خروجي از هر نظر با ورودي متفاوت است براي حل اين مسئله بايد اطلاعات ورودي از چند فيلتر به شرح زیر عبور كند.
|
شکل(1) مجموعه فیلترهای تغییر نرخ نمونه برداری |
طبق شكل بالا در ابتدا اطلاعات ورودي براي پردازش توسط قسمتهاي بعدي از فرمت فايل wave (که به صورت عدد صحیح میباشد)به فرمت ممیز شناور تبديل ميشود در ماجولهایي كه عمل پردازش سيگنال را انجام ميدهند معمولاً از فرمت ممیز شناور استفاده ميشود. در ادامه با استفاده از Wave Resamplerنرخ نمونهبرداري سيگنال تغيير ميكند. در مرحله بعدي در صورت لزوم اطلاعات صدا با هم Mix ميشوند و در آخر اطلاعات بدست آمده از فرمت داده ممیز شناور به فرمت فايل wave تبديل ميشود.
1- فيلتر Wave Data To Floating-Point:
اين فيلتر سه نرخ بیت(Bit Rate)PCM wave كه 8bit و 16bit و 24bit ميباشد را به فرمت ممیز شناور تبديل ميكند. نكته مهم در اين تبديل اين است كه در مدل 16 بيتي و 24 بيتي اطلاعات به صورت مكمل 2 ذخيره ميشود. اما در مدل 8 بيتي روش ديگري را براي ذخيره اطلاعات دارد كه در آن اطلاعات از 128- تا 127 روي 0 تا 255 قرار ميگيرد به عبارت ديگر عدد (7F)16 در يك مدل 8 بيتي معادل صفر ميباشد.
2- فيلتر Wave Splitter:
اين فيلتر اطلاعات را براساس تعداد كانال ورودي دسته بندي ميكند به عبارت ديگر براي هر كانال يك بافر مجزا درست ميكند.
3- فيلتر Wave Resampler:
اين فيلتر مسئوليت تبديل نرخ نمونه برداري را دارد كه در اين مقاله به طور خاص به آن پرداخته ميشود. براي انجام این كار لازم است تا اطلاعات به حوزهي فركانس برده شود(برای انجام این کار لازم است تا از تبدیل فوریه سریع با اندازه بافر متفاوت استفاده شود). و با تغيير اندازهي بافر به حوزهي زمان برگردانده شود.
فرض شود در مثال گفته شده لازم باشد تا يك ثانيه از اطلاعات را Resample شود. اطلاعات بعد از عبور از فيلترهاي تبدیل به ممیز شناور و تکه کننده به اين فيلتر رسيده است. اين فيلتر نيز براي انجام كار خود از چند فیلتر دیگر به شرح زير استفاده ميكند.
|
|||
شکل(2) فیلترهای داخلی Wave Resampler |
در این فیلتر دادههای دریافتی پس از تبدیل فوریه در قسمت Repacker تبدیل نرخ نمونه برداری می شود.
به اندازه نصف Min(InputSize,OutputSize) از ابتداي ورودي در ابتداي خروجي ذخيره ميشود و به همين اندازه از آخر ورودي در آخر خروجي ذخيره ميشود. با انجام اين عمل بافر جديد عكس تبديل فوریه دلخواه ميشود. لذا با انجام یک تبدیل فوریه عکس به حوضه زمان برگردانده می شود.
همانگونه که در شکل شماره 3 تا 8 مشاهده میشود عملی که در شکل شماره 2 بیان شد به طور عملی انجام شده است
شکل(3) اطلاعات ورودی-یک ثانیه-نرخ نمونه برداری HZ8000 |
|
|
شکل(4) قسمت موهومی تبدیل فوریه |
شکل(5) قسمت حقیقی تبدیل فوریه |
|
|
شکل(6) قسمت موهومی تبدیل فوریهبعد از تغییر اندازه بافر |
شکل(7) قسمت حقیقی تبدیل فوریهبعد از تغییر اندازه بافر |
|
شکل(8) اطلاعات خروجی-یک ثانیه-نرخ نمونهبرداری HZ48000 |
4- فيلتر Wave Mixer:
اين فيلتر مسئوليت دسته بندي اطلاعات را براساس كانالها دارد. به عبارت ديگر اطلاعات جدا شده درwave splitter را به هم ميچسباند.
5- فيلتر Floating-Point to Wave Data:
در اين فيلتر اطلاعات به Wave Data تبديل ميشود براي اطلاع بيشتر به قسمت 1 مراجعه شود.
اما نكته مهم در انجام اين كار احتمال سرریز كردن اطلاعات در اثر تبديل است كه براي حل این مشکل بايد اطلاعات بزرگ را براي تبديل از ممیز شناور به اطلاعات 16 بيتي ، اطلاعات بزرگتر از (0FFA)16 با(0FFA)16 عوض شود. براي اعداد منفي نيز چنين كاري لازم ميباشد.
نتیجه گیری
روش عملی ارائه شده قابلیت استفاده در نرمافزارهای پخش را دارا میباشد. و در سیستمهای حرفهای دیگر نیز قابل استفاده میباشد. روش عملی ارائه شده نسبت به روش کلاسیک حدودا 50 بار سریعتر میباشد. بنابراین به صورت زنده در سیستمهای صدا همزمان با پخش یا ضبط قابل استفاده میباشد.
نویسنده:
آرش جعفرزاده