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

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

Figure contains an axes object. The axes object with title Information Signal x contains an object of type line.

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

Сгенерируйте и постройте источник шума n1.

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

Figure contains an axes object. The axes object with title N o i s e blank S o u r c e blank n indexOf 1 baseline contains an object of type line.

Примите что интерференционный сигнал, 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)')
ylabel('n_1(k-1)')
zlabel('n_2(k)')
title('Unknown Interference Channel Characteristics')

Figure contains an axes object. The axes object with title Unknown Interference Channel Characteristics contains an object of type surface.

Вычислите интерференционный сигнал, 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('n_1')
xlabel('time')
title('Noise Source')
subplot(2,1,2)
plot(time,n2)
ylabel('n_2')
title('Interference Signal')
xlabel('time')

Figure contains 2 axes objects. Axes object 1 with title Noise Source contains an object of type line. Axes object 2 with title Interference Signal contains an object of type line.

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

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

m = x + n2;
subplot(1,1,1)
plot(time, m)
title('Measured Signal')
xlabel('time')
ylabel('m')

Figure contains an axes object. The axes object with title Measured Signal contains an object of type line.

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

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

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

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

Задайте обучающие данные. Первые два столбца 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
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, моделирует отношение второго порядка между n1 и n2.

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

Вычислите предполагаемый интерференционный сигнал, 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')

Figure contains 2 axes objects. Axes object 1 with title Unknown Interference Signal contains an object of type line. Axes object 2 with title Estimated Interference Signal contains an object of type line.

Предполагаемый информационный сигнал равен различию между измеренным сигналом, 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')

Figure contains an axes object. The axes object with title Comparison of Actual and Estimated Signals contains 2 objects of type line. These objects represent Estimated x, Actual x (unknown).

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

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

| |

Похожие темы