x = -pi:0.1:pi;
plot(x, cos(x))
clc;
clear;
close all;

%% 1. خواندن فایل صوتی (با تولید سیگنال جایگزین در صورت نبود فایل)
filename = 'File-Gamelan slendro.mid.mp3';

if ~exist(filename, 'file')
    warning('فایل %s یافت نشد. یک سیگنال مصنوعی تولید می‌شود.', filename);
    % تولید سیگنال ترکیبی از دو سینوس (به جای فایل)
    Fs = 44100;
    t = 0:1/Fs:3;
    x = 0.7*sin(2*pi*440*t) + 0.5*sin(2*pi*880*t);
else
    [x, Fs] = audioread(filename);
end

fprintf('نرخ نمونه‌برداری Fs = %d Hz\n', Fs);
fprintf('تعداد نمونه‌ها = %d\n', length(x));

%% 2. تبدیل به مونو
if size(x, 2) > 1
    x = mean(x, 2);
end

%% 3. نرمال‌سازی
x = x / (max(abs(x)) + eps);

%% 4. نمایش سیگنال در حوزه زمان
t = (0:length(x)-1)/Fs;
figure;
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Signal in Time Domain');
grid on;

%% 5. تحلیل طیف فرکانسی (FFT)
N = length(x);
X = fft(x);
f = (0:N-1)*(Fs/N);
figure;
plot(f(1:floor(N/2)), abs(X(1:floor(N/2))));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Magnitude Spectrum (Original)');
grid on;

%% 6. کاهش نرخ نمونه‌برداری (با مدیریت عدم وجود جعبه‌ابزار)
M = 4;
Fs_ds = Fs / M;

% تلاش برای استفاده از lowpass (نیازمند Signal Processing Toolbox)
try
    x_lp = lowpass(x, Fs/(2*M), Fs);
    use_lowpass = true;
catch
    warning('تابع lowpass در دسترس نیست. از فیلتر میانگین‌گیر ساده استفاده می‌شود.');
    use_lowpass = false;
    % فیلتر پایین‌گذر ساده با میانگین متحرک (طول پنجره = 2*M)
    b = ones(1, 2*M) / (2*M);
    x_lp = filter(b, 1, x);
end

% کاهش نرخ نمونه‌برداری (downsample ممکن است در متلب پایه نباشد)
try
    x_ds = downsample(x_lp, M);
catch
    warning('تابع downsample در دسترس نیست. از اندیس‌گذاری دستی استفاده می‌شود.');
    x_ds = x_lp(1:M:end);
end

fprintf('نرخ نمونه‌برداری جدید Fs_ds = %d Hz\n', Fs_ds);
fprintf('تعداد نمونه‌های جدید = %d\n', length(x_ds));

%% 7. نمایش طیف سیگنال کاهش‌یافته
N_ds = length(x_ds);
X_ds = fft(x_ds);
f_ds = (0:N_ds-1)*(Fs_ds/N_ds);
figure;
plot(f_ds(1:floor(N_ds/2)), abs(X_ds(1:floor(N_ds/2))));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title(['Spectrum After Downsampling (Factor = ', num2str(M), ')']);
grid on;

%% 8. پخش صدا (با مدیریت خطای سخت‌افزاری)
try
    fprintf('پخش سیگنال اصلی...\n');
    sound(x, Fs);
    pause(length(x)/Fs + 0.5);
catch
    warning('پخش صدای اصلی ممکن نیست (خروجی صوتی در دسترس نیست).');
end

try
    fprintf('پخش سیگنال کاهش‌یافته...\n');
    sound(x_ds, Fs_ds);
catch
    warning('پخش صدای کاهش‌یافته ممکن نیست.');
end

fprintf('پایان برنامه.\n');

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: