exponenta event banner

Адаптивное шумоподавление с использованием 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. The axes 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. The axes with title Noise Source n_1 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. The axes 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. Axes 1 with title Noise Source contains an object of type line. Axes 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. The axes with title Measured Signal contains an object of type line.

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

Построение модели ANFIS

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

Предположим, что порядок нелинейного канала известен (в данном случае 2). Для обучения можно использовать модель 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. Axes 1 with title Unknown Interference Signal contains an object of type line. Axes 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. The axes with title Comparison of Actual and Estimated Signals contains 2 objects of type line. These objects represent Estimated x, Actual x (unknown).

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

См. также

| |

Связанные темы