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

См. также

| |

Похожие темы