Всем доброго времени суток и с наступившими праздниками!
В статье пойдёт речь о построении графиков в MATLAB для моей курсовой по дисциплине радиотехнические цепи и сигналы. Никаких мегакрутых и инновационных алгоритмов и тайных знаний здесь нет. Статья предназначена для помощи студентам с потока в оформлении курсовой работы. Итак, поехали:
Для тех, кто не хочет читать, сразу выложу свой код, а потом постараюсь подробно всё описать.

Код:
function PTC
%% 1 пункт
figure
x=[];
y=[];
for t=-10:0.01:10
    x=[x,t];
    t=t/1000;
    y=[y,sig(t)];
end
plot(x,y), grid
xlabel('t, мс');
ylabel('s(t), В');
title('Сигнал');
%% Спектры
figure
x=[];
y=[];
subplot(2,1,1)
for w=-15:0.01:15
    x=[x,w];
    w=w*1000;
    y=[y,1000*S(w)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('|S(\omega)|, В/кГц');
title('Амплитудный спектр');
%%
y=[];
subplot(2,1,2)
for w=-15:0.01:15
    w=w*1000;
    y=[y,fi(w)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('\phi(\omega), \circ');
title('Фазовый спектр');
%% 2 пункт
% Sп(t)
figure
x=[];
y=[];
T=30*10^-3;
for t=-80:0.1:80
    s=0;
    x=[x,t];
    t=t/1000;    
    for n=-10:10
        s=s+sig(t-n*T);
    end      
    y=[y,s];    
end
plot(x,y,'LineWidth' ,2),grid
xlabel('t, мс');
ylabel('s_п(t), В');
title('Временная диаграмма периодического сигнала');
%% Спектры
figure
x=[];
y=[];
subplot(2,1,1,'xlim',[0,10])
for n=0:50
    w=2*pi*n/T; %ось х мс
    x=[x,w/1000];
    s=2/T*S(w);
    if n==0
        s=s/2;
    end
    y=[y,s];
    line([w/1000 w/1000],[0 s]);
    line(w/1000, s,'marker','.','markersize' ,10)
end
hold on
plot(x,y,'--','Color',[1 0 0]);
grid,
xlabel('\omega, рад/мс');
ylabel('\{A_n\}, В');
title('Амплитудный спектр');
%%
subplot(2,1,2,'xlim',[0,10])
for n=0:50
    w=2*pi*n/T; 
    line([w/1000 w/1000],[0 fi(w)]);
    line(w/1000, fi(w),'marker','.','markersize' ,10);
end
x=[];
y=[];
for w=0:0.01:10
    x=[x,w];
    w=w*1000;
    y=[y,fi(w)];    
end
hold on
plot(x,y,'--','Color',[1 0 0]);
grid
xlabel('\omega, рад/мс');
ylabel('\{\phi_n\}, \circ');
title('Фазовый спектр');
%% Апроксимация n=10
figure
x=[];
y=[];
subplot(3,1,1)
for t=-15:0.01:15
    x=[x,t];
    t=t/1000;
    s=2/15;    
    for n=1:10
        w=2*pi*n/T; %ось х мс
        s=s+2/T*S(w)*cos(w*t+pi/180*fi(w));
    end
    y=[y,s];
end
plot(x,y)
grid
xlabel('t, мс');
ylabel('s_п(t), В');
title('n=10');
%% n=25
x=[];
y=[];
subplot(3,1,2)
for t=-15:0.01:15
    x=[x,t];
    t=t/1000;
    s=2/15;    
    for n=1:25
        w=2*pi*n/T; %ось х мс
        s=s+2/T*S(w)*cos(w*t+pi/180*fi(w));
    end
    y=[y,s];
end
plot(x,y)
grid
xlabel('t, мс');
ylabel('s_п(t), В');
title('n=25');
%% n=50
x=[];
y=[];
subplot(3,1,3)
for t=-15:0.01:15
    x=[x,t];
    t=t/1000;
    s=2/15;    
    for n=1:50
        w=2*pi*n/T; %ось х мс
        s=s+2/T*S(w)*cos(w*t+pi/180*fi(w));
    end
    y=[y,s];
end
plot(x,y)
grid
xlabel('t, мс');
ylabel('s_п(t), В');
title('n=50');
%% 3 пункт
figure
x=[];
y=[];
v=[];
w=20000;
for t=-5:0.001:5
    x=[x,t];
    t=t/1000;    
    y=[y,sig(t)*cos(w*t)];
    v=[v,sig(t)];    
end
hold on;
plot(x,y),grid
plot(x,v,'--','Color',[1 0 0])
plot(x,-v,'--','Color',[1 0 0])
xlabel('t, мс');
ylabel('u(t), В');
title('Временная диаграмма непериодического радиосигнала');
%% положительные частоты
figure
x=[];
y=[];
subplot(2,1,1)
for w=490:0.001:510
    x=[x,w];
    w=w*1000;
    y=[y,500*S(w-500000)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('|U(\omega)|, В/кГц');
title('Амплитудный спектр');
%% 
y=[];
subplot(2,1,2)
for w=490:0.001:510
    w=w*1000;
    y=[y,fi(w-500000)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('\phi_U(\omega), \circ');
title('Фазовый спектр');
%% отрицательные частоты
figure
x=[];
y=[];
subplot(2,1,1)
for w=-510:0.001:-490
    x=[x,w];
    w=w*1000;
    y=[y,500*S(w+500000)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('|U(\omega)|, В/кГц');
title('Амплитудный спектр');
%%
y=[];
subplot(2,1,2)
for w=-510:0.001:-490
    w=w*1000;
    y=[y,fi(w+500000)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('\phi_U(\omega), \circ');
title('Фазовый спектр');
%% 4 пункт
% Sп(t)
figure
x=[];
y=[];
v=[];
s1=0;
s2=0;
w0=15000;
for t=-40:0.001:40
    x=[x,t];
    t=t/1000;    
    for n=-1:1
        s1=s1+sig(t-n*T)*cos(w0*t);
        s2=s2+sig(t-n*T);
    end
    y=[y,s1];   
    v=[v,s2];
    s1=0;
    s2=0;
end
hold on
plot(x,y),grid
plot(x,v,'--','Color',[1 0 0])
plot(x,-v,'--','Color',[1 0 0])
xlabel('t, мс');
ylabel('u_п(t), В');
title('Временная диаграмма периодического радиосигнала');
%% Спектры пачки радиоимпульсов
figure
x=[];
y=[];
subplot(2,1,1,'xlim',[490 510])
for n=-50:50
    w=2*pi*n/T; %ось х мс
    x=[x,w/1000+500];
    y=[y,1/T*S(w)];
    line([w/1000+500 w/1000+500],[0 1/T*S(w)]);
    line(w/1000+500, 1/T*S(w),'marker','.','markersize' ,10)
end
hold on
plot(x,y,'--','Color',[1 0 0]);
grid,
xlabel('\omega, рад/мс');
ylabel('\{V_n\}, В');
title('Амплитудный спектр');
%%
x=[];
y=[];
subplot(2,1,2,'xlim',[490 510])
for n=-50:50
    w=2*pi*n/T; %ось х мс
    x=[x,w/1000+500];
    y=[y,fi(w)];
    line([w/1000+500 w/1000+500],[0 fi(w)]);
    line(w/1000+500, fi(w),'marker','.','markersize' ,10);
end
x=[];
y=[];
for w=-10:0.01:10
    x=[x,w+500];
    w=w*1000;
    y=[y,fi(w)];
end
hold on
plot(x,y,'--','Color',[1 0 0]);
grid
xlabel('\omega, рад/мс');
ylabel('\{\psi_n\}, \circ');
title('Фазовый спектр');
%% 5 пункт
%АКФ
figure
x=[];
y=[];
for t=-10:0.01:10
    x=[x,t];
    t=t/1000;
    y=[y,1000*R(t)];
end
plot(x,y), grid
xlabel('\tau, мс');
ylabel('R_s(\tau), В^2мc');
title('Автокорелляционная функция сигнала');
%% АКФ радиоимпульса
figure
x=[];
y=[];
for t=-10:0.01:10
    x=[x,t];
    t=t/1000;
    y=[y,1/2*1000*R(t)*cos(w0*t)];
end
hold on;
plot(x,y), grid
x=[];
y=[];
for t=-10:0.01:10
    x=[x,t];
    t=t/1000;
    y=[y,1/2*1000*R(t)];
end
plot(x,y,'--','Color',[1 0 0]);
plot(x,-y,'--','Color',[1 0 0]);
xlabel('\tau, мс');
ylabel('R_u(\tau), В^2мc');
title('Автокорелляционная функция радиосигнала');
%% 6 пункт
% ачх фчх
figure
x=[];
y=[];
subplot(2,1,1)
for wt=-5:0.01:5
    x=[x,wt];
    y=[y,(1/36*wt^2/(1+wt^2))^0.5];
end
plot(x,y), grid
xlabel('\omega\tau, рад');
ylabel('|H(\omega)|');
title('АЧХ');
%%
y=[];
subplot(2,1,2)
for wt=-5:0.01:5
    y=[y,(180/pi)*(pi/2*sign(wt)-atan(wt))];
end
plot(x,y), grid
xlabel('\omega\tau, рад');
ylabel('\phi_H(\omega), \circ');
title('ФЧХ');
%% ИХ ПХ g1
figure
x=[];
y=[];
subplot(3,1,1)
for t=0:0.001:1
    x=[x,t];
    t=t/1000;
    y=[y,(-1/(6*0.0002)*sigma(t)*exp(-t/0.0002))/1000];
end
plot(x,y,'LineWidth' ,2)
grid
xlabel('t, мс');
ylabel('h(t), мс^-1');
title('Импульсная характеристика');
%% ПХ
x=[];
y=[];
subplot(3,1,2)
for t=0:0.001:1
    x=[x,t];
    t=t/1000;
    y=[y,g(t)];
end
plot(x,y,'LineWidth' ,2)
grid
xlabel('t, мс');
ylabel('g(t)');
title('Переходная характеристика');
%% Реакция на лин нар возд
x=[];
y=[];
subplot(3,1,3)
for t=0:0.001:1
    x=[x,t];
    t=t/1000;
    y=[y,(1/6*0.0002*(1-exp(-t/0.0002)))];
end
plot(x,y,'LineWidth' ,2)
grid
xlabel('t, мс');
ylabel('g_1(t)');
title('g_1(t)');
%% Запаздывание
figure
x=[];
y=[];
for t=-2:0.001:8
    x=[x,t];
    t=t/1000;
    y=[y,sig(t-0.002)];
end
plot(x,y,'LineWidth' ,2)
grid
xlabel('t, мс');
ylabel('s_з(t), В');
title('Запаздывающий сигнал');
%% uвх
figure
x=[];
y=[];
for t=-2:0.001:8
    x=[x,t];
    t=t/1000;
    s=sigma(t)-sigma(t-0.002)+sigma(t-0.004)-sigma(t-0.006);
    y=[y,s];
end
plot(x,y,'LineWidth' ,1)
grid
xlabel('t, мс');
ylabel('u_{вых}(t), В');
title('Cигнал на входе цепи');
%% uвых
figure
x=[];
y=[];
for t=0:0.001:8
    x=[x,t];
    t=t/1000;
    s=g(t)-g(t-0.002)+g(t-0.004)-g(t-0.006);
    y=[y,s];
end
plot(x,y,'LineWidth' ,1)
grid
xlabel('t, мс');
ylabel('u_{вых}(t), В');
title('Cигнал на выходе цепи');
end
%%
function f=S(w)
t1=0.002;
f=2*t1*abs(sinc(w*t1/2)*cos(w*t1));
end
%%
function f=fi(w)
t1=0.002;
f=(180/pi)*(pi/2*(1-sign(sinc(w*t1/2)*cos(w*t1)))*sign(w)-w*t1/2);
end
%%
function f=sig(t)
t1=0.002;
f=(rect((t+t1/2)/t1)+rect((t-3*t1/2)/t1));
end
%%
function f=R(t)
t1=0.002;
f=(2*t1*(1-abs(t)/t1)*rect(t/(2*t1))+t1*(1-abs(abs(t)-2*t1)/t1)*rect((abs(t)-2*t1)/(2*t1)));
end
%%
function f=g(t)
f=1/6*sigma(t)-1/6*sigma(t)*(1-exp(-t/0.0002));
end
%%
function S=sigma(x)
if x<0 
    S=0;
else
    S=1;
end
end
%%
function S=rect(x)
if abs(x)>0.5 
    S=0;
end
if abs(x)<0.5 
    S=1;
end
if abs(x)==0.5 
    S=0.5;    
end
end
%%
function S=sinc(x)
if x==0 
    S=1;
else
    S=sin(x)/x;
end
end
%%
function S=sign(x)
if x<0 
    S=-1;
end
if x>0 
    S=1;
end
if x==0 
    S=0;    
end
end

Введение
Итак, вы установили MATLAB. Теперь его надо запустить.
Курсовая работа - Начать новую тему
После этого в поле Command Window нужно написать edit, чтобы открыть редактор, где и будем писать программу.
Курсовая работа - Начать новую тему
Курсовая работа - Начать новую тему
Расположение окон может быть несколько иным, но суть не меняется. Теперь будем разбираться с самой программой.

Код:
%% 1 пункт
figure
x=[];
y=[];
for t=-10:0.01:10
    x=[x,t];
    t=t/1000;
    y=[y,sig(t)];
end
plot(x,y), grid
xlabel('t, мс');
ylabel('s(t), В');
title('Сигнал');

figure нужен для создания окна, в котором и будут построены нужные графики.
Далее создаём пустые массивы x и y, которые будут содержать координаты точек.
Теперь нужно заполнить эти массивы. Для этого создадим цикл for. Конструкция t=-10:0.01:10 означает: переменная t будет меняться от -10 до 10 с шагом 0.01(по умолчанию шаг равен 1). Чем меньше шаг, тем более плавным получается график, но медленнее строится, т.к. операций становится больше.
x=[x,t] – производит добавление элемента к массиву с сохранением предыдущих. В данном примере это выглядит так:
Изначально массив пустой x=[];
1. Первая итерация - x=[-10] ;
2. x=[-10 -9,99];
3. x=[-10 -9,99 -9,98];

n. x=[-10 -9,99 -9,98 … 9,99 10];
t=t/1000 – рисовать будем не в секундах, а в миллисекундах. Можно этого не делать, тогда в условие цикла будет такое: t=-0.010:0.00001:0.010. От нулей рябит в глазах, плюс выше вероятность ошибки.
y=[y,sig(t)]; - заполняем массив y. sig(t) – функция, которую мы определим в конце. Она будет возвращать значение функции заданного сигнала, т.е t – это x, а sig(t) – y.
Вот как я описал sig(t):

Код:
function f=sig(t)
t1=0.002;
f=(rect((t+t1/2)/t1)+rect((t-3*t1/2)/t1));
end

Аналогично ввожу функцию rect

Код:
function S=rect(x)
if abs(x)>0.5 
    S=0;
end
if abs(x)<0.5 
    S=1;
end
if abs(x)==0.5 
    S=0.5;    
end
end

abs(x) возвращает модуль числа x.
Команда plot(x, y) соответствует построению функции, когда одномерный массив x соответствует значениям аргумента, а одномерный массив y - значениям функции.
grid добавляет на график сетку
xlabel и уlabel – добавление подписей осей.
title – название графика
Результат работы этой части программы(нажать F5 для запуска)
Курсовая работа - Начать новую тему
Можно сохранять картинку. Жмём на соответствующую иконку, выбираем формат bmp или jpg, сохраняем.
Аналогично рисуем спектры.

Код:
figure
x=[];
y=[];
subplot(2,1,1)
for w=-15:0.01:15
    x=[x,w];
    w=w*1000;
    y=[y,1000*S(w)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('|S(\omega)|, В/кГц');
title('Амплитудный спектр');
%%
y=[];
subplot(2,1,2)
for w=-15:0.01:15
    w=w*1000;
    y=[y,fi(w)];
end
plot(x,y), grid
xlabel('\omega, рад/мс');
ylabel('\phi(\omega), \circ');
title('Фазовый спектр');

subplot(2,1,1) и subplot(2,1,2) позволяют в одном окне рисовать графики в первой и второй половине окна.
w=w*1000; - как с секундами, только в одном рад/с тысяча рад/мс
По тем же причинам перемножаем значения амплитудного спектра на 1000.
\omega – так можно напечатать символ омега малое в матлабе.
Нужно отметить, чтобы нарисовать фазовый спектр в градусах, нужно домножить всё выражение на 180/3.1415.
Как это выглядит
Курсовая работа - Начать новую тему
Переходим к следующему пункту. Далее я не буду приводить целые куски кода, поэтому советую перенести код из начала статьи в матлаб.
T – период повторения импульса.

Код:
for n=-10:10
        s=s+sig(t-n*T);
end

Этот цикл позволяет получить выражение для пачки импульсов из выражения непериодического сигнала. В курсовой n изменяется от минус до плюс бесконечности. Но для построения нам будет предостаточно 20 периодов(лишние всё равно не будут видны, границы графика определяется циклов for выше. Я подгонял эти границы, чтобы увидеть 5 периодов).
При построении спектральных диаграмм пришлось по-другому ограничивать эту область ( subplot(2,1,1,'xlim',[0,10]) )
Спектр периодического сигнала дискретен, для получения выражений нужно использовать связь непериодического и периодического сигналов. Для построения спектральных линий буду использовать оператор line. n в цикле for – количество этих линий. Подбирается вручную.
line([x1 x2],[y1 y2])
line([w/1000 w/1000],[0 s]) – рисует перпендикуляр от оси абсцисс.
line(w/1000, s,'marker','.','markersize' ,10) - изображает точку('marker','.'), 'markersize' ,10 –толщина точки.
hold on – позволяет строить несколько функций на одном графике.
plot(x,y,'--','Color',[1 0 0]); - рисует пунктирную линию («--»), красным цветом('Color',[r g b]).
Курсовая работа - Начать новую тему
При построении графиков нужно убедиться, что фаза выражена в радианах.
В третьем и четвёртом пунктах проводится исследования радиосигналов
w0=15000; w=20000 – частота несущей, которая будет использоваться при построении(подбирается, чтобы было наглядно)
500000 – реальная частота несущей(находим в курсовой)
Далее сложностей уже не должно возникнуть.
Удачи при выполнении курсовой!
Леонид Делов, 3 января 2019
lad_kursk@mail.ru
https://vk.com/l_deloff