В этом примере показано, как выполнить адаптивное нелинейное шумоподавление путем построения и настройки модели 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')

Предположим, что интерференционный сигнал , который появляется в измеренном сигнале, генерируется посредством неизвестного нелинейного уравнения:
+ n1 (k-1) 2
Постройте график этой нелинейной функции как поверхности.
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). Для обучения можно использовать модель 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));
Постройте график фактического сигнала n2 и расчетной версии с выхода 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 дает реалистично точную оценку информационного сигнала.