Будь-який сигнал s(t), спектр якого не містить складових з частотами вище деякого значення може бути без втрат інформації представлений своїми дискретними відліками {s(kT)}, взятими з інтервалом Т, що задовольняє наступного нерівності
(7.1)
Відновлення вихідного безперервного сигналу s(t) за набором його дискретних відліків {s(kT)} здійснюється за формулою
(7.2)
Формула (7.2) являє собою розкладання сигналу s(t) за системою функцій, званої базисом Котельникова:
(7.3)
Для пояснення формування безперервного сигналу за його дискретним відліках використовуйте наведений нижче код:
function Example7_1
t=-2:0.01:6; % час для відновленого сигналу
td=-2:6; % номер відліків
s=[0 0 4 3 2 1 0 0 0]; % дискретний сигнал
d=[td' s']; % дані для функції pulstran
y=pulstran(t,d,'sinc'); % відновлений сигнал
plot(td,s,'o',t,y) % графік відновленого сигналу
hold on % виводимо графіки окремих sinc-імпульсів
for k=1:length(s),plot(t,s(k)*sinc(t-td(k)),':'),end
hold off % На екрані пунктиром показані графіки окремих доданків (7.2), суцільною лінією - відновлений сигнал.
В якості прикладу відновимо за формулою (7.2) безперервний сигнал на основі послідовності, чотири ненульових відліку: …, 0, 0, 30, 1, -1, -30, 0, 0, …
function Example7_2
t=0:0.01:8; % час для відновлення сигналу
td=2:5; % номери ненульових відліків
s=[30 1 -1 -30]; % дискретний сигнал
d=[td' s']; % дані для функції pulstran
y=pulstran(t,d,'sinc'); % відновлений сигнал
plot(td,s,'o',t,y)
grid % На екрані показаний сигнал з обмеженим спектром, що містить фрагмент з коливаннями високої частоти.
7.2. Розрахунок часових функцій
Аналоговий сигнал являє собою функцію і при його дискретизації ми отримуємо відліки, які є значеннями цієї функції, обчисленими в дискретні моменти часу. Тому для розрахунку Дискретизований сигналу необхідно перш за все сформувати вектор дискретних значень часу. Для цього зручно задати значення частоти дискретизації Fs (sampling frequency) і використовувати зворотну величину як кроку тимчасового ряду. Сформувавши вектор опорних значень часу, можна обчислювати значення сигналу, використовуючи цей вектор у відповідних формулах. Наведемо кілька прикладів:
function Example7_3
Fs=8e3; % частота дискретизації 8 кГц
t=0:1/Fs:1; % одна секунда дискретних значень часу
t=t'; % перетворимо рядок у стовпець
A=2; % амплітуда - два вольта
f0=1e3; % частота - 1 кГц
phi=pi/4; % початкова фаза – 45о
s1=A*cos(2*pi*f0*t+phi); % гармонійний сигнал
alpha=1e3; % швидкість загасання
s2=exp(-alpha*t).*s1; % загасаюча синусоїда
subplot(2,2,1);plot(s2(1:100))
subplot(2,2,2);plot(s2(1:100),'.')
subplot(2,2,3);stem(s2(1:100))
subplot(2,2,4);stairs(s2(1:100))
figure
plot(t(1:100),s2(1:100))
f=[600 800 1000 1200 1400]; % вектор частот (строка!)
s3=cos(2*pi*t*f); % п'ятиканальний сигнал
figure
plot(t(1:100),s3(1:100,:))
На екрані представлені форми графіків дискретного сигналу.
Горизонтальна вісь проградуйована в номерах відліків. Щоб показати на цій осі значення часу, при виклику графічних функцій слід використовувати два параметри, передавши в першому з них відповідний часовий вектор, наприклад так: plot (t (l: 100), s2 (l: 100))
Якщо необхідно згенерувати багатоканальний сигнал, канали якого описуються однією і тією самою формулою, але з різними числовими значеннями параметрів, для цього можна ефективно використовувати кошти матричних операцій MATLAB
7.3. Функції генерації одиночних імпульсів
У пакеті Signal Processing є ряд функцій, що генерують часто зустрічаються на практиці неперіодичні сигнали:
□ rectpuls— прямокутний імпульс;
□ tripuls — трикутний імпульс;
□ sinс— імпульс виду sin(nt)/(nt);
□ gauspuls — радіоімпульс з гауссовой обвідної;
□ pulstran — послідовність з кінцевого числа імпульсів будь-якої форми. Далі ці функції розглядаються більш докладно.
7.3.1. Прямокутний імпульс
Для формування одиночного прямокутного імпульсу з одиничною амплітудою служить функціяrectpuls: у = rectpuls(t, width). Тут t - вектор значень часу, width - ширина (тривалість) імпульсу. Повертається результат у - вектор розрахованих значень сигналу, що визначаються за такою формулою:
.
Параметр width можна опустити, при цьому його значення за замовчуванням дорівнює 1 і функція rectpuls виробляє результат, відповідний математичної функції rect. В якості прикладу сформуємо пару різнополярних прямокутних імпульсів з амплітудою 5 В і тривалістю 20 мс кожен, розташованих праворуч і ліворуч від початку відліку часу. Частоту дискретизації виберемо рівною 1 кГц.
function Example7_4
Fs=1e3; % частота дискретизації
t=-40e-3:1/Fs:40e-3; % дискретний час
T=20e-3; % тривалість імпульсів
A=5; % амплітуда
s=-A*rectpuls(t+T/2,T)+A*rectpuls(t-T/2,T);
plot(t,s)
ylim([-6 6])
На екрані сигнал сформований за допомогою функції rectpuls.
7.3.2. Трикутний імпульс
Для формування одиночного трикутного імпульсу з одиничною амплітудою служить функція y = tripuls(t, width, skew). Тут t - вектор значень часу, width - ширина (тривалість) імпульсу, skew - коефіцієнт асиметрії імпульсу, який визначає положення його вершини. Пік імпульсу розташований при t = width*skew/2. Параметр skew повинен лежати в діапазоні від -1 до 1. Повертається результат у визначається за формулою:
.
В якості прикладу сформуємо симетричний трапецієподібний імпульс з амплітудою 10 В і розмірами верхньої і нижньої основ 20 і 60 мс відповідно. Частоту дискретизації виберемо рівною 1 кГц.
function Example7_5
Fs=1e3; % частота дискретизації
t=-50e-3:1/Fs:50e-3; % дискретний час
A=10; % амплітуда
T1=20e-3; % верхнє підстава
T2=60e-3; % нижня частина
s=A*(T2*tripuls(t,T2)-T1*tripuls(t,T1))/(T2-T1);
plot(t,s)
На екрані сигнал сформований за допомогою функції tripuls.