Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1_2_UORS.doc
Скачиваний:
35
Добавлен:
13.11.2019
Размер:
964.61 Кб
Скачать

Примеры применения функции 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]