📄 noisedm.html
字号:
for training. Thus x is treated as "noise" in this kind ofnonlinear fitting.</p><p xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">Here we assume the order of the nonlinear channel is known(in this case, 2), so we can use 2-input ANFIS for training.We assign two membership functions to each input, so thetotal number of fuzzy rules for learning is 4. Also we set thestep size equal to 0.2. You should be able to see all thetraining information in the MATLAB command window.</p><pre xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" style="position: relative; left:30px">delayed_n1 = [0; n1(1:length(n1)-1)];trn_data = [delayed_n1 n1 m];mf_n = 2;ss = 0.2;in_fismat=genfis1(trn_data, mf_n);out_fismat = anfis(trn_data, in_fismat, [nan nan ss]);estimated_n2 = evalfis(trn_data(:, 1:2), out_fismat);estimated_x = m - estimated_n2;</pre><pre xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" style="color:gray; font-style:italic;">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: 4Start training ANFIS ... 1 0.72546 2 0.72285 3 0.720346 4 0.718132 5 0.71674Step size increases to 0.220000 after epoch 5. 6 0.716081 7 0.71571 8 0.714969 9 0.714672Step size increases to 0.242000 after epoch 9. 10 0.714149Designated epoch number reached --> ANFIS training completed at epoch 10.</pre><p xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" style="color:#990000; font-weight:bold; font-size:medium; page-break-before: auto;"><a name=""></a></p><p xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">After training, the estimated n2 is calculated using thecommand EVALFIS. The original n2 and estimated n2(output of ANFIS) are shown above. (Note that n2 is unknown.)</p><pre xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" style="position: relative; left:30px">axis_limit = [min(time) max(time) min([n2; estimated_n2]) max([n2; estimated_n2])];subplot(2,1,1)plot(time, n2)ylabel(<span style="color:#B20000">'n2 (unknown)'</span>); axis(axis_limit);subplot(2,1,2)plot(time, estimated_n2)ylabel(<span style="color:#B20000">'estimated_n2'</span>); axis(axis_limit);</pre><img xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" vspace="5" hspace="5" src="noisedm_img_08_01.gif"><p xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" style="color:#990000; font-weight:bold; font-size:medium; page-break-before: auto;"><a name=""></a></p><p xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">The estimated information signal x is equal to the differencebetween the measured signal m and the estimatedinterference (that is, ANFIS output).</p><p xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">The original information signal x and the estimated x byANFIS are plotted. Without extensive training, the ANFIScan already do a fairly good job.</p><pre xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" style="position: relative; left:30px">axis_limit = [min(time) max(time) min([x; estimated_x]) max([x; estimated_x])];subplot(2,1,1)plot(time, x)ylabel(<span style="color:#B20000">'x (unknown) '</span>); axis(axis_limit);subplot(2,1,2)plot(time, estimated_x)axis(axis_limit); ylabel(<span style="color:#B20000">'estimated\_x'</span>)</pre><img xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" vspace="5" hspace="5" src="noisedm_img_09_01.gif"><originalCode xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd" code="%% Adaptive Noise Cancellation
% This is a demonstration of adaptive nonlinear noise cancellation using
% the Fuzzy Logic Toolbox functions ANFIS and GENFIS1.
% 
% Copyright 1994-2002 The MathWorks, Inc. 
% $Revision: 1.13 $

%%
% Defined below is a hypothetical information signal x sampled
% at 100Hz over 6 seconds.

time = (0:0.01:6)';
x = sin(40./(time+0.01));
subplot(1,1,1)
plot(time, x)
title('Information Signal x')
xlabel('time')
ylabel('x')

%%
% Unfortunately, the information signal x cannot be measured
% without an interference signal n2, which is generated from
% another noise source n1 via a certain unknown nonlinear
% process.
% 
% Shown in the window is the noise source n1.

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

%%
% The interference signal n2 that appears in the measured
% signal is assumed to be generated via an unknown nonlinear
% equation:
% 
% n2(k) = 4*sin(n1(k))*n1(k-1)/(1+n1(k-1)^2)
% 
% This nonlinear characteristic is shown as a surface in the
% window.

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('n1(k)');
ylabel('n1(k-1)');
zlabel('n2(k)');
title('Unknown Channel Characteristics That Generate Interference');
axis([min(domain) max(domain) min(domain) max(domain) min(zz(:)) max(zz(:))]);
set(gca, 'box', 'on');


%%
% The noise source n1 and interference n2 are shown together.
% Note that n2 is related to n1 via the highly nonlinear process
% shown previously; it is hard to see if these two signals are
% correlated in any way.

n1d0 = n1; % n1 delay 0
n1d1 = [0; n1d0(1:length(n1d0)-1)]; % n1 delay 1
n2 = 4*sin(n1d0).*n1d1./(1+n1d1.^2); % interference
axis_limit = [min(time) max(time) min([n1;n2]) max([n1;n2])];
subplot(2,1,1)
plot(time, n1);
ylabel('noise n1'); axis(axis_limit);
subplot(2,1,2)
plot(time, n2);
ylabel('interference n2'); axis(axis_limit);

%%
% The measured signal m is the sum of the original information
% signal x and the interference n2. However, we do not know
% n2. The only signals available to us are the noise signal n1
% and the measured signal m, and our task is to recover the
% original information signal x. In the demo window is the
% measured signal m that combines x and n2.

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

%%
% We will use the function ANFIS to identify the nonlinear
% relationship between n1 and n2. Though n2 is not directly
% available, we can take m as a "contaminated" version of n2
% for training. Thus x is treated as "noise" in this kind of
% nonlinear fitting.
% 
% Here we assume the order of the nonlinear channel is known
% (in this case, 2), so we can use 2-input ANFIS for training.
% We assign two membership functions to each input, so the
% total number of fuzzy rules for learning is 4. Also we set the
% step size equal to 0.2. You should be able to see all the
% training information in the MATLAB command window.

delayed_n1 = [0; n1(1:length(n1)-1)];
trn_data = [delayed_n1 n1 m];
mf_n = 2;
ss = 0.2;
in_fismat=genfis1(trn_data, mf_n);
out_fismat = anfis(trn_data, in_fismat, [nan nan ss]);
estimated_n2 = evalfis(trn_data(:, 1:2), out_fismat);
estimated_x = m - estimated_n2;

%%
% After training, the estimated n2 is calculated using the
% command EVALFIS. The original n2 and estimated n2
% (output of ANFIS) are shown above. (Note that n2 is unknown.)

axis_limit = [min(time) max(time) min([n2; estimated_n2]) max([n2; estimated_n2])];
subplot(2,1,1)
plot(time, n2)
ylabel('n2 (unknown)'); axis(axis_limit);

subplot(2,1,2)
plot(time, estimated_n2)
ylabel('estimated_n2'); axis(axis_limit);

%%
% The estimated information signal x is equal to the difference
% between the measured signal m and the estimated
% interference (that is, ANFIS output).
% 
% The original information signal x and the estimated x by
% ANFIS are plotted. Without extensive training, the ANFIS
% can already do a fairly good job.

axis_limit = [min(time) max(time) min([x; estimated_x]) max([x; estimated_x])];
subplot(2,1,1)
plot(time, x)
ylabel('x (unknown) '); axis(axis_limit);
subplot(2,1,2)
plot(time, estimated_x)
axis(axis_limit); ylabel('estimated\_x')
"></originalCode>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -