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

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

Сигнал и шум

Задайте гипотетический информационный сигнал, 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 производит хорошую оценку информационного сигнала.

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

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте