پردازش صوتی متلب (آموزش کامل و نکات کاربردی)

پردازش صوتی متلب (آموزش کامل و نکات کاربردی)

پردازش سیگنال صوتی MATLAB تغییرات مقادیر فیزیکی را در طول زمان توصیف می کند و پردازش سیگنال به معنای دستکاری سیگنال های رفتاری یا بازیابی اطلاعات است. Matlab ابزاری برای تولید و دستکاری سیگنال های زمانی گسسته است که شامل خواندن و تجزیه و تحلیل آنها می شود. متلب بر تغییر صداها، روش های مورد استفاده برای پخش موسیقی و ارتباطات از راه دور تمرکز دارد.

در این مقاله روش های فیلتر سیگنال های مختلف و اکولایزر گرافیکی، افکت اکو، افکت فلنج و فیلتر پایین گذر که برای حذف نویز سفید گاوسی استفاده می شود را بررسی می کنیم.

خواندن را فراموش نکنید: دانلود 13 فیلم رایگان آموزش شبکه عصبی در متلب

علاوه بر این، در مورد تکنیک‌های پردازش طیفی برای تبدیل صداهای مرتبط، دانش عملی مورد نیاز برای تجزیه و تحلیل، سنتز و توصیف سیگنال‌های صوتی در برنامه‌های موسیقی بحث می‌کنیم.

فیلتر پایین گذر

فرض کنید سیگنال ما با نویز سفید گاوسی ترکیب شده است و اکنون می خواهیم با استفاده از فیلتر پایین گذر این نویز را کاهش دهیم.

کد متلب برای فیلتر پایین گذر (LPF)

سیگنال صوتی را با اجرای کد زیر به متلب وارد می کنیم:

% برنامه کاربردی LPR (FIR) با وقفه 8 کیلوهرتز برای کاهش نویز سیگنال صوتی.

[fileName, pathName] = uigetfile (‘*. *’, ‘انتخاب صدای ورودی’);

[x, Fs] = خواندن صدا (number2str (نام فایل))؛ % x نمونه های صوتی و Fs نرخ نمونه برداری است.

نمونه های صوتی (x) اعدادی هستند که مقدار یک موج را در یک نقطه زمانی معین نشان می دهند. نرخ نمونه برداری (Fs) تعداد نمونه های صوتی استخراج شده در هر ثانیه است. audioread نیز یک عملکرد داخلی است که برای خواندن صدای ورودی استفاده می شود. هنگامی که این تابع انجام می شود، کل نمونه صوتی در متغیر x و نرخ نمونه برداری در متغیر Fs ذخیره می شود.

دانلود: 7 درس کاربردی آموزش برنامه نویسی در متلب

ویژگی های فیلتری که ما استفاده خواهیم کرد:

% عملکرد فیلتر

Fsf = 44100; درصد فراوانی نمونه گیری

Fp = 8e3; % فرکانس پهنای باند بر حسب هرتز

Fst = 8.4e3; % فرکانس باند ترمز

Ap = 1; % پهنای باند روبان بر حسب دسی بل

Ast = 95; درصد تضعیف نوار ترمز بر حسب دسی بل

سپس فیلتر را طراحی می کنیم و تمام عملکردهای تابع designfilt را دور می زنیم.

df = designfilt (‘lowpassfir’, ‘PassbandFrequency’, Fp, ‘StopbandFrequency’, …

Fst، ‘passbandRipple’، Ap، ‘stopbandAttenuation’، Ast، ‘sampleRate’، Fsf)؛

پس از اجرا، df را خواهیم داشت که یک شی فیلتر است. برای بررسی اینکه آیا فیلتر به درستی کار می کند، از تابع fvtool استفاده می کنیم. این پاسخ فرکانسی فیلتر را تجسم می کند.

fvtool (df)؛ % پاسخ فرکانسی فیلتر را به تصویر می کشد

xn = awgn (x، 15، “اندازه گیری”)؛ ٪ سیگنال آسیب دیده توسط نویز سفید گاوسی

در کد بالا x سیگنال اصلی است زیرا حاوی نمونه هایی از صدای ورودی است. برای حذف آن، نویز گاوسی را با استفاده از تابع awgn اضافه می کنیم. xn سیگنال بد ماست. عدد 15 SNR (نسبت سیگنال به نویز) است. SNR نسبت اطلاعات مورد نظر به نویز پس زمینه است. نسبت بالاتر نشان دهنده نویز کمتر و نسبت کمتر نشان دهنده نویز بیشتر است.

حتما بخوانید: نکات اصلی و مهم سیمولینک را در نرم افزار متلب بیاموزید

سپس، در حین انتقال فیلتر (df) و سیگنال نویز (xn) به عنوان پارامترهای عملکردی، سیگنال نویز را با استفاده از تابع فیلتر فیلتر می کنیم:

y = فیلتر (df، xn)؛

خروجی های Df در متغیر y ذخیره می شوند. اینها نمونه های صوتی فیلتر شده هستند. سپس سیگنال اصلی، سیگنال نویز و سیگنال فیلتر شده را با استفاده از تابع نمودار مطابق شکل زیر رسم می کنیم:

% سیگنال های گرافیکی

طرح فرعی (3،1،1)

نمودار (x)

عنوان (“سیگنال اصلی”)

طرح فرعی (3،1،2)

نمودار (xn)

عنوان (“سیگنال نویز”)

طرح فرعی (3،1،3)

طرح (y)

عنوان (“سیگنال فیلتر شده”)

وقتی این تابع را انجام می دهیم، یک پاسخ فیلتر شده دریافت می کنیم که به ماهیت سیگنال، فرکانس های پایین و شکل موج بستگی دارد.

اکنون می توانیم ببینیم که چگونه نویز در خروجی کاهش می یابد. توجه داشته باشید که به جای ترسیم کل نمونه، از عدد 450 برای مشاهده تفاوت استفاده می کنیم. این شکل موج ها به وضوح فیلتر شدن را نشان می دهند، اما ما همچنین می توانیم آهنگ را گوش دهیم تا تفاوت را درک کنیم.

ارائه نرم افزار متلب (4 کاربرد اصلی و 3 نقطه قوت)

برای گوش دادن به موسیقی در متلب، دستور صدا (xn, fs) را برای سیگنال نویز در پنجره فرمان اجرا کنید. همین کار را برای بوق فیلتر شده (y، Fs) انجام دهید. هنگام گوش دادن به موسیقی، متوجه خواهید شد که صدای پس زمینه به میزان قابل توجهی کاهش می یابد.

اکولایزر گرافیکی

اغلب، هنگامی که موسیقی را روی هر نوع پخش کننده صوتی پخش می کنید، این نوع اکولایزر را پیدا خواهید کرد. از این اکولایزر برای ایجاد افکت ها و جلوه های صوتی مختلف استفاده می شود. متلب یک عملکرد داخلی برای راه اندازی این اکولایزر دارد.

کد اکولایزر متلب

ابتدا audioDeviceReader را مقداردهی اولیه می کنیم:

deviceReader = audioDeviceReader “Driver”، “ALSA”، “Device”، (

(خط In (RealtekHighDefination Audio) ‘,’ samplesperFrame ‘, 2048,’ SampleRate ‘, 44100);

برای پخش آهنگ، عملکرد audioDeviceWriter را شروع کنید. این ویژگی موسیقی را با همان نرخ نمونه‌برداری پخش می‌کند و از یک اکولایزر برای اجرای افکت مطابق شکل استفاده می‌کند:

deviceWriter = audioDeviceWriter (‘SampleRate’, device reader.SampleRate);

اکولایزر = graphicEQ (‘پهنای باند’، ‘1 اکتاو’، ‘ساختار’، ‘موازی’، ‘SampleRate’، …

deviceReader.SampleRate)؛ % ما باندی را که پذیرفته ایم 1 0ctave تعریف می کنیم

ساختار اکولایزر را به صورت موازی می گیریم. این بدان معنی است که بسیاری از فیلترهای موازی کار می کنند. خط deviceReader.SampleRate دستگاه و نرخ نمونه برداری را شبیه سازی می کند. سپس سود را تعیین می کنیم. دستاوردها موقعیت لغزنده اکولایزر هستند.

اکولایزر سود = [4 4.2 4.6 2.7 -3.7 -5.2 -2.5 2.3 5.4 6.5];

برای تجسم اکولایزر، از تابع پیش نمایش به صورت زیر استفاده می کنیم:

تجسم (تعادل کننده)

nUnderruns = 0;

تیک

سپس از حلقه while برای تکرار به مدت 30 ثانیه استفاده کنید:

در حالی که toc <30٪ شبیه سازی 30 ثانیه است

in = deviceReader ();

خروجی = اکولایزر (ورودی)؛

nUnderruns = nUnderruns + deviceWriter (خروجی);

پایان

deviceReader تمام نمونه های ورودی را می خواند و آنها را در متغیر in ذخیره می کند. سپس متغیر ورودی به اکولایزر ارسال می شود و خروجی در متغیر خروجی ذخیره می شود. سپس متغیر out توسط deviceReader خوانده می شود و از طریق بلندگوی لپ تاپ پخش می شود.

پس از جذب، تمام ورودی ها را تمیز کنید.

٪ تمیز

انتشار (خارج)؛

انتشار (DeviceReader)

انتشار (deviceWriter)

افکت اکو

سیگنال های اکو برای بهبود افکت اضافه می شوند. معادله این اثر به صورت زیر است:

y (n) = x (n) + تبر[ n-d ]

“Y (n)” سیگنال خروجی است. «الف» بهره یا سود و «د» تأخیر است. در اینجا Gain میزان عمق مورد نیاز شما را تعیین می کند.

کد متلب برای افکت اکو

[filename, pathname] = uigetfile (‘*. *’، ‘فایل صوتی خود را انتخاب کنید’);

[x, Fs] = audioReader (num2str (نام فایل))؛

n = طول (x)؛ % طول فایل موسیقی

a = 0.8; ضریب کاهش درصد (بهره)

d = 2000; % تاخیر جریان ورودی

y = صفر (n + d)، 1); % سیگنال خروجی موسیقی را راه اندازی می کند

xn = padarray (x, [d,0]0، “قبل”)؛

برای i = (d + 1): 1: n

y (id, 1) = x (i) + a * xn (id);

پایان

برای گوش دادن به آهنگ، صدای (y، Fs) را در پنجره فرمان پخش می کنیم.

اثر فلنج

اثر فلنج با معادله y (n) = x (n) + تبر[ n-d [ n ]]جلوه را مرتب کنید. برای افکت های بزرگ به دلیل موج سینوسی با فرکانس پایین تاخیر بیشتری وجود دارد و این تاخیر بسته به شکل سینوس و همانطور که در معادله نشان داده شده است متفاوت است.

کد متلب برای افکت فلنج

[filename, pathname] = uigetfile (‘*. *’، ‘فایل صوتی خود را انتخاب کنید’);

[x, Fs] = audioReader (num2str (نام فایل))؛

n = طول (x)؛ % طول موسیقی

tn = n / Fs; % طول موسیقی را بر حسب ثانیه پیدا می کند

f = 0.25; درصد فرکانس موج سینوسی بر حسب هرتز

برای بدست آوردن مقدار n نقطه با فواصل مساوی از فضای خطی استفاده می کنیم:

t = فضای خطی (0، tn، n)؛

d = 100; درصد تاخیر

سپس یک موج سینوسی با فرکانس پایین در زیر ایجاد می کنیم. ضریب تاخیر زمانی است که سیگنال از یک نقطه عبور می کند و بر حسب میلی ثانیه اندازه گیری می شود.

modsin = sin (2 * pi * f * t);

سپس مقدار تاخیر با استفاده از تابع گرد و حاصل ضرب، ضریب تاخیر و مدسین تولید می‌شود:

modsin1 = دایره (d. * modsin ‘) + d; % تاخیر متغیر

y = صفر (n + d، 1)؛ % سیگنال موسیقی خروجی را مقداردهی اولیه کنید

a = 0.5; ضریب کاهش درصد

xn = padarray (x,[d,0]0، “قبل”)؛

برای i = (d + 1): 1: n

y (id, 1) = x (1) + a * xn (i-modsin1 (id));

پایان

برای گوش دادن به موسیقی با افکت فلنج، صدای (y، Fs) را در خط فرمان شروع کنید.

نتیجه

MATLAB ابزار خوبی برای آنالیز سیگنال های صوتی است و دارای ویژگی هایی است که تجسم این سیگنال ها را آسان می کند. همانطور که در این مقاله به آن پرداختیم، آنالیز سیگنال صوتی به ابزار خوبی نیاز دارد که دقیقا همان چیزی است که MATLAB است.

بیشتر بخوانید: روش گاس سیدل در متلب از صفر تا صد

فیلتر کردن سیگنال صوتی یک ویژگی مهم است زیرا می توان از آن برای حفظ اطلاعات از دست رفته استفاده کرد. این ویژگی MATLAB را در طیف وسیعی از زمینه ها قابل استفاده می کند.