- •Руководство
- •Устройства обработки и преобразования информации
- •Часть 1
- •1. Применение MatLab в инженерных расчетах
- •1.1. Панель инструментов и меню MatLab
- •1.2. Работа с MatLab в режиме прямых вычислений
- •Форматы вывода результатов
- •Константы и системные переменные
- •Арифметические операции
- •1.2. Графические средства MatLab
- •Вывод нескольких кривых на один график
- •Редактирование графиков в графическом окне
- •1.3. Организация вычислений с помощью м-файлов
- •1.4. Домашнее задание
- •1.5. Лабораторное задание
- •1.6. Содержание отчета
- •Контрольные вопросы
- •2. Моделирование сигналов в MatLab
- •2.1. Моделирование типовых детерминированных сигналов
- •2.1.1. Моделирование одиночных импульсов
- •2.1.2. Моделирование последовательностей сигналов
- •Примеры применения функции pulstran
- •2.3. Моделирование сигналов сложной формы
- •2.4. Домашнее задание
- •2.5. Лабораторное задание
- •2.6. Содержание отчета
- •Контрольные вопросы и задания
- •Устройства обработки и преобразования информации
- •Часть 1
Примеры применения функции pulstran
• Последовательность треугольных импульсов (рис. 2.6):
t = 0 : 0.01 : 50;
d = 0 : 50/5 : 50 ;
y = 0.7*pulstran(t, d,'tripuls',5);
plot(t,y), grid
• Последовательность прямоугольных импульсов (рис. 2.7):
t = (0 : 0.01 : 50)*1e-3;
d = [[5 15 30 40]*1e-3;[2 -3 -4 3]]';
y = 1*pulstran(t, d,'rectpuls',3e-3);
plot(t,y), grid
• Последовательность гауссовых импульсов (рис. 2.8):
t = (0 : 0.01 : 50)*1e - 6;
d = [5 : 10 30 40]*1e - 6 ;
y = 0.7*pulstran(t, d,'gauspuls',1e6, 0.2);
plot(t,y), grid
• Последовательность импульсов, заданных своими отсчетами при разных способах интерполяции (рис. 2.9):
clear all;
fs = 0.25e6; tmod=50e -6;
t1 = 0:1/fs:10e -6;
y1 = tripuls(t1,5e -6, -0.5);
t = 0: 1e -6 : tmod;
d=[[0.1 0.3 0.5 0.6 0.9]*tmod; 1,2 -3 2 -1]'
y= pulstran(t,d,y1,fs,'nearest');
% y = pulstran(t,d,y1,fs,'linear');
plot(t,y); grid.
Функция chirp, формирует косинусоиду, частота которой линейно изменяется во времени. В общем случае эта функция вызывается следующим образом:
у = chirp(t,F0,t1,Fl),
где F0 – значение частоты (Гц) при t = 0, F1 – значение частоты в момент времени tl. Если три последних аргумента не указаны, то по умолчанию им придаются следующие значения: F0 = 0, tl = l, Fl = 100.
Пример применения функции chirp:
t = 0 : 0.001 : 0.5;
y = 0.75*chirp(t) ;
plot(t,y), grid
figure;
t1 = 0 : 1e -6 : 0.6e -3;
y1 = 0.75*chirp(t1,30e3, 0.4e-3,15e3) ;
plot(t1,y1), grid
Результаты моделирования приведены на рис. 2.11
2.3. Моделирование сигналов сложной формы
Для моделирования сигналов сложной формы (в том числе и заданных графически или таблично) можно воспользоваться каким-либо из реализованных в MatLab методов аппроксимации функций (функции polyfit, interp1, spline), либо использовать собственную функцию пользователя.
Одним из наиболее простых методов аппроксимации является полиномиальная. Она реализуется в MatLab с помощью функции polyfit, обращение к которой имеет следующий вид
p = polyfit(x,y,n).
Функция рассчитывает вектор p коэффициентов полинома степени n, аппроксимирующего функцию y(x), заданную векторами y и x по критерию минимального среднеквадратического отклонения.
Пример: аппроксимируем полиномами 4-й и 6-й степени функцию на интервале [0,2] и построим графики этих функций.
x = (0: 0.1: 2*pi)';
y = cos(x)+0.5* sin(2*x);
p4 = polyfit(x,y,4);
p6 = polyfit(x,y,6);
f4= polyval(p4,x);
f6= polyval(p6,x);
plot(x,y,'o',x,f4,' - ', x,f6,' -.');
grid;
Результаты моделирования показаны на рис. 2.12. Функция polyfit вычисляет вектор коэффициентов полинома соответствующей степени, в данном примере (4-й и 6-й):
p4 =[-0,3296 -0,1430 1,5978 0,0922 -0,9954] и
p6=[0,0707 0,4825 -0,6135 -1,7234 1,8764 1,0902 -1,0345],
т.е. аппроксимирующие полиномы будут иметь следующий вид:
и
Функция polyval (p,x) вычисляет значения полинома p в точках, заданных вектором x.
Необходимо учитывать, что найденные с помощью функции polyfit полиномы хорошо аппроксимируют y(x) только в интервале значений, определенном вектором x. За пределами этого интервала качество аппроксимации резко ухудшается. На рис. 2.11 показано, как ведут себя построенные ранее полиномы p4(x) и p6(x) на интервале значений x=[ -; 2,5], т.е. за пределами интервала [0,2], для которого эти полиномы строились.
С увеличением размеров векторов x и y для получения удовлетворительных результатов, необходимо увеличивать порядок аппроксимирующего полинома, что не всегда удобно. Для уменьшения порядка полиномов можно применить кусочно-полиномиальную аппроксимацию (функция interp1), однако она может оказаться неприемлемой из-за разрывов производной в точках стыка полиномов. В этом случае можно применить сплайн-аппроксимацию – вариант кусочно-полиномиальной аппроксимации, при котором функция аппроксимируется отрезками полиномов низких порядков. Эти полиномы строятся таким образом, что в точках стыка их производные одинаковы, вследствие чего скачки производных аппроксимирующей функции в точках стыка полиномов отсутствуют. В инженерной практике наиболее широко распространена аппроксимация кубическими сплайнами, при которой в точках стыка отсутствуют скачки первой и второй производной.
Cплайн-аппроксимация реализована в MatLab функцией spline, обращение к которой имеет следующий вид:
y1 = spline(x,y,x1),
где векторы x и y являются отсчетами исходной функции, а векторы x1 и y1 – отсчетами аппроксимирующей функции.
Ниже приведены примеры применения сплайн-аппроксимации. В первом случае аппроксимируется рассмотренная выше непрерывная функция , во втором – ступенчатая.
Результаты моделирования показаны на рис. 2.14 -2.15
Моделирование сигналов, которые заданы алгоритмически или аналитическими выражениями можно реализовать программно на языке MatLab. Пользователь может сделать это с помощью собственных m- функций, из которых можно сформировать свою библиотеку, и которыми можно пользоваться наравне с функциями, поставляемыми в составе MatLab.
Ниже приведен пример построения m-функции mod_sig для моделирования по выбору пользователя амплитудно-модулированного либо фазо-модулированного сигналов.
В заголовке функции после ее имени в скобках приводится список формальных параметров, которые используются этой функцией. Смысл этих параметров можно пояснить в комментариях после заголовка функции. Эти комментарии можно выводить в командное окно MatLab с помощью команды
help <имя функции>.
В комментариях к функции mod_sig строковый параметр vs определяет вид сигнала. Когда он равен одному из значений, указанных в первой строке оператора if (‘AM’ латинским или русским шрифтом в верхнем или нижнем регистрах; вертикальная черта | в MatLab обозначает логический оператор ИЛИ), то моделируется амплитудно-модулированный сигнал, во всех остальных случаях – фазо-модулированный. Файл, содержащий текст функции должен иметь имя, совпадающее с именем функции (в данном случае mod_sig.m).
function sig=mod_sig(t,f,F,m,A,vs)
% mod_sig(t,f,F,m,A,vs) - Моделирование АМ или ФМ сигнала
% t - вектор временных отсчетов, f - несущая частота,
% F - частота модулирующего сигнала, A - амплитуда сигнала
% m - индекс модуляции
% vs= 'АМ' - амплитудная модуляция, vs='ФМ' - фазовая модуляция
if (vs == 'АМ')|(vs == 'AM')|(vs == 'am')|(vs == 'ам')
sig =A*(1+m*cos(2*pi*F*t)).*sin(2*pi*f*t); % АМ-сигнал
else
sig =A*sin(2*pi*f*t+m*cos(2*pi*F*t)); % ФМ-сигнал
end;
Если в командное окне MatLab ввести команду help mod_sig, то будет выведен текст комментария, помещенного между заголовком и первым оператором функции:
% mod_sig(t,f,F,m,A,vs) – Моделирование АМ или ФМ-сигнала;
% t - вектор временных отсчетов, f – несущая частота,
% F – частота модулирующего сигнала, A – амплитуда сигнала;
% m – индекс модуляции ;
% vs= 'АМ' – амплитудная модуляция, vs='ФМ' – фазовая модуляция.
Созданной m-функцией можно пользоваться подобно тому, как это делается любыми другими функциями MatLab. Ниже приводится пример ее использования и результаты моделирования (рис. 2.14,-2.16).
>> t=0:0.01:3;
y=mod_sig(t,10,0.7,0.5,2, 'АМ');
plot(t,y); grid
figure;
y=mod_sig(t,5,0.7,3,2, 'ФМ');
plot(t,y); grid