Добавил:
Barlavonus
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Lab1_2
.m %% Построение графика дискретного сигнала
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, В');
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, В');
Соседние файлы в предмете Цифровая обработка сигналов
