MMS-HW1-SpringSemester2014.pdf

‫بسمه تعالی‬
‫های‏چندرسانهای‏(‪)44-243‬‬
‫‏‬
‫‏‬
‫سیستم‬
‫تمرین ‪ :1‬آشنایی‏با ‪ Aliasing ،Sampling‬و ‪Quantization‬‬
‫دانشکده‏مهندسی‏کامپیوتر‬
‫دانشگاه‏صنعتی‏شریف‬
‫‪ 62‬بهمن‬
‫دکتر مهدی امیری‬
‫مقدمه ‏‬
‫همانگونه كه در درس با مفهوم سيگنال ديجيتال آشنا شديد‪ ،‬ديجيتال كردن سيگنال شامل دو مرحله نمونه‬
‫برداري‪ 1‬و كوانتيزه كردن‪ 2‬سيگنال است‪ .‬شما در اين تكليف با نمونه برداري سيگنال پيوسته در زمان و پديده‬
‫‪ aliasing‬و نيز كوانتيزه كردن سيگنال آشنا خواهيد شد‪ .‬همچنين اثرات اين پردازش را روي سيگنالهاي صوتي‬
‫بررسي خواهيد كرد‪.‬‬
‫آنچه كه بايستي تحويل داده شود شامل پاسخ سواالت مطرح شده در صورت تمرينها (در قالب يك گزارش با‬
‫فرمت‪ ،PDF‬نمودارها و شكلهاي خروجي ‪ m‬فايلها و خود ‪ m‬فايلها مي باشد‪ .‬لطفا تمامي فايل ها را به صورت‬
‫يك فايل فشرده‪ ،‬كه نام آن در قالب ‪ MM_HW1_LastName_StudentID‬باشد كه در آن به جاي‬
‫‪LastName‬نام خانوادگي شما و به جاي ‪ StudentID‬شماره دانشجويي شما قرار ميگيرد‪ ،‬به آدرس ايميل‬
‫درس به نشاني ‪ multimedia922@gmail.com‬بفرستيد‪ .‬لطفا عنوان ‪ email‬خود را همانند قالب فوق قرار‬
‫دهيد‪ .‬مهلت تحويل خروجي ها ساعت ‪ 25:32‬تاريخ ‪ 1522/12/14‬مي باشد‪.‬‬
‫‪Sampling‬‬
‫‪Quantization‬‬
‫‪1‬‬
‫‪2‬‬
‫‪ -1‬نمونه برداری‬
‫در این بخش از تمرین تمرکز ما بر روی نمونه برداری از یک سیگنال به منظور ذخیره سازی آن سیگنال و پخش آن‬
‫در متلب است‪ .‬یک سیگنال متناوب مانند سیگنال زیر را به عنوان پایه در نظر میگیریم‪:‬‬
‫)‬
‫(‬
‫(‬
‫)‬
‫) (‬
‫این سیگنال را در زمان ‪ ۰‬تا ‪ ۳‬ثانیه با ویژگیهای زیر در نظر بگیرید‪.‬‬
‫‪⁄‬‬
‫برای این سیگنال نرخ نمونه برداری مناسبی (‪ )Fs‬انتخاب کنید تا بدون رخ دادن پدیده ‪ Aliasing‬بتوان از سیگنال‬
‫نمونه برداری کرد‪.‬‬
‫‪ -1-1‬ورود به متلب‬
‫پس از در نظر گرفتن مالحضات تئوریک نمونه برداری در قسمت قبل‪ ،‬حال نوبت آن رسیده تا به صورت عملی وارد‬
‫کار شویم! در این بخش شما باید ‪ Fs‬مناسبی را انتخاب کنید تا بتوانید سیگنال نمونه برداری شده را به خوبی‬
‫نمایش دهید‪ .‬پیشنهاد میشود برای این کار از فرکانس ‪ ۰۰۰۰‬هرتز استفاده نمایید‪ .‬به منظور نمونه برداری همانطور‬
‫که میدانید باید ابتدا سیگنال )‪ f(t‬را به صورت دنباله )‬
‫(‬
‫در بیاورید که در آن داریم‬
‫‪.‬‬
‫خروجی خواسته شده از شما در این بخش یک کد متلب است که این سیگنال را پس از تبدیل به دنبالهی مربوطه‬
‫به تصویر بکشد‪.‬‬
‫این کار را برای فرکانسهای مختلف نمونه برداری انجام دهید و تغییرات ایجاد شده را مشاهده کنید‪.‬‬
‫‪ -۲-1‬به دست آوردن طیف فرکانسی‬
‫برای بررسی بهتر سیگنالها‪ ،‬ما همواره به طیف فرکانسی و تبدیل فوریهی آنها دقت میکنیم‪ .‬در این بخش از‬
‫تمرین شما باید دنباله ای را که در بخش قبلی به دست آوردید به حوزهی فرکانس ببرید و سپس آن را مشاهده و‬
‫بررسی کنید‪ .‬برای گرفتن تبدیل فوریه از توابع ‪fft‬و ‪ fftshift‬استفاده کنید ( طرز صحیح استفاده از این توابع در‬
‫کالس حل تمرین توضیح داده خواهد شد و اگر نمی خواهید در کالس حل تمرین حاضر شوید از ‪ Help‬نرم افزار‬
‫متلب می توانید استفاده نمایید)‪ .‬پس از به دست آوردن تبدیل فوریه اندازهی آن را برای فرکانسهای مختلف در‬
‫متلب نمایش دهید (با استفاده از دستور ‪.)plot‬‬
‫اگر این عمل را برای فرکانسهای مختلف نمونه برداری انجام دهیم چه تغییراتی را مشاهده خواهیم نمود؟‬
‫‪ -۳-1‬اصوات طبیعی‬
‫در این بخش برنامه ‪ audacity‬را بر روی سیستمهای خود نصب کنید‪ .‬سپس صدای خود را با فرکانسهای نمونه‬
‫برداری مختلف ضبط کرده و نتایج را تحلیل نمایید‪ .‬این تغییر فرکانس چه تاثیری در صدایی که از خود میشنوید‬
‫دارد؟ ( فرکانسهای پیشنهادی برای ضبط صدا ‪ 5kh, 11kh, 22kh, 96kh :‬میباشند)‬
‫‪ -۴-1‬اصوات غیر طبیعی‬
‫با استفاده از تابعی که در بخشهای قبلی برای تولید سیگنال با فرکانس ‪ ۰۰‬هرتز نوشتید‪ ،‬در این بخش میخواهیم‬
‫صداهای مجازی تولید کرده و به آنها گوش دهیم‪ .‬فرکانس نمونه برداری را ‪ ۰۰۰۰‬هرتز قرار میدهیم و فاز اولیه را‬
‫برابر با صفر در نظر میگیریم‪ .‬حال دنباله را با فرکانسهای مختلف ‪،4.5KHz ،3KHz ،2KHz ، 500Hz ،100Hz‬‬
‫‪ 7KHz ،5.5KHz‬تولید کنید و با استفاده از دستور ‪ sound‬و یا ‪ echo‬آنها را پخش نمایید‪ .‬نتایج را توضیح دهید‬
‫و بگویید که آیا فرکانس نمونه برداری در این بخش تاثیری داشت یا نه و اگر جواب مثبت است تاثیر آن را توضیح‬
‫دهید‪.‬‬
‫‪ -۲‬پدیدهی ‪ Aliasing‬در سیگنالها‬
‫همانگونه که میدانید‪ aliasing ،‬زمانی رخ میدهد که فرکانس نمونه برداری کمتر از نرخ نایکوئیست باشد‪ .‬این‬
‫پدیده در حوزه فرکانس‪ ،‬به صورت نمایش فرکانسهای باال در محدوده فرکانسهای پایین ظاهر میشود‪ .‬در حوزه‬
‫زمان نیز‪ ،‬این پدیده باعث از بین رفتن اطالعات سیگنال میگردد‪ .‬لذا ‪ aliasing‬یک پدیده مزاحم بوده و باید رفع‬
‫شود‪.‬‬
‫راههای مختلفی برای مقابله با ‪ aliasing‬وجود دارد که رعایت نرخ نایکوئیست یکی از آنهاست‪ .‬متاسفانه بسیاری از‬
‫سیگنالها در محیط اطراف‪ ،‬محدوده فرکانسی معینی ندارند و برای این سیگنالها‪ ،‬امکان رعایت نرخ نایکوئیست وجود‬
‫ندارد‪ .‬یک راهحل مناسب برای ذخیره سازی این نوع سیگنالها‪ ،‬حذف فرکانسهای باالی سیگنال به وسیله یک فیلتر‬
‫پایینگذر آنالوگ پیش از ذخیرهسازی سیگنال است‪.‬‬
‫در بسیاری اوقات‪ ،‬طراحی یک فیلتر آنالوگ دقیق کار مشکلی است‪ .‬لذا برای حل این مشکل از یک فیلتر دیجیتال‬
‫استفاده می‪ -‬شود‪ .‬در این صورت مراحل ذکر شده در باال برای نمونه برداری سیگنال بدین صورت تغییر مییابد‪:‬‬
‫ابتدا سیگنال پیوسته در زمان‪ ،‬نمونه برداری افزایشی میشود‪ .‬سپس یک فیلتر دیجیتال پایین گذر روی آن اعمال‬
‫شده و دوباره سیگنال نمونه برداری کاهشی میگردد‪.‬‬
‫با توجه به آنچه در درس سیگنالها و سیستمها خوانده اید‪ ،‬توضیح دهید که این کار چگونه میتواند‪ ،‬پدیده ‪aliasing‬‬
‫را حذف نماید؟‬
‫‪ -1-۲‬اثر ‪ aliasing‬روی سیگنال صوت‬
‫الف) یک سیگنال صوتی نمونه برداری شده در فرکانس ‪ ۰1‬کیلوهرتز و ‪ 8‬بیت را در نظر بگیرید‪ .‬این سیگنال‪،‬‬
‫سیگنال ‪ upsample‬شده شماست‪ .‬برای مشاهده اثر پدیده ‪ aliasing‬روی این سیگنال‪ ،‬بدون پیش فیلتر کردن‪،‬‬
‫روی آن نمونه برداری کاهشی انجام دهید‪ .‬نتیجه را گوش کنید‪.‬‬
‫برای این کار میتوانید از کد زیر استفاده کنید‪:‬‬
‫)‪function sp(infilename,dsr‬‬
‫‪%infilename is your signal name and dsr is downsampling rate‬‬
‫)'‪fprintf('\n the origional sound \n‬‬
‫;)‪[y,Fs]=wavread(infilename‬‬
‫‪% Fs is sample rate in Hz‬‬
‫)‪if(rem(length(y),dsr)~=0‬‬
‫;))‪y=y(1:length(y)- rem(length(y),dsr‬‬
‫‪end‬‬
‫‪%play it‬‬
‫)‪sound(y,Fs‬‬
‫;‪pause‬‬
‫‪%Downsample‬‬
‫;)'‪fprintf('\n the downsampled sound \n‬‬
‫;))‪x=y(1:dsr:length(y‬‬
‫;)‪sound(x,Fs/dsr‬‬
‫;‪pause‬‬
‫‪%save down sample as down.wav‬‬
‫;)'‪wavwrite(x,Fs/dsr,'down.wav‬‬
‫این آزمایش را برای مقادیر نرخ نمونه برداری‪ 2‬و‪ ۳‬و ‪ ۰‬امتحان کنید‪ .‬نمونه برداری کاهشی چه اثری بر روی سیگنال‬
‫شنیده شده گذاشته است؟‬
‫ب) در این قسمت‪ ،‬برای حذف اثر ‪ ،aliasing‬پیش از نمونهبرداری کاهشی‪ ،‬از یک فیلتر پایینگذر برای فیلتر کردن‬
‫سیگنال استفاده میشود‪ .‬برای فیلتر کردن سیگنال پیش از نمونهبرداری کاهشی‪ ،‬میتوانید از دستور زیر کمک‬
‫بگیرید‪:‬‬
‫;)‪filter_coeff = fir1(n, 1/dsr‬‬
‫;) ‪filteredSound = filter( filter_coeff, 1, infilename‬‬
‫دستور ‪ ،fir1‬یک فیلتر پایینگذر را در حوزه زمان به طول ‪ n‬برای شما شبیهسازی میکند‪ .‬دستور ‪ filter‬نیز‬
‫سیگنال ورودی را با فیلتر طراحی شده در حوزه زمان کانوالو مینماید‪ .‬برای آگاهی از نحوه عملکرد این دستورات‪ ،‬از‬
‫‪ help‬نرم افزار ‪ MATLAB‬کمک بگیرید‪.‬‬
‫سیگنال حاصل را گوش کنید‪ .‬چه تفاوتی میان این سیگنال و سیگنال قسمت (الف) وجود دارد؟‬
‫این مقایسه را برای مقادیر مختلف ‪ dsr‬که در قسمت قبل‪ ،‬امتحان کردید‪ ،‬انجام دهید‪ .‬آیا عمل پیش فیلتر کردن بر‬
‫روی کیفیت سیگنال موثر بوده است؟ اگر ‪ dsr>5‬باشد خروجی چگونه خواهد بود؟ آیا هنوز پیش فیلتر کردن موثر‬
‫است؟ چرا؟ در کدام حالت‪ ،‬پیش فیلتر کردن بیشترین تاثیر مثبت را روی خروجی این مرحله داشته است؟‬
‫‪-۳‬کوانتیزاسیون‬
‫نمونه برداری یکی از گامها در جهت ذخیره سازی و پردازش سیگنالها است‪ .‬گام بعدی‪ ،‬کوانتیزاسیون این‬
‫سیگنالهای نمونه برداری شده است‪.‬‬
‫‪ -1-۳‬خطای کوانتیزاسیون‬
‫در صورتی که بازه اعداد ]‪ [a,b‬را به ‪ 2n‬بخش تقسیم کنیم‪ .‬حداکثر خطای کوانتیزاسیون هر بخش از سیگنال را به‬
‫صورت نمادین محاسبه نمایید‪.‬‬
‫‪ -۲-۳‬کاهش خطای کوانتیزاسیون‬
‫برای کمتر کردن تاثیرات منفی کوانتیزاسیون بر روی سیگنال روشهای مختلفی وجود دارد‪ .‬یکی از آنها را به‬
‫دلخواه انتخاب کرده و راجع به آن توضیح دهید‪( .‬برای راحت تر شدن پاسخ‪ ،‬فرض میکنیم سیگنال مورد بحث‪،‬‬
‫سیگنال صوتی است)‬
‫‪ -۳-۳‬کوانتیزاسیون سیگنال صوتی‪.‬‬
‫با استفاده از فرمول زیر میتوان کوانتیزاسیون را شبیه سازی کرد‪ .‬با استفاده از این فرمول یک تابع ‪quantization‬‬
‫بنویسید که مقادیر ‪ a‬و ‪ b‬و ‪ N‬و یک ماتریس مقادیر سیگنال را دریافت کرده و عمل کوانتیزیشن را بر روی آنها‬
‫شبیه سازی کند و خروجی را به صورت یک رشته از نمونههای کوانتیزه شده برگرداند‪.‬‬
‫حال از تابعی که نوشته اید استفاده کنید و یک فایل صوتی را به دلخواه خود کوانتیزه کنید و نمودارهای مربوط به‬
‫اصل سیگنال و کوانتیزه شده ی سیگنال و همچنین نمودار میزان خطا در لحظات مختلف را رسم کرده و در گزارش‬
‫خود تحلیل کنید‪.‬‬
‫«موفق باشید»‬
‫موضوع تمرین بعدی‪ :‬پردازش صوت‬