no-img
انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب

تولید صوت در متلب با سیگنال ورودی - انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب


انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب
مطالب ویژه
گزارش خرابی لینک
اطلاعات را وارد کنید .

ادامه مطلب

ZIP
تولید صوت در متلب با سیگنال ورودی
امتیاز 5.00 ( 1 رای )
zip
ژوئن 9, 2023
2
54,000 تومان
0 فروش

تولید صوت در متلب با سیگنال ورودی


5/5 - (1 امتیاز)
به این پست امتیاز دهید.
تولید صوت در متلب با سیگنال ورودی
{score}/{best} - ({count} {votes})

تولید صوت در متلب با سیگنال ورودی : پروژه متلب

 

پروژه متلب پردازش صدا در متلب که به پردازش سیگنال هم معروف است (Audio Signal Processing) تغییرات مقادیر فیزیکی در طول زمان را توصیف می کند و پردازش سیگنال یعنی دستکاری سیگنال ها برای تغییر رفتار یا استخراج اطلاعات. متلب (Matlab) ابزاری برای ساخت و دستکاری سیگنال های زمان گسسته ارائه می دهد که شامل خواندن و تجزیه و تحلیل آنها است. متلب روی تغییر صداها، روش های مورد استفاده برای پخش موسیقی و بخش های مخابراتی متمرکز است.

 

فیلتر پایین گذر (low-pass filter)

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

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

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

% Program to implement a LPR(FIR) with cutoff 8kHz to denoise audio signal.

[fileName, pathName] = uigetfile(‘*.*’, ‘select the input audio’);

[x, Fs] = audioread(num2str(fileName)); % x is the audio samples and Fs is the sampling rate.

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

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

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

% filter implementation

Fsf = 44100; % Sampling Frequency

Fp = 8e3; % Passband Frequency in Hz

Fst = 8.4e3; % stopband Frequency

Ap = 1; % passband ribble in db

Ast = 95; % stopband attenuation in db

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

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

Fst, ‘passbandRipple’, Ap, ‘stopbandAttenuation’, Ast, ‘sampleRate’, Fsf);

به محض اجرا، df را خواهیم داشت که یک شئ فیلتر کننده (filter object) است. برای بررسی اینکه آیا فیلتر درست کار می کند یا نه، از تابع fvtool استفاده می کنیم. این کار باعث تجسم پاسخ فرکانسی فیلتر می شود.

fvtool(df); % visualize freq response of filter

xn = awgn(x,15,’measured’); % signal corrupted by white Gaussian noise

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

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

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

y = filter(df, xn);

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

%plotting signals

subplot(3,1,1)

plot(x)

title(‘original signal’)

subplot(3,1,2)

plot(xn)

title(‘Noisy signal’)

subplot(3,1,3)

plot(y)

title(‘filtered signal’)

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

plot of magnitude response

 

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

معرفی نرم افزار متلب (۴ کاربرد اصلی و ۳ نقطه قوت)

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

اکولایزر گرافیکی (Graphic equalizer)

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

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

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

deviceReader = audioDeviceReader(‘Driver’, ‘ALSA’, ‘device’,…

‘line In(RealtekHighDefination Audio)’, ‘samplesperFrame’, ۲۰۴۸, ‘SampleRate’, ۴۴۱۰۰);

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

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

equalizer = graphicEQ(‘Bandwidth’, ‘۱ octave’, ‘structure’, ‘parallel’, ‘SampleRate’,…

deviceReader.SampleRate); % we define the bandwidth which we have taken as 1 0ctave

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

equalizer.Gains = [4 4.2 4.6 2.7 -3.7 -5.2 -2.5 2.3 5.4 6.5];

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

visualize(equalizer)

nUnderruns = 0;

tic;

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

while toc < 30 % 30 sec of simulation

in = deviceReader();

out = equalizer(in);

nUnderruns = nUnderruns + deviceWriter(out);

end

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

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

% clean up

release(out);

release(deviceReader)

release(deviceWriter)

افکت اکو (Echo effect)

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

y(n) = x(n) + a.x[ n-d ]

“y(n)” سیگنال خروجی است. “a” بهره یا گین و”d” تاخیر است. در اینجا گین میزان عمق مورد نیاز شما را مشخص می کند.

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

[filename, pathname] = uigetfile(‘*.*’, ‘select your audio file’);

[x, Fs] = audioReader(num2str(filename));

n = length(x); % length of the music file

a = 0.8; % attenuation factor(gain)

d = 2000; % Delay input stream

y = zeros((n + d),1); % Initialize the output music signal

xn = padarray(x, [d,0], 0, ‘pre’);

for i = (d+1): 1: n

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

end

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

افکت فلنج (Flange effect)

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

 

خروجی متلب :

پروژه متلب پروژه متلب پروژه متلب



برچسب‌ها :
ads

درباره نویسنده

mrk kiani 400 نوشته در انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب دارد . مشاهده تمام نوشته های

دیدگاه ها


دیدگاهتان را بنویسید