پارس‌کدرز چگونه کار می‌کند؟

از پارس‌کدرز بیشترین بهره را ببرید و رویای کاری خود را زندگی کنید.

پارس‌کدرز خریداران یا کارفرمایان را به مجری‌ها /فریلنسرهای خبره‌ای متصل می‌کند که برای انجام پروژه آماده هستند.

پروژه پردازش سیگنال با متلب

ده ماه پیش منتشر شده

تعداد بازدید: 200

کد پروژه: 420935


شرح پروژه

سلام 

bita:
سلام
ببخشید من ی پروژه سیگنال دارم ،وقت دارید برام انجام بدید؟

% 1. ضبط صدا از میکروفون
recObj = audiorecorder(22050, 16, 1); % نرخ نمونه‌برداری: 22050 هرتز، بیت عمق: 16 بیت، حالت مونو: 1 کانال
disp('لطفاً جمله را بگویید...');
recordblocking(recObj, 5); % ضبط صدا به مدت 5 ثانیه

% 2. بارگذاری صدا و پخش آن
disp('پخش صدا...');
play(recObj);

% 3. نمایش نمودار سیگنال صدا بر حسب زمان
disp('نمایش نمودار سیگنال صدا...');
audioData = getaudiodata(recObj); % دریافت داده‌های صوتی از شیء audiorecorder
time = (0:length(audioData)-1) / recObj.SampleRate; % محاسبه زمان بر اساس نرخ نمونه‌برداری
plot(time, audioData);
xlabel('زمان (ثانیه)');
ylabel('سیگنال صدا');
title('نمودار سیگنال صدا');

% 4. انتخاب بخش کوتاه از صدا
startTime = 1; % زمان شروع بخش کوتاه (ثانیه)
endTime = startTime + 2; % زمان پایان بخش کوتاه (ثانیه)
startIndex = round(startTime * recObj.SampleRate) + 1; % شماره نمونه شروع بخش کوتاه
endIndex = round(endTime * recObj.SampleRate); % شماره نمونه پایان بخش کوتاه
shortAudio = audioData(startIndex:endIndex); % بخش کوتاه از صدا

% 5. نمایش و پخش بخش کوتاه از صدا
disp('نمایش بخش کوتاه از صدا...');
plot((startIndex:endIndex) / recObj.SampleRate, shortAudio);
xlabel('زمان (ثانیه)');
ylabel('سیگنال صدا');
title('بخش کوتاه از صدا');
player = audioplayer(shortAudio, recObj.SampleRate);
play(player);

% 6. استخراج فرکانس اصلی (پیچ فرکانس)
disp('استخراج فرکانس اصلی (پیچ فرکانس)...');
L = length(shortAudio);
Y = fft(shortAudio);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = recObj.SampleRate*(0:(L/2))/L;
[~, idx] = max(P1);
pitchFrequency = f(idx);

% 5. اضافه کردن اکو به سیگنال
disp('اضافه کردن اکو به سیگنال...');
delay = 0.5; % تأخیر اکو (ثانیه)
gain = 0.6; % میزان تقویت اکو
echoedAudio = echo(shortAudio, recObj.SampleRate, delay, gain);

% 6. نمایش و پخش سیگنال با اکو
disp('نمایش سیگنال با اکو...');
plot((startIndex:endIndex) / recObj.SampleRate, echoedAudio);
xlabel('زمان (ثانیه)');
ylabel('سیگنال صدا با اکو');
title('سیگنال صدا با اکو');
playerEcho = audioplayer(echoedAudio, recObj.SampleRate);
play(playerEcho);

% 7. حذف اکو از سیگنال
disp('حذف اکو از سیگنال...');
cleanAudio = echocancellation(echoedAudio, recObj.SampleRate, delay, gain);

% 8. نمایش و پخش سیگنال پاک شده از اکو
disp('نمایش سیگنال پاک شده از اکو...');
plot((startIndex:endIndex) / recObj.SampleRate, cleanAudio);
xlabel('زمان (ثانیه)');
ylabel('سیگنال صدا پاک شده از اکو');
title('سیگنال صدا پاک شده از اکو');
playerClean = audioplayer(cleanAudio, recObj.SampleRate);
play(playerClean);

% 9. تغییر سرعت پخش صدا به سرعت بیشتر (افزایش سرعت)
disp('تغییر سرعت پخش صدا به سرعت بیشتر...');
playerEcho.setPlaybackRate(1.5); % مقدار بیشتر از 1.0 برای افزایش سرعت
play(playerEcho);

% 10. تغییر سرعت پخش صدا به سرعت کمتر (کاهش سرعت)
disp('تغییر سرعت پخش صدا به سرعت کمتر...');
playerClean.setPlaybackRate(0.8); % مقدار کمتر از 1.0 برای کاهش سرعت
play(playerClean);

% 11. تقویت بلندی صدا
disp('تقویت بلندی صدا...');
amplificationFactor = 2; % ضریب تقویت بلندی (بیشتر از 1 برای تقویت)
amplifiedAudio = amplify(cleanAudio, amplificationFactor);

% نمایش و پخش صدا با بلندی تقویت شده
disp('نمایش صدا با بلندی تقویت شده...');
plot((startIndex:endIndex) / recObj.SampleRate, amplifiedAudio);
xlabel('زمان (ثانیه)');
ylabel('سیگنال صدا با بلندی تقویت شده');
title('سیگنال صدا با بلندی تقویت شده');
playerAmplified = audioplayer(amplifiedAudio, recObj.SampleRate);
play(playerAmplified);

% 12. تضعیف بلندی صدا
disp('تضعیف بلندی صدا...');
attenuationFactor = 0.5; % ضریب تضعیف بلندی (کمتر از 1 برای تضعیف)
attenuatedAudio = amplify(cleanAudio, attenuationFactor);

% نمایش و پخش صدا با بلندی تضعیف شده
disp('نمایش صدا با بلندی تضعیف شده...');
plot((startIndex:endIndex) / recObj.SampleRate, attenuatedAudio);
xlabel('زمان (ثانیه)');
ylabel('سیگنال صدا با بلندی تضعیف شده');
title('سیگنال صدا با بلندی تضعیف شده');
playerAttenuated = audioplayer(attenuatedAudio, recObj.SampleRate);
play(playerAttenuated);

% 13. ایجاد سیگنال نویز مصنوعی
disp('ایجاد سیگنال نویز مصنوعی...');
noiseAmplitude = 0.2; % بزرگی نویز
noise = noiseAmplitude * randn(size(cleanAudio));

% 14. جمع سیگنال نویز با سیگنال صدا
disp('جمع سیگنال نویز با سیگنال صدا...');

noisyAudio = cleanAudio + noise;

% 15. نمایش و پخش سیگنال نویزی
disp('نمایش سیگنال نویزی...');
plot((startIndex:endIndex) / recObj.SampleRate, noisyAudio);
xlabel('زمان (ثانیه)');
ylabel('سیگنال نویزی');
title('سیگنال نویزی');
playerNoisy = audioplayer(noisyAudio, recObj.SampleRate);
play(playerNoisy);

% 18. حذف نویز با استفاده از فیلتر بالابر بتاورث (Butterworth)
disp('حذف نویز با استفاده از فیلتر بالابر بتاورث (Butterworth)...');
filterOrder = 6; % ترتیب فیلتر
cutoffFreq = 4000; % فرکانس قطع
[b, a] = butter(filterOrder, cutoffFreq / (recObj.SampleRate / 2), 'low');
filteredAudioButter = filter(b, a, noisyAudio);

% 19. نمایش و پخش سیگنال حذف نویز (Butterworth)
disp('نمایش سیگنال حذف نویز با استفاده از فیلتر بالابر بتاورث (Butterworth)...');
plot((startIndex:endIndex) / recObj.SampleRate, filteredAudioButter);
xlabel('زمان (ثانیه)');
ylabel('سیگنال حذف نویز (Butterworth)');
title('سیگنال حذف نویز با استفاده از فیلتر بالابر بتاورث');
playerFilteredButter = audioplayer(filteredAudioButter, recObj.SampleRate);
play(playerFilteredButter);

% تنظیم پارامترهای فیلتر
fs = recObj.SampleRate; % نرخ نمونه‌برداری صدا
duration = recObj.TotalSamples / fs; % مدت زمان صدا (ثانیه)
t = 0:1/fs:duration-1/fs; % محور زمانی

% تعریف فیلتر پنجره‌ای
windowType = 'hamming'; % نوع پنجره (می‌توانید نوع دیگری را انتخاب کنید)
windowLength = round(fs * 0.1); % طول پنجره (حدود 0.1 ثانیه)
window = window(windowType, windowLength);

% محاسبه تبدیل فوریه سیگنال
signalFFT = fft(signal);

% اعمال پنجره بر روی بخش کوچک سیگنال
startIndex = round(fs * 0.02); % شروع بخش کوچک (حدود 20 میلی‌ثانیه)
endIndex = round(fs * 0.1); % پایان بخش کوچک (حدود 100 میلی‌ثانیه)
signalSmall = signal(startIndex:endIndex); % بخش کوچک سیگنال
windowedSignal = signalSmall .* window; % سیگنال با پنجره اعمال شده

% محاسبه تبدیل فوریه سیگنال با پنجره
windowedSignalFFT = fft(windowedSignal);

% بازگرداندن سیگنال با پنجره به حوزه زمان
restoredSignal = ifft(windowedSignalFFT);

% نمایش نتایج
figure;
subplot(3, 1, 1);
plot(t(startIndex:endIndex), signalSmall);
title('بخش کوچک سیگنال');
xlabel('زمان (ثانیه)');
ylabel('سیگنال');

subplot(3, 1, 2);
plot(t(startIndex:endIndex), windowedSignal);
title('سیگنال با پنجره اعمال شده');
xlabel('زمان (ثانیه)');
ylabel('سیگنال');

subplot(3, 1, 3);
plot(t(startIndex:endIndex), restoredSignal);
title('سیگنال با پنجره بازگردانده شده');
xlabel('زمان (ثانیه)');
ylabel('سیگنال');

% تنظیم پارامترهای فیلتر
fs = recObj.SampleRate; % نرخ نمونه‌برداری صدا
duration = recObj.TotalSamples / fs; % مدت زمان صدا (ثانیه)
t = 0:1/fs:duration-1/fs; % محور زمانی

% محاسبه تبدیل فوریه سیگنال
signalFFT = fft(signal);

% تعیین بخش کوچک سیگنال
startIndex = round(fs * 0.02); % شروع بخش کوچک (حدود 20 میلی‌ثانیه)
endIndex = round(fs * 0.1); % پایان بخش کوچک (حدود 100 میلی‌ثانیه)
signalSmall = signal(startIndex:endIndex); % بخش کوچک سیگنال

% محاسبه تبدیل فوریه بخش کوچک سیگنال
signalSmallFFT = fft(signalSmall);

% نمایش نمودار حوزه فرکانس بخش کوچک سیگنال
figure;
subplot(2, 1, 1);
plot(abs(signalSmallFFT));
title('نمودار حوزه فرکانس بخش کوچک سیگنال');
xlabel('فرکانس');
ylabel('مقدار');

% نمایش نمودار حوزه فرکانس کل سیگنال
subplot(2, 1, 2);
plot(abs(signalFFT));
title('نمودار حوزه فرکانس کل سیگنال');
xlabel('فرکانس');
ylabel('مقدار');

% تنظیم پارامترهای فیلتر
fs = recObj.SampleRate; % نرخ نمونه‌برداری صدا
duration = recObj.TotalSamples / fs; % مدت زمان صدا (ثانیه)
t = 0:1/fs:duration-1/fs; % محور زمانی

% محاسبه تبدیل فوریه سیگنال
signalFFT = fft(signal);

% تعیین بخش‌های کوچک سیگنال (20 میلی‌ثانیه تا 100 میلی‌ثانیه)
startIndex = round(fs * 0.02);
endIndex = round(fs * 0.1);

% حذف ضرایب نویز برای بخش‌های کوچک سیگنال
for i = startIndex:endIndex
    if abs(signalFFT(i)) < threshold
        signalFFT(i) = 0;
    end
end

% بازگرداندن سیگنال تمیز شده به حوزه زمان
cleanSignal = ifft(signalFFT);

% نمایش نتیجه
figure;
subplot(2, 1, 1);
plot(t, signal);
title('سیگنال اصلی');
xlabel('زمان (ثانیه)');
ylabel('سیگنال');

subplot(2, 1, 2);
plot(t, cleanSignal);
title('سیگنال تمیز شده');
xlabel('زمان (ثانیه)');
ylabel('سیگنال');

% بازگرداندن سیگنال حذف نویز شده به حوزه زمان

restoredSignal = ifft(signalFFT);

% نمایش و پخش سیگنال حذف نویز شده
sound(restoredSignal, fs);

% نمایش نتیجه
figure;
plot(t, restoredSignal);
title('سیگنال حذف نویز شده');
xlabel('زمان (ثانیه)');
ylabel('سیگنال');

👆اینو دارم ولی یک سری جاها ارور میده برام، نمیدونم مشکلش چیه

این پروژه شامل 1 فایل مهم است، لطفا قبل از ارسال پیشنهاد حتما نسبت به بررسی این فایل اقدام فرمایید.

مهارت ها و تخصص های مورد نیاز


بودجه

100,000 تومان تا 300,000 تومان

مهلت برای انجام

1روز

وضعیت مناقصه

انجام شده


درباره کارفرما

عضویت یک سال پیش

1649 پروژه ثبت شده ،
45 پروژه در حال انجام ،
12 پروژه آماده دریافت پیشنهاد ،
نرخ پذیرش پیشنهاد 35%

برای پیدا کردن پروژه‌های مشابه ثبت نام کنید و پروفایل خود را بسازید.

ورود با گوگل
یا
نام نباید خالی باشد.
نام خانوادگی نباید خالی باشد.

نیاز به استخدام فریلنسر یا سفارش پروژه مشابه دارید؟

سفارش پروژه مشابه

قادر به انجام این پروژه هستید؟

ثبت نام کنید

مهلت ارسال پیشنهاد قیمت برای این پروژه تمام شده است

سری به پروژه‌های مشابه بزنید

روش کار در پارس‌کدرز

به رایگان یک حساب کاربری بسازید

مهارت‌ها و تخصص‌های خود را ثبت کنید، رزومه و نمونه‌کارهای خود را نشان دهید و سوابق کاری خود را شرح دهید.

به شیوه‌ای که دوست دارید کار کنید

برای پروژه‌های دلخواه در زمان دلخواه پیشنهاد قیمت خود را ثبت کنید و به فرصت‌های شغلی منحصر به فرد دسترسی پیدا کنید.

با اطمینان دستمزد دریافت کنید

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

می‌خواهید شروع به کار کنید؟

یک حساب کاربری بسازید


بهترین مشاغل فریلنسری را پیدا کنید
رشد شغلی شما به راحتی ایجاد یک حساب کاربری رایگان و یافتن کار (پروژه) متناسب با مهارت‌های شما است.

پیدا کردن کار (پروژه)

تماشای دمو روش کار