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. Як реалізується заданий закон розподілу ймовірності?