بسمه تعالی هایچندرسانهای( )44-243 سیستم تمرین:3پردازشسیگنالصوتی دانشکدهمهندسیکامپیوتر دانشگاهصنعتیشریف 41اسفند دکتر مهدی امیری مقدمه در این تمرین ،شما برخی از مفاهیم پردازش صوت که در درس با آنها آشنایی پیدا نمودید را مورد آزمایش قرار داده و به بررسی علل آنها میپردازید. آنچه که بایستی تحویل داده شود شامل پاسخ سواالت مطرح شده در صورت تمرینها (در قالب یك گزارش با فرمت ،PDFنمودارها و شكلهاي خروجی mفایلها و خود mفایلها میباشد .لطفا تمامی فایلها را به صورت یك فایل فشرده ،که نام آن در قالب MM_HW2_LastName_StudentIDباشد که در آن به جاي LastNameنام خانوادگی شما و به جاي StudentIDشماره دانشجویی شما قرار میگیرد ،به آدرس ایمیل درس به نشانی [email protected]بفرستید .لطفا عنوان emailخود را همانند قالب فوق قرار دهید .مهلت تحویل خروجی ها ساعت 95:32تاریخ 1525/1/13می باشد و به ازاي هر روز تأخیر در ارسال 13 ،درصد از نمره تمرین کسر می گردد. بخش تشریحی و تحلیلی .1تحقیق کنید چرا در خطوط تلفن از کوانتیزاسیون یکنواخت 8یا 11بیتی استفاده نمی شود؟ .2توضیح دهید که چگونه با استفاده از کد گذاری پیشگویانه ( )DPCMمی توانیم متوسط نرخ بیتی را در مقایسه با کدگذاری مستقیم ( )PCMکاهش دهیم؟ .3مفهوم ADPCMرا توضیح دهید و دو نوع مختلف آن ( forward-adaptionو )backward-adaptionرا تشریح نمایید. .4به وسیله نرم افزار Audacityصدای خود را که در حال گفتن کلمه ی stampهستید ضبط کرده و spectrogramآن را رسم نمایید .جایگاه تک تک حرفها را در شکل مشخص کنید و دلیل خود را در مورد انتخاب جایگاه حرف aتوضیح دهید. .5فرض کنید با استفاده از روش کدینگ DPCMمی خواهیم یک سیگنال را نمونه برداری و کوانتایز نماییم .در این روش به جای کوانتیزه کردن ) ( ) ( ) ( ) ( (نمونهای از سیگنال) به صورت مستقیم ،اختالف آنها را به صورت کوانتایز می نمایند .اگر واریانس اختالف ) ( صد برابر کمتر از واریانس سیگنال ) ( باشد به سواالت زیر پاسخ دهید: الف) اگر ) ( را با 11بیت بر نمونه کوانتایز کنیم SNR ،چقدر میشود؟ ب ) برای آنکه SNRبیشتر یا مساوی 07دسی بل باشد ،نرخ بیت بر نمونه را محاسبه نمایید؟ .1با توجه به مبحث آنتروپی به سواالت زیر پاسخ دهید: جدول 1 )Symbol P(Symbol A 0.06 B 0.06 C 0.06 D 0.06 E 0.08 F 0.15 G 0.23 H 0.30 الف) با داشتن جدول شماره ،1یک کتاب کدی مبتنی بر روش هافمن طراحی کنید .همچنین متوسط نرخ بیتی را محاسبه کرده و میزان کارایی این روش را محاسبه کنید. ب) کلمه aaرا به دو روش هافمن و Arithmetic codingرمزگذاری کنید و رمزشده آن را به صورت باینری نمایش دهید. ** برای روش هافمن از کتاب کدی ساخته شده در قسمت الف و برای روش Arithmetic codingاز احتماالت جدول شماره 1استفاده نمایید .ضمناً در روش Arithmetic codingتقسیم بندی بازهی [ ]7،1را به ترتیب حروف الفبا انجام دهید. ج) از چه روشهایی زمان اتمام رمزگشایی در Arithmetic codingرا مشخص مینمایند؟ د) دو روش هافمن و Arithmetic codingدر مبحث فشرده سازی و کدینگ سیگنال را از منظر آنتروپی، انعطافپذیری و نیازمندی های الزم جهت رمزگذاری و رمزگشایی مقایسه نمایید و بیان کنید که کدام روش بهتر است. کار با متلب الف) فیلتر کردن سیگنال صوت ونمونه برداری افزایشی و کاهشی از صوت در این بخش تمرین بایستی طبق مراحل زیر و به صورت گام به گام ،جلو رفته و خواسته هر قسمت را انجام دهید. فایل ورودی این قسمت از تمرین Speech.wavمیباشد که با نرخ 32777نمونه در ثانیه ضبط شده است و ضمیمه تمرین میباشد .در تمام این بخش میتوانید با استفاده از تابع )( wavreadفایل صوتی را بخوانید و با استفاده از تابع )( wavplayآن را پخش کنید. ابتدا فایل صوتی تمرین را بخوانید و waveformآن را در یک متغیر متلب به نام s32بارگذاری کنید .سپس بخش های زیر را به ترتیب انجام دهید .فراموش نکنید که خروجی های ذکرشده در مقدمه تمرین را برای تمامی قسمت های این بخش بایستی ارسال نمایید. .1سیگنال s32را به عنوان تابعی از زمان رسم نمایید .محور اندازه در بازه ] [-1.3, 1.3و محور زمان با مقیاس ثانیه مدرج شده باشد .سپس طیف فرکانسی این سیگنال را به صورت تخمینی و نرماالیز شده در بازه فرکانسی ] [0, Fsبا مقیاس Hzو محور اندازه در بازه ] [0, 0.008رسم نمایید. .2حال سیگنال s32را با فاکتور 4نمونهبرداری کاهشی کنید و آن را در s8قرار دهید و قسمت 1را برای آن تکرار کنید .به صدای سیگنال s8و s32گوش کنید و این دو را با هم مقایسه نمایید. راهنماییs8 = s32(1:4:length(s32)) : .3یک فیلتر FIRخطی برای استفاده قبل از نمونهبرداری کاهشی میتواند مناسب باشد! (چرا؟) در این قسمت از تابع fir1متلب برای طراحی این فیلتر به صورت زیر استفاده میکنیم .با این تابع در راهنمای متلب آشنا شوید. )fir1(64,1/4 .4سیگنال s32fرا با فیلتر کردن سیگنال s32و استفاده از فیلتر قسمت 3بسازید. راهنمایی :میتوانید از دستور filterدر متلب استفاده نمایید. .5سیگنال s32fرا به کمک قسمت 2نمونهبرداری کاهشی با فاکتور 4نمایید و آن را در s8fقرار دهید و قسمت 1را برای آن تکرار کنید. .1سیگنال s8و s8fرا در متلب پخش کنید و تفاوت این دو را با ذکر علت مشخص کنید. .0سیگنال s8fرا با فاکتور 4نمونهبرداری افزایشی کرده و آن را s8f32بنامید و قسمت 1را برای آن تکرار کنید. سپس آن را پخش نموده و آن را با سیگنال اصلی ابتدایی مقایسه نمایید .انتظار میرود این دو مشابه باشند .این انتظار برآورده شده است؟ راهنماییs8f32(4*(1:length(x8f))) = s8f(1:length(s8f)) : .8برای باالتر بردن کیفیت سیگنال s8f32میتوانیم از فیلتر پایینگذر طراحیشده در قسمت 3استفاده نماییم. سیگنال s8f32را فیلتر نموده و آن را s8f32fنامیده و قسمت 1را برای آن تکرار نمایید .سپس آن را پخش نموده و بهبود کیفیت آن را احساس کنید. .9در این قسمت میخواهیم با پیادهسازی CIC Moving Average Filterیک فیلتر پایینگذر ساده طراحی کنیم .این کار در متلب بدین صورت انجام میشود: Acic = [-1, 1] , Bcic = [1 0 0 0 0 0 0 0 -1]/8 سپس پاسخ فرکانسی این فیلتر و فیلتر طراحیشده در قسمت 3را با دستور )( freqzرسم نمایید. .17سیگنال s8f32cicرا با اعمال فیلتر CICبر سیگنال s8f32ایجاد کنید .حال s8f32را در 4ضرب کنید تا اندازه سیگنال به حالت اولیه برگردد و قسمت 1را برای آن تکرار نمایید .حال آن را پخش نموده و بهبود کیفیت را احساس کنید. .11حال میتوانیم با فیلتر مجدد این سیگنال با فیلتر CICمیرایی یاند قطع آن را بهبود دهیم .سیگنال s8f32cic را یک بار دیگر با فیلتر CICفیلتر نموده و آن را s8f32cic2بنامید و قسمت 1را برای آن تکرار کنید .حال آن را پخش نمایید. هدف از انجام این قسمت از تمرین استفاده از نمونهبرداری کاهشی و کاهش حجم فایل مورد نظر و سپس استفاده از نمونه برداری افزایشی و بازسازی سیگنال اصلی به کمک فیلترها بود .اما در هنگام نمونهبرداری افزایشی پدیدهای به نام انعکاس طیفی 1رخ میدهد .میتوانید در مورد این پدیده و علت آن جستجو کنید. 1 . Spectral Replication ب) LPC - Linear Predictive Coding در این قسمت می خواهیم فرکانس Formantصدادار را با استفاده از روش Linear predictive coding تخمین بزنیم. .1ابتدا فایل mtlb.matرا بخوانید ،بعد نمودار هیستوگرام آن را رسم کنید( .محتوی سیگنال صوت ،صدای خانمی که کلمه متلب را می خواند). ;Load mtlb % Fs is the sampling frequency % x is input signal ;Window=100; noverlap=90; F=128 ;)[y,f,t,p] = spectrogram(x,window,noverlap,F,fs ;)'surf(t,f,10*log10(abs(p)),'EdgeColor','none .2جهت تحلیل سیگنال از مقدار 7.1تا 7.25ثانیه بخوانید .به نظرتان این قسمت از سیگنال بیان کننده چه صدایی است؟ دلیل خود را بیان کنید. .3جهت بدست آوردن چهار Formantاولیه که فرکانس آنها بیشتر از 90 Hzبا پهنای باند کمتر از 400Hz است ،مراحل زیر را گام به گام بر روی سیگنال حاصل از قسمت 2اجرا نمایید. .3.1پنجره بندی بخش گفتار :مشخص کنید که از چه تابعی برا ی پنجره بندی سیگنال استفاده میکنید و در مورد دلیل انتخاب خود توضیح دهید. .3.2فیلتر زیر را بر روی سیگنال اعمال کنید. ;]HFilter= [1 0.63 ; )Y= filter( 1 , HFilter , x .3.3ضرایب LPCرا بدست آورید (مرتبهی پیشگو کننده ی خطی را 9در نظر بگیرید). .3.4ریشه چند جمله ای حاصل از ظرایب LPCرا بدست آورید. .3.5زاویه متناسب با هر ریشه را بر حسب HZمحاسبه کنید. .3.1پهنای باند سیگنال را با استفاده از دستور زیر مشخص کنید. BandWith= -1/2 * (Fs/(2*pi))*log(x)); % x is vector of roots .3.0چهار Formantاولیه که فرکانس آنها بیشتر از 90 Hzبا پهنای باند کمتر از 400Hzاست را بدست آورید. ج) کوانتایزر غیرخطی همانطور که میدانید برای اعمال کوانتیزاسیون غیرخطی از دو روش استفاده میشود .ابتدا فرمول زیر که مربوط به روش µ-lawمیباشد را به صورت یک تابع در متلب پیادهسازی نمایید( .مقدار µ=255و بازه ])x=[-1,1 .1فایل ضمیمه همراه تمرین با نام speech.wavکه با 11بیت کوانتایز شده است را در متلب بارگذاری نموده و تابع نوشته شده باال را بر روی آن اعمال نمایید. راهنمایی :1برای بارگذاری فایل صوتی در متلب از دستور wavreadبا پارامتر nativeاستفاده کنید.جزئیات این دستور را در راهنمای متلب دنبال کنید. راهنمایی : 2برای بردن محدوده ورودی به بازه ] [-1,1و اعمال تابع نوشتهشدهتان میتوانید مقادیر ورودیرا به 32018تقسیم کنید و سپس تابعتان را اعمال نمایید .همچنین مقادیر خروجی را در 120ضرب کنید تا خروجی در محدوده 8بیت قرار گیرد. .2پس از انجام این کار به فایل اصلی و سیگنال خروجی گوش دهید .آیا تفاوتی حس میکنید؟ دلیل آن چیست؟ .3نمودار این دو سیگنال (اصلی و کوانتایز شده) را در حوزه زمان رسم نمایید .در مورد تفاوت این دو نیز مختصر توضیح دهید. .4حال در این قسمت بایستی عکس تابع نوشته شده خود را نیز پیادهسازی نموده و آن را به فایل کوانتایزشده خود اعمال کنید .انتظار این است که پس از انجام این کار همان فایل اصلی به دست آید .آیا این انتظار تحقق مییابد؟ دلیل آن را تشریح نمایید. .5نمودار سیگنال اصلی و سیگنال بازیابیشده پس از دیکوانتایز را در حوزه زمان رسم نمایید .در مورد تفاوت این دو نیز مختصر توضیح دهید. .1نمودار خطای عمل کونتایز نسبت به فایل اصلی و همچنین نمودار خطای عمل دیکوانتایز نسبت به فایل اصلی را در حوزه زمان رسم کنید. د) کد کردن پیشگویانه همانطور که می دانید در یک شکل موج صوت معمولی مثالً صحبت و یا حتی آهنگهای مالیم نمونههای متوالی زیادی دارای مقادیر مشابهی هستند .یک راه برای فشردهسازی بیشتر استفاده از این تشابهها و استفاده از کد کردن به روش پیشگویی خطی است. در این روش در قسمت کدکننده 2در ابتدا نمونه فعلی از روی ترکیب خطی نمونههای قبلی ساختهشده تخمین زده شده و سپس مقدار خطای بین نمونه اصلی و نمونه پیشبینیشده کوانتایز شده و کد میشود. در قسمت کدگشا 3نیز ابتدا همان مقدار پیشبینی شده از روی نمونههای قبلی کدگشاییشده ساخته میشود .سپس مقدار خطایی که در سمت کدکننده کوانتایز شده است به آن اضافه میگردد. در این قسمت می خواهیم سناریوی ذکر شده فوق را در متلب پیاده نموده و همان فایل قسمت ج را این بار با این روش مورد آزمایش قرار دهیم inputFile ( .همان فایل speech.wavمیباشد). .1ابتدا یک تابع بنویسید که یک فایل صوتی و تعداد بیتهای خروجی را به عنوان ورودی دریافت کرده و دو بردار تفاضل نمونهها و بردار خطا را باز میگرداند. )function [differ, err] = dpcm(inputFile, n تابع شما باید سه کار زیر را به ترتیب انجام دهد: تفاوت هر دو نمونه متوالی از سیگنال ورودی را با کمک تابع diffمتلب محاسبه نماید. این تفاوتها را در محدوده ] [-2n-1, 2n-1 -1کوانتایز خطی نمایید و خروجی آن را در برداری به نام( differیکی از خروجیهای این تابع) ذخیره نمایید. یک بردار با نام errایجاد کنید که تفاوت هر درایه differرا با مقدار آن پیش از کوانتایز کردن نگه دارد. .2تابع idpcmکه عکس تابع فوق است را نیز پیادهسازی نمایید .این تایع ،اولین نمونه سیگنال اصلی را به همراه بردار differگرفته و سیگنال اولیه را بازسازی مینماید. راهنمایی :به منظور سادگی کار ،فرض کنید که نمونه فعلی فقط از روی یک نمونه قبلی ساخته می شود. .3با قرار دادن مقدار 4برای nتفاوت سیگنال بازسازیشده و سیگنال اولیه را محاسبه نمایید و با بردار err مقایسه نمایید. .4به سیگنال اصلی و بازسازی شده گوش دهید .چه تفاوتی بین آنها وجود دارد؟ .5مقدار nرا به 8و 2تغییر داده و دوباره به سیگنالها گوش دهید .آیا تغییر مقدار nروی کیفیت سیگنال بازسازیشده تأثیر قابل توجهی دارد؟ علت چیست؟ «موفق باشید» موضوع تمرین بعدی :پردازش تصویر 2 . Encoder . Decoder 3
© Copyright 2026 Paperzz