Адаптивное подавление помех Используя ANFIS

Этот пример показывает, как сделать адаптивное нелинейное подавление помех с помощью команд genfis и anfis.

Сигнал и шум

Задайте гипотетический информационный сигнал, x, выбранный на уровне 100 Гц более чем 6 секунд.

time = (0:0.01:6)';
x = sin(40./(time+0.01));
plot(time,x)
title('Information Signal x','fontsize',10)
xlabel('time','fontsize',10)
ylabel('x','fontsize',10)

Примите, что x не может быть измерен без интерференционного сигнала, n2, который сгенерирован от другого источника шума, n1, через определенный неизвестный нелинейный процесс.

График ниже источника шума показов n1.

n1 = randn(size(time));
plot(time,n1)
title('Noise Source n_1','fontsize',10)
xlabel('time','fontsize',10)
ylabel('n_1','fontsize',10)

Примите что интерференционный сигнал, n2, это появляется в измеренном сигнале, сгенерирован через неизвестное нелинейное уравнение:

n2(k)=4sin(n1(k))n1(k-1)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)','fontsize',10);
ylabel('n_1(k-1)','fontsize',10);
zlabel('n_2(k)','fontsize',10);
title('Unknown Interference Channel Characteristics','fontsize',10);

Вычислите интерференционный сигнал, n2, от источника шума, n1, и постройте оба сигнала.

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('noise n_1','fontsize',10);
subplot(2,1,2)
plot(time,n2);
ylabel('interference n_2','fontsize',10);

n2 связан с n1 через очень нелинейный процесс, показанный ранее; из графиков трудно видеть, коррелируются ли эти два сигнала в каком-либо случае.

Измеренный сигнал, m, является суммой исходного информационного сигнала, x и интерференции, n2. Однако мы не знаем n2. Единственные сигналы, доступные нам, являются шумовым сигналом, n1, и измеренный m сигнала.

m = x + n2;             % measured signal
subplot(1,1,1)
plot(time, m)
title('Measured Signal','fontsize',10)
xlabel('time','fontsize',10)
ylabel('m','fontsize',10)

Можно восстановить исходный информационный сигнал, x, с помощью адаптивного подавления помех через обучение ANFIS.

Создайте модель ANFIS

Используйте команду anfis, чтобы идентифицировать нелинейное отношение между n1 и n2в то время как n2 не непосредственно доступно, можно принять, что m является "загрязненной" версией n2 для обучения. Это предположение обрабатывает x как "шум" в этом виде нелинейного подбора кривой.

Примите, что порядок нелинейного канала известен (в этом случае, 2), таким образом, можно использовать модель ANFIS с 2 входами для обучения.

Задайте данные тренировки. Первые два столбца data являются входными параметрами к модели ANFIS, n1 и задержанная версия n1. Последний столбец 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
   5 	 0.729492
Step size increases to 0.220000 after epoch 5.
   6 	 0.725382
   7 	 0.721269
   8 	 0.717621
   9 	 0.714474
Step size increases to 0.242000 after epoch 9.
  10 	 0.71207

Designated epoch number reached --> ANFIS training completed at epoch 10.

Minimal training RMSE = 0.712070

Настроенный FIS, outFIS, моделирует отношение второго порядка между n1 и n2.

Оцените модель

Вычислите предполагаемый интерференционный сигнал, estimated_n2, путем оценки настроенного FIS использование исходных данных тренировки.

estimated_n2 = evalfis(outFIS,data(:,1:2));

Постройте и фактический n2 предупредите и предполагаемая версия от ANFIS вывод.

subplot(2,1,1)
plot(time, n2)
ylabel('n_2 (unknown)'); 

subplot(2,1,2)
plot(time, estimated_n2)
ylabel('Estimated n_2');

Предполагаемый информационный сигнал равен различию между измеренным сигналом, m и предполагаемой интерференцией (ANFIS вывод).

estimated_x = m - estimated_n2;

Сравните исходный информационный сигнал, x, и оценку, estimated_x.

figure
plot(time,estimated_x,'b',time,x,'r')
legend('Estimated x','Actual x (unknown)','Location','SouthEast')

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

Смотрите также

| |

Похожие темы