Примеры и упражнения на базе среды matlab к разделу 1.
Ниже приводятся примеры, которые иллюстрируют основные теоретические положения, относящиеся к сфере математического моделирования цифровых систем. Каждый из примеров сопровождается листингом программного кода на языке MATLAB, реализующим необходимее построения. В ряде случаев даются необходимые комментарии.
Кроме того, здесь приводятся упражнения для самостоятельной работы. К некоторым из них прилагаются определенные рекомендации.
Пример 5_01. а) Необходимо сгенерировать дискретный сигнал в среде MATLAB, где
на сегменте дискретного времени. Для построенной конечной последовательности нужно построить график решетчатой функции.
б) Необходимо сгенерировать сдвинутый ступенчатый единичный дискретный сигнал на сегменте , где , и построить его графическое представление.
Пример выполняется с помощью программы, представленной в листинге 5.1. Обратим внимание на элегантный способ задания ступенчатого единичного сигнала. Результат работы программы по первому пункту показан на рис. 1.5.
Листинг 5.1
% Пример 5_01: Цифровые сигналы
clear;
% Базовые моменты времени
n1=-10:10;
% Заданные отсчеты сигнала
u1=sin(0.5*n1).*exp(-0.4*abs(n1));
u=[0 0 0 u1 0 0 0]; n=[-13 -12 -11 n1 11 12 13];
% График
figure(1); clf reset; h2=stem(n,u,'bo','fill');
set(h2,'LineWidth',2); grid on;
Xlabel('n'); ylabel('u[n]');
% Отсчеты единичного импульса
n1=-10; n2=10; n0=0;
nn=[n1:n2]; xx=[(nn-n0)>=0]; % !!!
% График
figure(2); clf reset;
h2=stem(nn,xx,'ro','fill');
set(h2,'LineWidth',2); grid on;
axis([-10,10,0,1.2]);
Xlabel('n'); ylabel('u[n]');
Рис. 1.5. График функции для примера 5_01.
Пример 5_02. Необходимо построить конечную импульсную характеристику DLTI-системы в виде последовательности
,
заданной в моменты дискретного времени . Для применения формулы свертки нужно сгенерировать две вспомогательные последовательности: отраженную последовательность и сдвинутую последовательность ().
Все указанные последовательности должны быть представлены на отдельных графиках в едином окне функции plot среды MATLAB.
Данный пример можно выполнить с помощью программного кода на языке MATLAB, представленного в листинге 5.2.
Листинг 5.2
% Пример 5_02: Импульсная характеристика и свертка
clear;
% Моменты дискретного времени
n=-8:1:8;
% Импульсная характеристика
h=[0 0 0 0 0 0 0.1 0.2 0.4 0.5 0.6 0.8 0.7 0.5 0.2 0 0];
% Отражение от начала координат
h1=flipud(h'); h1=h1'; nn=length (h);
% Сдвиг вправо на 3 отсчета
h2=[0 0 0 h1(1:nn-3)];
% Графики последовательностей
figure(1); clf reset;
subplot(3,1,1); g1=stem(n,h,'bo','fill'); grid on;
set(g1,'LineWidth',2); axis([-8,8,0,0.9]);
title('1) impulse responce h(k)'); set(gca, 'XTickLabel',[]);
subplot(3,1,2); g2=stem(n,h1,'bo','fill'); grid on;
set(g2,'LineWidth',2); axis([-8,8,0,0.9]);
title('2) impulse responce h(-k)'); set(gca, 'XTickLabel',[]);
subplot(3,1,3); g3=stem(n,h2,'bo','fill'); grid on;
set(g3,'LineWidth',2); axis([-8,8,0,0.9]);
title('3) impulse responce h(-k+n), n=3');
Xlabel('k');
Результат работы приведенного фрагмента показан на рис. 1.3.
Пример 5_02. Необходимо построить реакцию системы на входной сигнал на отрезке времени с отсчетами
Построение следует осуществить с помощью функции conv среды MATLAB для нахождения свертки двух конечных последовательностей и . При этом импульсная характеристика задается конечной последовательностью для моментов дискретного времени.
Программный код для выполнения примера приведен в листинге 5.3.
Листинг 5.3
% Пример 5_03: Реакция на заданный входной сигнал
clear;
% Моменты дискретного времени
n=-5:22; nu=0:8; ni=0:9;
% Входной сигнал
u1=exp(-0.1*abs(nu));
u=[zeros(1,5) u1 zeros(1,14)];
% Импульсная характеристика
h1=[1 -1 2 3 -2 -1 -0.5 2 3 -1];
h=[zeros(1,5) h1 zeros(1,13)];
% Вычисление свертки
y1=conv(h1,u1);
y=[zeros(1,5) y1 zeros(1,5)];
% Графики последовательностей
figure(1); clf reset;
subplot(3,1,1); g1=stem(n,u,'bo','fill'); grid on;
set(g1,'LineWidth',2); axis([-5,22,0,1.2]);
title('1) input signal u[n]'); set(gca, 'XTickLabel',[]);
subplot(3,1,2); g2=stem(n,h,'bo','fill'); grid on;
set(g2,'LineWidth',2); axis([-5,22,-2.5,3.5]);;
title('2) impulse responce h[k]'); set(gca, 'XTickLabel',[]);
subplot(3,1,3); g3=stem(n,y(1:28),'bo','fill');
grid on;
set(g3,'LineWidth',2); axis([-5,22,-1,6]);
title('3) system responce y[n]');