MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем
 

Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox: Функции анализа сигналов

  В оглавление \ К следующему разделу \ К предыдущему разделу

BERFIT
Подгонка аналитической функции к экспериментальным данным о вероятности битовой ошибки

Синтаксис:

fitber = berfit(empEbNo, empber)
fitber = berfit(empEbNo, empber, fitEbNo)
fitber = berfit(empEbNo, empber, fitEbNo, options)
fitber = berfit(empEbNo, empber, fitEbNo, options, fittype)
[fitber, fitprops] = berfit(...)
berfit(...)
berfit(empEbNo, empber, fitEbNo, options, 'all')

Описание:

fitber = berfit(empEbNo, empber)
Производит подгонку аналитической функции к экспериментальным данным о вероятности битовой ошибки (BER), содержащимся в векторе empber, и возвращает вектор подогнанных значений BER. Значения в векторах empber и fitber соответствуют отношениям Eb/N0, содержащимся (в децибелах) в векторе empEbNo. Величины в векторе empEbNo должны быть упорядочены по возрастанию, кроме того, этот вектор должен содержать по крайней мере четыре элемента.

Замечание. Функция berfit предназначена для подгонки аналитической функции или интерполяции, но не для экстраполяции. Попытка экстраполировать BER в сторону уменьшения более чем на порядок от минимального экспериментального значения в любом случае даст принципиально ненадежные результаты.

fitber = berfit(empEbNo, empber, fitEbNo)
Производит подгонку аналитической функции к экспериментальным данным о вероятности битовой ошибки (BER), содержащимся в векторе empber, соответствующих отношениям Eb/N0, содержащимся (в децибелах) в векторе empEbNo. После этого функция вычисляет значения подогнанной функции для отношений Eb/N0, содержащихся (в децибелах) в векторе fitEbNo и возвращает рассчитанные значения. Длина вектора fitEbNo должна равняться длине вектора empEbNo или превосходить ее.

fitber = berfit(empEbNo, empber, fitEbNo, options)
В данном варианте синтаксиса используется дополнительный параметр options, позволяющий управлять параметрами оптимизации. Параметр options представляет собой структуру, передаваемую оптимизирующей функции fminsearch. Создать структуру options можно с помощью функции optimset. Назначение основных полей данной структуры приведено в следующей таблице.

Поле Описание
options.Display Уровень отображения:
'off' (данный вариант принят по умолчанию) - не отображается ничего;
'iter' - отображаются промежуточные результаты на каждой итерации;
'final' - отображаются только окончательные результаты;
'notify' - результаты отображаются только в том случае, если итерационный процесс не сошелся
options.MaxFunEvals Максимально допустимое число вызовов целевой функции оптимизации. Значение по умолчанию равно 104. Уменьшение данного значения может ускорить работу функции, но привести при этом к ухудшению качества подгонки
options.MaxIter Максимально допустимое число итераций. Значение по умолчанию равно 104. Уменьшение данного значения может ускорить работу функции, но привести при этом к ухудшению качества подгонки
options.TolFun Критерий остановки оптимизации: если изменение значения целевой функции на очередной итерации оказывается ниже данного уровня, решение считается найденным. Значение по умолчанию равно 10-4.
options.TolX Критерий остановки оптимизации: если изменение значений оптимизируемых коэффициентов на очередной итерации оказывается ниже данного уровня, решение считается найденным. Значение по умолчанию равно 10-4.

fitber = berfit(empEbNo, empber, fitEbNo, options, fittype)
В данном варианте синтаксиса дополнительно задается, какая из возможных аппроксимирующих функций должна использоваться. Возможные варианты перечислены далее в разделе "Алгоритм". Дополнительный строковый параметр fittype может принимать значения 'exp', 'exp+const', 'polyRatio' или 'doubleExp+const'. Чтобы использовать параметры оптимизации, принятые по умолчанию, задайте для них значение в виде пустой матрицы: options = [].

[fitber, fitprops] = berfit(...)
В данном варианте синтаксиса используется дополнительный выходной параметр fitprops, представляющий собой структуру, описывающую результаты подгонки. Поля структуры перечислены в следующей таблице.

Поле Описание
fitprops.fitType Тип функции, использованной при подгонке: 'exp', 'exp+const', 'polyRatio', 'doubleExp+const' или 'all' (все).
fitprops.coeffs Подобранные коэффициенты функции
fitprops.sumSqErr Сумма квадратов разностей логарифмов экспериментальных и подогнанных значений BER
fitprops.exitState Строка, описывающая результат численной оптимизации:
  • 'The curve fit converged to a solution.' - "Процесс подгонки сошелся к оптимальному решению"
  • 'The maximum number of function evaluations was exceeded.' - "Достигнуто предельное число вызовов минимизируемой функции".
fitprops.funcCount Число вызовов минимизируемой функции в процессе численной оптимизации
fitprops.iterations Число выполненных итераций оптимизационного процесса. Оно не обязательно равно числу вызовов минимизируемой функции

berfit(...)
При вызове без выходных параметров функция графически отображает экспериментальные и подогнанные данные.

berfit(empEbNo, empber, fitEbNo, options, 'all')
В данном варианте синтаксиса графически отображаются результаты подгонки при использовании всех возможных аппроксимирующих функций (см. далее раздел "Алгоритм"). Чтобы использовать параметры оптимизации, принятые по умолчанию, задайте для них значение в виде пустой матрицы: options = [].

Примеры:

Приводимые ниже примеры иллюстрируют использование функции berfit, но для простоты в них вместо результатов моделирования используются таблично-заданные либо аналитически полученные данные.

Приведенный ниже код строит график подобранной функции для таблично-заданного набора данных.

EbNo = [0:13];
berdata = [.2 .15 .13 .12 .08 .09 .08 .07 .06 .04 .03 .02 .01 .004];
berfit(EbNo,berdata); % График подобранной функции

В данном случае построенная кривая соединяет прямыми линиями точки, соответствующие значениям подобранной функции, рассчитанным для значений аргумента из вектора EbNo. Чтобы построенная кривая выглядела более гладкой, используйте синтаксис berfit(EbNo,berdata,[0:0.2:13]). В этом случае подобранная функция останется прежней, но для построения ее графика будет использованы более часто расположенные точки.

В следующем примере строятся графики для всех возможных аппроксимирующих функций, при этом в качестве исходных данных используются искаженные результаты расчета, полученные с помощью функции berfading. Обратите внимание на то, что одна из функций оказывается не слишком подходящей для этого набора данных, в то время как остальные функции демонстрируют намного лучшее соответствие.

M = 4; EbNo = [3:10];
berdata = berfading(EbNo,'psk',M,2); % Теоретический расчет BER
noisydata = berdata.*[.93 .92 .5 .89 .058 .35 .8 .01]; % Искаженные данные
figure; berfit(EbNo,noisydata,EbNo,[],'all'); % График всех подобранных вариантов функции

Приведенный ниже код показывает использование входной структуры options и выходной структуры fitprops. Значение 'notify' для уровня отображения заставляет функцию выводить сообщение, когда оптимизационный процесс для какого-либо варианта аппроксимирующей функции не сходится. Поле exitState выходной структуры тоже показывает, для каких функций оптимизация удалась, а для каких нет.

M = 4; EbNo = [3:10];
berdata = berfading(EbNo,'psk',M,2); % Теоретический расчет BER
noisydata = berdata.*[.93 .92 .5 .89 .058 .35 .8 .01];
% Задаем вывод сообщений при неудаче оптимизации
options = optimset('display','notify');
disp('*** Пробуем отношение полиномов') % В этом случае оптимизация не сходится
[fitber1,fitprops1] = berfit(EbNo,noisydata,EbNo,...
   options,'polyRatio')
disp('*** Пробуем сумму двух экспонент с константой') % В этом случае все хорошо
[fitber2,fitprops2] = berfit(EbNo,noisydata,EbNo,...
   options,'doubleExp+const')

Результат работы данного кода приведен ниже.

*** Пробуем отношение полиномов

Exiting: Maximum number of function evaluations has been exceeded
         - increase MaxFunEvals option.
         Current function value: 6.136681 

fitber1 =
    0.0472    0.0289    0.0187    0.0121    0.0077    0.0044    0.0019    0.0001

fitprops1 = 
       fitType: 'polyRatio'
        coeffs: [6x1 double]
      sumSqErr: 6.1367
     exitState: 'The maximum number of function evaluations was exceeded.'
     funcCount: 10001
    iterations: 3333

*** Пробуем сумму двух экспонент с константой

fitber2 =
    0.0338    0.0260    0.0192    0.0134    0.0087    0.0049    0.0021    0.0001

fitprops2 = 
       fitType: 'doubleExp+const'
        coeffs: [9x1 double]
      sumSqErr: 6.7044
     exitState: 'The curve fit converged to a solution.'
     funcCount: 1237
    iterations: 822

Алгоритм:

Функция berfit ищет коэффициенты подгоняемой функции, используя процедуру нелинейной оптимизации без ограничений, реализованную в функции fminsearch. Используемые аппроксимирующие функции перечислены в следующей таблице. Здесь x - это линейное (не в децибелах!) отношение Eb/N0, а f - оценка BER. Было эмпирически найдено, что данные функции хорошо соответствуют кривым помехоустойчивости в разнообразных задачах, включая экспоненциально падающий BER, линейно падающий BER, а также кривые BER, стремящиеся к ненулевой константе.

Значение параметра fittype Аппроксимирующая функция
'exp'
'exp+const'
'polyRatio'
'doubleExp+const'

Используемая для оптимизации функция fminsearch минимизирует квадратическую ошибку аппроксимации, рассчитываемую как

где экспериментальные значения BER - это величины из вектора empber и суммирование ведется по всем точкам Eb/N0 из вектора empEbNo. Использование логарифма вероятности ошибки необходимо для того, чтобы области с высокими значениями BER не вносили слишком большой вклад в целевую функцию.

Сопутствующие функции: fminsearch, optimset

Литература:

В указанной книге приведены общие сведения о нелинейной оптимизации без ограничений.

  1. Chapra, Steven C., and Raymond P. Canale, Numerical Methods for Engineers, Fourth Edition, New York, McGraw-Hill, 2002.

  В оглавление \ К следующему разделу \ К предыдущему разделу

 

Поиск по сайту:

Система Orphus

Яндекс.Метрика