clear;
clc;
%原始输入信号包括随机噪声
fs=1200*10^6;
fc=450*10^6;
Ndata=1024*8;
N=1024*8;
n=0:Ndata-1;
t=n/fs;
B=10*10^6;
A=1;
Q=pi/2;
randn('state',0);
Vin=A*(cos(2*pi*B*t)).*(cos(2*pi*fc*t+Q))+0.004*randn(1,length(t));
pxx=10*log10(abs(fft(Vin,N).^2)/N);
f=(0:N-1)*fs/N/10^6;
figure(1);
subplot(2,2,1);
plot(f,pxx);
xlabel('频率/MHz');
ylabel('输入信号功率谱');
title('Ndata=1024 Nfft=1024'); grid on;
%输入信号经过放大器放大后的输出波形
c0=50/5+0.5*j;
c1=5/5+0.5*j;
c2=2.5/5+0.5*j;
c3=1.25/5+0.5*j;
% a=1;
% b=1;
% Va=c0*a*Vin+a*[c1*(abs(a))^2*(Vin.*conj(Vin))+c2*(abs(a))^4*(Vin.*conj(Vin)).^2+c3*(abs(a))^6*(Vin.*conj(Vin)).^3].*Vin;
% Ve=Va/(c0*A+0.75*c2*A^3)-Vin;
% Vout=Va-Ve*(c0*A+0.75*c2*A^3);
%加入自适应控制方法
a=0*ones(1,N);
b=0*ones(1,N);
count=0;
delta=-0.1;
beta=-0.1;
for n=2:N
m=abs(a(n))
Va(n)=c0*a(n-1)*Vin(n)+a(n-1)*(c1*m^2*(Vin(n).*conj(Vin(n)))+c2*m^4*(Vin(n).*conj(Vin(n))).^2+c3*m^6*(Vin(n).*conj(Vin(n))).^3).*Vin(n);
Ve(n)=Va(n)/(c0*A+0.75*c2*A^3)-Vin(n);
Vout(n)=Va(n)-b(n)*Ve(n)*(c0*A+0.75*c2*A^3);
a(n)=a(n-1)+delta*(Ve(n)*conj(Vin(n)));
b(n)=b(n-1)+beta*(Vout(n)*Ve(n));
count=count+1;
% if (abs(a(n)-a(n-1))<0.00000001)&(abs(b(n)-b(n-1))<0.00000001)
% break;
% end
end
%波形显示程序
subplot(2,2,2);
pxx1=10*log10(abs(fft(Va,N).^2)/N);
plot(f,pxx1);
xlabel('频率/MHz');
ylabel('未用前馈技术放大器输出功率谱');
title('Ndata=1024 Nfft=1024'); grid on;
subplot(2,2,3);
pxx2=10*log10(abs(fft(Ve,N).^2)/N);
plot(f,pxx2);
xlabel('频率/MHz');
ylabel('误差输出功率谱');
title('Ndata=1024 Nfft=1024'); grid on;
subplot(2,2,4);
pxx3=10*log10(abs(fft(Vout,N).^2)/N);
plot(f,pxx3);
xlabel('频率/MHz');
ylabel('使用用前馈技术放大器输出功率');
title('Ndata=1024 Nfft=1024'); grid on;
% alimit=a(count);
% blimit=b(count);
for m=1:count
k(m)=a(m);
u(m)=b(m);
end
h=1:count;
figure(2);
plot(h,real(k));
hold on;
plot(h,imag(k));
figure(3);
plot(h,real(u));
hold on;
plot(h,imag(u))