
Лабораторна робота № 4
”Дискретні сигнали в MATLAB. Генерація послідовності
Імпульсів” Генерація послідовності імпульсів
Функція pulstran служить для генерації кінцевої послідовності імпульсів (pulse train) однакової форми з затримками, що довільно задаються. Самі імпульси можуть задаватися одним із двох способів: ім'ям функції, що генерує імпульс, або вже розрахованим вектором відліків.
Якщо імпульси задаються ім'ям функції, що генерує, функція pulstran викликається таким чином:
у = pulstran(t, d, 'func', pi, p2, ...)
Тут t — вектор значень часу, d — вектор затримок, ' func' — ім'я функції, що генерує одиночний імпульс. В якості цієї функції можуть використовуватися, наприклад, rectpuls, tripuls, gauspuls, а також будь-які інші функції (у тому числі і «саморобні»), що приймають в якості першого вхідного параметра вектор моментів часу і повертаючого вектор розрахованих відліків сигналу. Параметри, що залишилися, pi, р2, ... — додаткові, вони передаються функції func при її виклику.
Таким чином, функція pulstran в даному варіанті використання генерує вихідний сигнал таким чином:
у = func(t-d(1), p1, р2, ...) + ... func(t-d(2), pi, р2, ...) + ... func(t-d(3), pi, р2, ...) + ...
Якщо d — двухстовбцева матриця, то перший стовпець трактується як затримки імпульсів, а другий — як їхні рівні. При цьому вихідний сигнал формується так:
у = d(l.l) * func(t-d(l,2), p1, p2. ...) + ...
d(2,l) * func(t-d(2,2), p1, p2, ...) + ...
d(3,l) * func(t-d(3,2), p1, p2, ...) + ...
Вправа 1
Сформуємо послідовність з п'яти симетричних трикутних імпульсів, інтервали між якими лінійно збільшуються, а амплітуди зменшуються за експонентою. Частоту дискретизації виберемо рівною 1 кГц. Тривалість імпульсу — 20 мс. Результат показаний на мал. 4.1:
» Fs = 1еЗ; % частота дискретизації
» t = 0:l/Fs:0.5; % дискретний час
» tau = 20е-3; % тривалість імпульсу
» d = [20 80 160 260 380]' * 1е-3; % затримки імпульсів
» d(:,2) = 0.8.^(0:4)'; % амплітуди імпульсів » у = pulstran(t, d, 'tripuls', tau); » p1ot(t, у)
Якщо для генерації одиночного імпульсу немає готової функції, можна розрахувати вектор відліків імпульсу, а потім використовувати другий варіант виклику функції pulstran:
у = pulstran(t, d, p. fs, 'method')
Зміст вхідних параметрів t і d той же, що і раніше. Вектор р повинний містити відліки одиночного імпульсу, а параметр fs вказує частоту дискретизації, використану при розрахунку цього вектора. Вважається, що перший відлік з вектора р відповідає нульовому моменту часу.
Рис. 4.1. Послідовність трикутних імпульсів, сформована за допомогою функції pulstran
Оскільки частота fs може не збігатися з кроком значень вектора t (в принципі вони навіть не зобов'язані уявляти собою рівномірну послідовність) і затримки вектора d теж не обов'язково кратні цьому крокові, для перерахування затриманих імпульсів до сітки моментів часу t в загальному випадку необхідне використання інтерполяції. Метод інтерполяції може бути явно заданий за допомогою строкового параметра ' method'. Можливі всі методи, підтримувані функцією interpl: 'nearest', 'linear', 'spline', 'pchip', 'cubic' і 'v5cubic'.
Параметри fs і 'method' при виклику можуть опускатися, в цьому випадку використовуються їхні значення за замовчуванням: f s = 1 і 'method1 = 'linear'.
Вправа 2
Сформуємо послідовність із шести імпульсів, що мають форму одного періоду функції sin2. Нехай тривалість імпульсу дорівнює 60 мс, а частота його дискретизації — 400 Гц. Відстань між центрами імпульсів буде однаковим і рівним 64 мс, а частота дискретизації вихідного сигналу — 1 кГц. Імпульси будуть загасати за експонентою з ростом номера. Результат показаний на мал. 4.2.
» % генеруємо вектор відліків одиночного імпульсу
» Fs0 = 400; % частота дискретизації імпульсу
» tau = 6Ое-3; % тривалість імпульсу
» t0 = 0:l/Fs0:tau; % дискретний час для імпульсу
» s0 = sin(pi*t0./tau).^2; % вектор відліків імпульсу
» % генеруємо послідовність імпульсів
» Fs = 1еЗ; % частота дискретизації послідовності
» t = 0:l/Fs:0.5; % дискретний час для послідовності
» d = (1:6)' * 64е-3; % затримки імпульсів
» d(:,2) = 0.6.^(0:5)'; % амплітуди імпульсів
» % послідовність імпульсів
» у = pulstran(t, d, s0, Fs0);
» plot(t, у)
Рис. 4.2. Послідовність імпульсів, сформована функцією pulstran з вектора відліків одиночного імпульсу