В этом примере показано, как сделать адаптивное нелинейное подавление помех путем построения и настройки модели 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')
Примите тот x
не может быть измерен без интерференционного сигнала, , который сгенерирован от другого источника шума, , определенным неизвестным нелинейным процессом.
Сгенерируйте и постройте источник шума .
n1 = randn(size(time)); plot(time,n1) title('Noise Source n_1') xlabel('time') ylabel('n_1')
Примите что интерференционный сигнал, , это появляется в измеренном сигнале, сгенерирован через неизвестное нелинейное уравнение:
Постройте эту нелинейную функцию как поверхность.
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')
Вычислите интерференционный сигнал, , от источника шума, , и постройте оба сигнала.
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')
связан с очень нелинейным процессом, показанным ранее. Однако из графиков, эти два сигнала, кажется, не коррелируют друг с другом ни в каком случае.
Измеренный сигнал, m
, сумма исходного информационного сигнала, x
, и интерференция, . Однако неизвестно. Единственные доступные сигналы являются шумовым сигналом, , и измеренный m
сигнала.
m = x + n2; subplot(1,1,1) plot(time, m) title('Measured Signal') xlabel('time') ylabel('m')
Можно восстановить исходный информационный сигнал, x
, использование адаптивного подавления помех через обучение ANFIS.
Используйте anfis
команда, чтобы идентифицировать нелинейное отношение между и в то время как не непосредственно доступно, можно принять тот m
шумная версия для обучения. Это предположение обрабатывает x
как "шум" в этом виде нелинейного подбора кривой.
Примите, что порядок нелинейного канала известен (в этом случае, 2
). Можно использовать 2D входную модель ANFIS для обучения.
Задайте обучающие данные. Первые два столбца data
входные параметры к модели ANFIS, и задержанная версия . Последний столбец 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
, моделирует отношение второго порядка между и .
Вычислите предполагаемый интерференционный сигнал, estimated_n2
, путем оценки настроенного FIS использование исходных обучающих данных.
estimated_n2 = evalfis(outFIS,data(:,1:2));
Постройте фактическое предупредите и предполагаемая версия от 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')
Предполагаемый информационный сигнал равен различию между измеренным сигналом, 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')
Без обширного обучения модель ANFIS производит относительно точную оценку информационного сигнала.