Порядок виконання роботи

1. Генерація послідовності імпульсів.

2. Функції генерації періодичних сигналів.

3. Генерація сигналу з мінливою частотою.

4. Формування випадкових сигналів.

Короткі теоретичні відомості та методичні вказівки

Дана Лабораторна робота є продовженням роботи 7, так що відповідні теоретичні відомості та методичні вказівки наведені у попередній роботі.

8.1. Генерація послідовності імпульсів

Функція pulstran служить для генерації кінцевої послідовності імпульсів (pulse train) однакової форми, затримки і рівні задаються довільно. Самі імпульси можуть задаватися одним із двох способів: ім'ям функції, яка генерує імпульс, або вже розрахованим вектором відліків. Якщо імпульси задаються ім'ям генеруючої функції, функція pulse train викликається наступним чином:

у = pulstran(t, d, 'func', p1, p2, ...).

Тут t - вектор значень часу, d - вектор затримок, 'func' - ім'я функції, яка генерує одиночний імпульс. B якісті цієї функції можуть використовуватися, наприклад, rectpuls, tripuls, gauspuls, а також будь-які інші функції (в тому числі і «саморобні»), що беруть в якості першого вхідного параметра вектор моментів часу і повертають вектор розрахованих відліків сигналу. Параметрі, що залишилися p1, р2, ... - додаткові, вони передаються функції func при її виклику.

Таким чином, функція pulstran в даному варіанті використання генерує вихідний сигнал наступним чином:

y = func(t-d(1), p1, p2, …) +…

func(t-d(2), p1, p2, …) +…

func(t-d(3), p1, p2, …) +…

Якщо d - двухстолбцовая матриця, то перший стовпець трактується як затримки імпульсів, а другий - як їх рівні. При цьому вихідний сигнал формується так:

y = d(1,1)* func(t-d(1,2), p1, p2, …) +…

d(2,1)* func(t-d(2,2), p1, p2, …) +…

d(3,1)* func(t-d(3,2), p1, p2, …) +…

В якості прикладу сформуємо послідовність з п'яти симетричних трикутних імпульсів, інтервали між якими лінійно збільшуються, а амплітуди експоненційно зменшуються. Частоту дискретизації виберемо рівною 1 кГц. Тривалість імпульсу - 20 мс.

function Example8_1

Fs=1e3; % частота дискретизації

t=0:1/Fs:0.5; % дискретний час

tau=20e-3; % тривалість імпульсу

d=[20 80 160 260 380]'*1e-3; % затримки імпульсів

d(:,2)=0.8.^(0:4)'; % амплітуди імпульсів

y=pulstran(t,d,'tripuls',tau);

plot(t,y) % На екрані послідовність трикутних імпульсів, сформована за допомогою функції pulstran.

Якщо для генерації одиночного імпульсу немає готової функції, можна розрахувати вектор відліків імпульсу, а потім використовувати другий варіант виклику функції pulstran:

y = pulstran(t, d, p, Fs, 'method')

Сенс вхідних параметрів t і d той же, що й раніше. Вектор p повинен містити відліки одиночного імпульсу, а параметр Fs вказує частоту дискретизації, використану при розрахунку цього вектора. Вважається, що перший відлік з вектора p відповідає нульовому моменту часу.

Оскільки частота Fs може не збігатися з кроком значень вектора t (в принципі, вони навіть не зобов'язані представляти собою рівномірну послідовність) і затримки з вектора d теж не обов'язково кратні цього кроку, для перерахунку затриманих імпульсів до сітки моментів часу t в загальному випадку необхідне використання інтерполяції. Метод інтерполяції може бути явно задано за допомогою строкового параметра 'method'. Можливі всі методи, підтримувані функцією interpl: 'nearest', 'linear', 'spline', 'pchip', 'cubic' і 'v5cubic'.

В якості прикладу сформуємо послідовність з шести імпульсів, що мають форму одного періоду функції sin2. Нехай тривалість імпульсу дорівнює 60 мс, а частота його дискретизації - 400 Гц. Відстань між центрами імпульсів буде однаковим і рівним 64 мс, а частота дискретизації вихідного сигналу - 1 кГц. Імпульси будуть експоненціально затухати з ростом номера.

function Example8_2

Fs0=400; % частота дискретизації імпульсу

tau=60e-3; % тривалість імпульсу

t0=0:1/Fs0:tau; % дискретний час для імпульсу

s0=sin(pi*t0/tau).^2; % вектор відліків імпульсу

Fs=1e3; % частота дискретизації послідовності

t=0:1/Fs:0.5; % дискретний час для послідовності

d=(1:6)'*64e-3; % затримки імпульсів

d(:,2)=0.6.^(0:5)'; % амплітуди імпульсів

y=pulstran(t,d,s0,Fs0);

plot(t,y)

На екрані послідовність імпульсів, сформована функцією pulstran з вектора відліків одиночного імпульсу.

8.2. Функції генерації періодичних сигналів

Ці функції, що входять в пакет Signal Processing, дозволяють формувати відліки періодичних сигналів різної форми:

square - послідовність прямокутних імпульсів;

sawtooth - послідовність трикутних імпульсів;

diric - функція Діріхле (періодична sinc-функція).

8.2.1. Послідовність прямокутних імпульсів

Для формування послідовності прямокутних імпульсів служить функція square. У найпростішому випадку ця функція приймає один вхідний параметр - вектор значень часу t: у = square(t).

Генерується при цьому послідовність імпульсів, що має період 2p і шпаруватість 2 (тобто тривалість імпульсу дорівнює половині періоду). Послідовність є двополярна - сигнал приймає значення -1 і 1. Сформувати послідовність з періодом Т можна наступним чином:

у = square(2*pi*t / T).

За допомогою другого вхідного параметра duty можна регулювати шпаруватість одержуваної послідовності. Однак цей параметр задає не саму шпаруватість, а зворотню їй величину - коефіцієнт заповнення (у відсотках), тобто відношення тривалості імпульсу до періоду: у = square (t, duty)

За замовчуванням значення параметра duty дорівнює 50, тобто генерується меандр.

В якості прикладу сформуємо послідовність однополярних прямокутних імпульсів з амплітудою 3 В, частотою проходження 50 Гц і тривалістю 5 мс. Будемо використовувати частоту дискретизації 1 кГц і часовий інтервал -10 ... 50 мс

function Example8_3

Fs=1e3; % частота дискретизації

t=-10e-3:1/Fs:50e-3; % дискретний час

A=3; % амплітуда

f0=50; % частота проходження імпульсів

tau=5e-3; % тривалість імпульсів

s=(square(2*pi*t*f0, f0*tau*100)+1)*A/2;

plot(t,s)

ylim([0 5]) % На екрані послідовність прямокутних імпульсів, отриманих за допомогою функції square.

8.2.2. Послідовність трикутних імпульсів

Для формування послідовності трикутних імпульсів служить функція sawtooth. У найпростішому випадку ця функція приймає один вхідний параметр - вектор значень часу t: у = sawtooth(t). Генерується при цьому послідовність імпульсів має період 2p. Протягом періоду сигнал лінійно наростає від -1 до 1. Сформувати послідовність з періодом Т можна наступним чином: у = sawtooth (2*pi*t / T).

За допомогою другого вхідного параметра width можна регулювати тривалість «зворотного ходу» - проміжку, на якому рівень сигналу лінійно падає від 1 до -1. При вказівці параметра width сигнал лінійно зростає від -1 до 1 за час 2p*width, а потім за час 2p*(1-width) лінійно убуває від 1 до -1:

у = sawtooth(t, width).

За замовчуванням значення параметра width дорівнює 1. При width = 0,5 буде послідовність симетричних трикутних імпульсів.

В якості прикладу сформуємо послідовність трикутних імпульсів негативною полярності з амплітудою 5 В, періодом 50 мс і тривалістю падаючого ділянки 5 мс. Будемо використовувати частоту дискретизації 1 кГц і часовий інтервал -25 ... 125 мс

function Example8_4

Fs=1e3; % частота дискретизації

t=-25e-3:1/Fs:125e-3; % дискретний час

A=5; % амплітуда

T=50e-3; % період

t1=5e-3; % тривалість падаючої ділянки

s=(sawtooth(2*pi*t/T, 1-t1/T)-1)*A/2;

plot(t,s) % На екрані послідовність трикутних імпульсів отримана за допомогою функції sawtooth.

8.2.3. Функція Діріхле

Функція Діріхле описується формулою

,

де п - ціле позитивне число.

Як приклад побудуємо графіки функції Діріхле при непарному і парному значеннях п (п = 7 і п = 8):

function Example8_5

x=0:0.01:15;

plot(x,diric(x,7))

grid on

title('n=7')

figure

plot(x,diric(x,8))

grid on

title('n=8')

На екрані функція Діріхле непарного і парного порядку.

8.3. Генерація сигналу з мінливою частотою

Функція chirp призначена для генерації коливань з одиничною амплітудою, миттєва частота яких змінюється за заданим законом:

у = chirp(t, f0, t1, f1, 'method', phi).

Тут t - вектор значень часу, phi - початкова фаза коливання. Інші параметри визначають закон зміни частоти.

Рядковий параметр 'method'визначає тип залежності миттєвої частоти від часу - 'linear', 'quadratic' або 'logarithmic'. Числові параметри f0, t1 і f1 створюють опорні точки для розрахунків: у нульовий момент часу миттєва частота дорівнює f0, а в момент часу tl вона дорівнює fl.

Математично закон зміни миттєвої частоти виглядає наступним чином:

'linear': , де ;

'quadratic': , де ;

'logarithmic': , де .

В якості прикладу сформуємо три сигнали, визначених на проміжку 0 ... 1 с і мають різні закони зміни миттєвої частоти. У нульовий момент часу всі сигнали мають миттєву частоту 1 кГц, а в момент часу 1с - 2 кГц. Частоту дискретизації виберемо рівною 8 кГц:

function Example8_6

Fs=8e3; % частота дискретизації

t=0:1/Fs:1; % дискретний час

f0=1e3;

t1=1;

f1=2e3;

s1=chirp(t,f0,t1,f1,'linear');

s2=chirp(t,f0,t1,f1,'quadratic');

s3=chirp(t,f0,t1,f1,'logarithmic');

specgram(s1,[],Fs)

title('linear')

colormap gray

figure

specgram(s2,[],Fs)

title('quadratic')

colormap gray

figure

specgram(s3,[],Fs)

title('logarithmic')

colormap gray

На екрані спектрограми сигналів при лінійному, квадратичному і експоненційному законах зміни миттєвої частоти.

8.4. Формування випадкових сигналів

Для генерації випадкових чисел в MATLAB служать функції rand (рівномірний розподіл) і randn (нормальний розподіл), а також кошти пакета розширення Statistics, які реалізують безліч різних законів розподілу ймовірності.

8.4.1. Реалізація заданого закону розподілу ймовірності

У пакеті Statistics є засоби генерації випадкових чисел з різними законами розподілу ймовірності.

Нехай X - випадкова величина, рівномірно розподілена на інтервалі 0 ... 1. Для отримання випадкової величини Y, що має функцію розподілу Fy(y), випадкову величину X необхідно піддати наступного нелінійного перетворення:

(8.1)

де Fy(-1)- зворотна функція по відношенню до Fy(y).

Як приклад сгенерируем за формулою (8.1) випадкові числа з релєєвськоє законом розподілу.

Зворотна функція буде мати вигляд:

(8.2)

Генеруємо рівномірно розподілені випадкові числа з допомогою функції rand, виробляємо їх перетворення за формулою (8.2) і будуємо гістограму за допомогою функції hist:

function Example8_7

N=10000; % кількість чисел

sigma=1; % параметр релєєвського закону

X=rand(1,N); % рівномірний розподіл

Y=sigma*sqrt(-2*log(1-X)); % закон Релея

hist(Y,25) % гістограма по 25 інтервалам

На екрані представлена гістограма випадкових чисел з релєєвськоє розподілом

Питання для самоперевірки

1. Як генеруються послідовності імпульсів?

2. Як генеруються періодичні сигнали?

3. Як генеруються сигнали з мінливою частотою?

4. Як формуються випадкові сигнали?

5. Як реалізується заданий закон розподілу ймовірності?