В этом примере показано, как сделать адаптивное нелинейное подавление помех путем построения и настройки модели ANFIS.
Задайте гипотетический информационный сигнал, x, произведенный на уровне 100 Гц более чем 6 секунд.
time = (0:0.01:6)'; x = sin(40./(time+0.01)); plot(time,x) title('Information Signal x') xlabel('time') ylabel('x')

Примите тот x не может быть измерен без интерференционного сигнала, , который сгенерирован от другого источника шума, , определенным неизвестным нелинейным процессом.
Сгенерируйте и постройте источник шума .
n1 = randn(size(time)); plot(time,n1) title('Noise Source n_1') xlabel('time') ylabel('n_1')

Примите что интерференционный сигнал, , это появляется в измеренном сигнале, сгенерирован через неизвестное нелинейное уравнение:
Постройте эту нелинейную функцию как поверхность.
domain = linspace(min(n1),max(n1),20); [xx,yy] = meshgrid(domain,domain); zz = 4*sin(xx).*yy./(1+yy.^2); surf(xx,yy,zz) xlabel('n_1(k)') ylabel('n_1(k-1)') zlabel('n_2(k)') title('Unknown Interference Channel Characteristics')

Вычислите интерференционный сигнал, , от источника шума, , и постройте оба сигнала.
n1d0 = n1; % n1 with delay 0 n1d1 = [0; n1d0(1:length(n1d0)-1)]; % n1 with delay 1 n2 = 4*sin(n1d0).*n1d1./(1+n1d1.^2); % interference subplot(2,1,1) plot(time,n1) ylabel('n_1') xlabel('time') title('Noise Source') subplot(2,1,2) plot(time,n2) ylabel('n_2') title('Interference Signal') xlabel('time')

связан с очень нелинейным процессом, показанным ранее. Однако из графиков, эти два сигнала, кажется, не коррелируют друг с другом ни в каком случае.
Измеренный сигнал, m, сумма исходного информационного сигнала, x, и интерференция, . Однако неизвестно. Единственные доступные сигналы являются шумовым сигналом, , и измеренный m сигнала.
m = x + n2; subplot(1,1,1) plot(time, m) title('Measured Signal') xlabel('time') ylabel('m')

Можно восстановить исходный информационный сигнал, x, использование адаптивного подавления помех через обучение ANFIS.
Используйте anfis команда, чтобы идентифицировать нелинейное отношение между и в то время как не непосредственно доступно, можно принять тот m шумная версия для обучения. Это предположение обрабатывает x как "шум" в этом виде нелинейного подбора кривой.
Примите, что порядок нелинейного канала известен (в этом случае, 2). Можно использовать 2D входную модель ANFIS для обучения.
Задайте обучающие данные. Первые два столбца data входные параметры к модели ANFIS, и задержанная версия . Последний столбец data измеренный сигнал, m.
delayed_n1 = [0; n1(1:length(n1)-1)]; data = [delayed_n1 n1 m];
Сгенерируйте начальный объект FIS. По умолчанию сетка, делящая алгоритм, использует две функции принадлежности для каждой входной переменной, которая производит четыре нечетких правила для изучения.
genOpt = genfisOptions('GridPartition');
inFIS = genfis(data(:,1:end-1),data(:,end),genOpt);Настройте FIS использование anfis команда с размером шага начальной подготовки 0.2.
trainOpt = anfisOptions('InitialFIS',inFIS,'InitialStepSize',0.2); outFIS = anfis(data,trainOpt);
ANFIS info: Number of nodes: 21 Number of linear parameters: 12 Number of nonlinear parameters: 12 Total number of parameters: 24 Number of training data pairs: 601 Number of checking data pairs: 0 Number of fuzzy rules: 4 Start training ANFIS ... 1 0.761817 2 0.748426 3 0.739315 4 0.733993 Step size increases to 0.220000 after epoch 5. 5 0.729492 6 0.725382 7 0.721269 8 0.717621 Step size increases to 0.242000 after epoch 9. 9 0.714474 10 0.71207 Designated epoch number reached. ANFIS training completed at epoch 10. Minimal training RMSE = 0.71207
Настроенный FIS, outFIS, моделирует отношение второго порядка между и .
Вычислите предполагаемый интерференционный сигнал, estimated_n2, путем оценки настроенного FIS использование исходных обучающих данных.
estimated_n2 = evalfis(outFIS,data(:,1:2));
Постройте фактическое предупредите и предполагаемая версия от ANFIS выход.
subplot(2,1,1) plot(time, n2) ylabel('n_2') xlabel('time') title('Unknown Interference Signal') subplot(2,1,2) plot(time, estimated_n2) ylabel('n_2') xlabel('time') title('Estimated Interference Signal')

Предполагаемый информационный сигнал равен различию между измеренным сигналом, m, и предполагаемая интерференция (ANFIS выход).
estimated_x = m - estimated_n2;
Сравните исходный информационный сигнал, x, и оценка, estimated_x.
figure plot(time,estimated_x,'b',time,x,'r') xlabel('time') ylabel('x') title('Comparison of Actual and Estimated Signals') legend('Estimated x','Actual x (unknown)','Location','SouthEast')

Без обширного обучения модель ANFIS производит относительно точную оценку информационного сигнала.