📄 cca_snr10.m
字号:
clc;
clear all;
delta1=0.0002;%迭代步长因子
SNR=10;%输入信噪比
sgma=1;%输入信号功率
N=1000;%数据长度
d=1;%最小欧式距离
Fd=1000;%波特率
Fs=1000;%采样速率
ceta=0;
a1=100;%调整randa
sum=0;Lep=2;L=3;%信道长度
M=Lep+L-1;ISI_av=zeros(1,N-3);mse_av=0;
Num_of_realizations=2;%学习次数
%randa=0.9;%跌代因子
m=16;%进制数调制
for jt=1:Num_of_realizations
v=zeros(1,N);
Y=zeros(M,N);
w=rand(4,M);C=100000*eye(M);
gm=zeros(M,N);W=zeros(16,N);
b=zeros(1,N);bata=zeros(1,N);
S=qam_gen(m,N,d,Fd,Fs); %产生信源
for n=Lep+L-1:N
s=conj(S(n:-1:n-Lep-L+2))';
h1=[0.6662-0.8427j,1.6323-0.2503j,-0.6617-0.4102j];%信道
h2=[0.4607+0.5789j,0.5855-2.6912j,1.3273-0.4184j];
H=[h1,0;h2,0;0,h1;0,h2];
x(:,n)=H*s;%通过信道卷积后的信号
end
x1=conj([S(1),0,0,0])';x2=conj([S(2),S(1),0,0])';x3=conj([S(3),S(2),S(1),0])';
x(:,1)=H*x1;x(:,2)=H*x2;x(:,3)=H*x3;%求通过信道后的前3列
Y=awgn(x,SNR,sgma);%加噪声后的信号
ym=[zeros(4,3),Y];%前贴零
for n=Lep+L-1:N
for k=1:M
z_k=w(:,k)'*ym(:,n+k-M);%信号一路估计值; %*exp(-j*ceta);
z(k)=z_k;
%z_d=decide_16QAM(z_k,1);
%ceta=ceta+delta1*imag(z_k*conj((z_d-z_k)));
v(n-3)=v(n-3)+z(k);
end
c=norm(w'*H);%调整均衡后的输出
ping(n-3)=v(n-3)/M;%信号估计值
mean1(n-3)=v(n-3)/M/c;%均衡后的输出信号
u(n-3)=Y(:,n-3)'*C*Y(:,n-3);
for k=1:M
e_k=ping(n-3)-bata(n-1)*z(k);%一路误差
b(n-3)=b(n-3)+e_k;
end
ping_e(n-3)=abs(b(n-3)/4);%平均误差
randa(n-3)=[exp(-a1*abs(ping_e(n-3)))+exp(-1/(n-3))]/2;%遗忘因子函数
gm(:,n-3)=C*Y(:,n-3)/(randa(n-3)+u(n-3));km=[zeros(4,3),gm];
C=[C-gm(:,n-3)*Y(:,n-3)'*C]/randa(n-3);
for k=1:M
e_k=ping(n-3)-bata(n-1)*z(k);
r(:,k)=bata(n-1)*w(:,k)+km(:,n-M+k)*conj(e_k);%更新公式
end
R=conj([conj(r(:,1))',conj(r(:,2))',conj(r(:,3))',conj(r(:,4))'])';
bata(n)=norm(R);W=R/bata(n);
t=norm(W);W=W/t;
w(:,1)=W(1:4);w(:,2)=W(5:8);w(:,3)=W(9:12);w(:,4)=W(13:16);%更新权向量w
mse(n-3)=mean(abs(b(n-3)/4)^2);%求MSE
isi(n-3)=ISI_k(H,w);%求ISI
end
mse_av=mse_av+mse;
ISI_av=ISI_av+isi;
end
mse_av=mse_av/Num_of_realizations;
ISI_av=ISI_av/Num_of_realizations;
figure(1)
plot(10*log10(ISI_av),'-k')
xlabel('iterations');
ylabel('ISI(dB)');
i51=10*log10(ISI_av);
save x51 i51;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -