Теорема Котельникова

Будь-який сигнал 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.