Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab1_2

.m
Скачиваний:
0
Добавлен:
28.01.2026
Размер:
2.94 Кб
Скачать
%% Построение графика дискретного сигнала
close all; % закрытие всех открытых прежде графиков

U1 = 4;
U2 = 4;
U3 = 8;
U4 = 0;
T1 = 0.006;
T2 = 0.01;
Fd = 3000; % исходные данные в СИ (В, с, Гц)

T = 1/Fd; % Создадим вектор отсчетов заданного сигнала: x(k) = u(kT), где T = 1/Fд — интервал дискретизации.
t1 = 0:T:T1;
t2 = T1:T:T2; % векторы моментов времени взятия отсчетов

a1 = 0; % Зададим линейные функции для описания сигнала по двум диапазонам времени
b1 = 4;
u1 = a1*t1 + b1;

a2 = -U3/(T2-T1);
b2 = -a2*T2;
u2 = a2*t2 + b2;

u = [u1(1:end-1) u2]; % На момент взятия отсчета приходится скачок уровня аналогового сигнала.
% Значение дискретного отсчета выберем произвольно в пределах диапазона
% скачка, для этого исключим дублирование последних точек справа с помощью end-1
t = [t1(1:end-1) t2];

% Построим график дискретного сигнала
figure(1);
stem(t, u, 'Linewidth', 1.5);
ax = gca;
ax.FontSize = 12;
xlabel('T, с');
ylabel('U, В');

%% Построение графика спектра дискретного сигнала

k = (0:length(t)-1).';
w = (-pi:(0.001*pi):pi);
kw = k*w; % Вычислим произведение столбца k и строки w — это даст матрицу размером N x M, содержащую все попарные произведения значений k и w
sign = kw*(-1j); % Умножим полученную матрицу на -j, чтобы получить показатель комплексной экспоненты

ex = exp(sign); % Значение комплексной экспоненты

% Умножим сформированный ранее вектор отсчетов сигнала x на матрицу значений комплексных экспонент.
% Эта операция реализует суммирование по k в формуле (1.3) и в результате
% дает вектор-строку значений спектра, рассчитанных для M частот из вектора w

Xw = u*ex; % X(w)

% Построим графики амплитудного и фазового спектров сигнала, разместив их друг под другом в одном графическом окне

linear_f = Fd*w/(2*pi); % линеаризованная частота
figure(2);
subplot(2,1,1);
plot(linear_f, abs(Xw), 'Linewidth', 1.5);
xlabel('f, Гц');
ylabel('А(f)');
ax = gca;
ax.FontSize = 12;
subplot(2,1,2);
plot(linear_f, angle(Xw), 'Linewidth', 1.5);
xlabel('f, Гц');
ylabel('Ф(f)');
ax = gca;
ax.FontSize = 12;

%% Восстановление аналогового сигнала по теореме Котельникова

tv = -5*T : T/10 : (T2+5*T); % Сигнал рассчитывается для равномерно следующих значений времени,
% расположенных в 10 раз чаще, чем было при дискретизации сигнала. Сформируем вектор
% моментов времени для расчета восстановленного сигнала по (1.5).
% Охватываемый диапазон времени будет выходить за края
% сигнала как минимум на 5 исходных интервалов дискретизации.

null = zeros(1,length(tv)); % Формируем заполненную нулями «заготовку» для вектора
% значений восстановленного сигнала s(t). Длина этого вектора должна
% совпадать с длиной вектора моментов времени.

for k = 0:length(u)-1
null = null + (u(k+1)*sinc(1/T*(tv-k*T)));
end

figure(3);
plot(tv, null);

hold on;
stem(t, u);
ax = gca;
ax.FontSize = 12;
xlabel('T, с');
ylabel('U, В');
Соседние файлы в предмете Цифровая обработка сигналов