clc;clear;close all;
% r = [1.070880965,0.376510198,0.035439982];
% r = [1.125001,0.5,0.0625];
% r = [1.190540872,0.617316568,0.095269936];
r = [1.263783726,0.72633701,0.131891363];
R = zeros(11,11);
for i = 1:11
R(i,i) = r(1);
end
for j = 1:10
R(j+1,j) = r(2);
R(j,j+1) = r(2);
end
for k = 1:9
R(k+2,k) = r(3);
R(k,k+2) = r(3);
end
[x,y]=eig(R);
m=diag(y);
zuixiao = min(m)
zuida = max(m)
chi = zuida/zuixiao
close all;clear;clc;
%% 初始化参数
N = 5000; %设置伯努利序列长度
M = 11; %滤波器长度
W = 3.2; %设置W的值
n = [1;2;3]; %生成3行1列矩阵
h = 0.5*(1+cos(2*pi*(n-2)/W)); %信道单位脉冲响应
miu = [0.075,0.025,0.005]; %步长参数
%% 计算均方误差
for i = 1:200 %进行200次蒙特卡洛实验
x = binornd(1,0.5,N,1); %产生值为1,-1的伯努利序列
m = find(x==0);
x(m) = -1; %1,-1的概率都为0.5的伯努利序列
sigma = 0.001; %设置sigma参数
v1 = sqrt(sigma)*randn(N+2,1); %生成高斯白噪声,其均值为0,方差为0.001
u = conv(h(:,1),x)+v1; %将输入序列x与h做卷积
for miuk = 1:3 %计算不同步长参数mu下的值
w = zeros(M,1); %初始化滤波器系数
for k = 1:N-M+1
utemp = u(k+M-1:-1:k); %存放u(n)的临时向量
y(k,miuk) = w.'*utemp; %滤波器的输出
e(k,miuk) = x(k+4)-y(k,miuk); %估计误差
Pe(i,k,miuk) = e(k,miuk).*e(k,miuk); %估计误差平方
w = w+miu(miuk)*utemp*conj(e(k,miuk)); %更新滤波器系数
end
end
end
%% 绘图
figure;
semilogy(mean(Pe(:,:,1)),'b');hold on;
semilogy(mean(Pe(:,:,2)),'.-g');hold on;
semilogy(mean(Pe(:,:,3)),'--r');hold on;
xlabel('迭代次数');ylabel('集平均平方误差');
title('改变步长时LMS算法学习曲线','fontsize',14);
legend('\mu=0.075','\mu=0.025','\mu=0.005');grid on;
text(1200,0.05,'\mu=0.005');
text(700,0.015,'\mu=0.075');
text(700,0.0015,'\mu=0.025');
close all;clear;clc;
%% 初始化参数
N = 500; %伯努利序列长度
M = 11; %均衡器抽头数
% W = [2.9,3.1,3.3,3.5]; %控制均衡器抽头输入相关矩阵的特征值分布
W = [2.8,3.0,3.2,3.4]; %控制均衡器抽头输入相关矩阵的特征值分布
n = [1;2;3]; %3行1列
h = 0.5*(1+cos(2*pi*(n-2)*(1./W))); %信道的脉冲响应函数
% step = 0.075; %步长参数
step = 0.050; %步长参数
%% 自适应滤波
for i = 1:200 %做200次蒙特卡洛实验
x = binornd(1,0.5,N,1); %产生值为1,-1的伯努利序列
m = find(x==0); %寻找第一个为0的x值
x(m) = -1; %将值为0的数设置为-1,循环操作之后将所有的0改为-1
sigma = 0.001; %定义参数sigma
v = sqrt(sigma)*randn(N+2,1); %生成N+2行,1列的高斯白噪声,均值为0,方差为0.001
u(:,1) = conv(h(:,1),x)+v; %计算h与x的卷积;
u(:,2) = conv(h(:,2),x)+v; %计算h与x的卷积;
u(:,3) = conv(h(:,3),x)+v; %计算h与x的卷积;
u(:,4) = conv(h(:,4),x)+v; %计算h与x的卷积;
for wk = 1:4 %根据不同的参数计算W
w = zeros(M,1); %初始化参数w
for k = 1:N-M+1 %设置循环次数
utemp = u(k+M-1:-1:k,wk); %临时存放向量u(n)
y(k,wk) = w.'*utemp; %滤波器输出
e(k,wk) = x(k+4)-y(k,wk); %估计误差
Pe(i,k,wk) = e(k,wk).*e(k,wk); %均方误差
w = w+step*utemp*conj(e(k,wk)); %更新滤波器系数
end
wo(i,:,wk) = w; %将滤波器系数系数记录在wo中
end
end
%% 作图
figure;
semilogy(mean(Pe(:,:,1)),'k');hold on; %semilogy函数对y取对数代替原来的y
semilogy(mean(Pe(:,:,2)),'--b');hold on;
semilogy(mean(Pe(:,:,3)),':m');hold on;
semilogy(mean(Pe(:,:,4)),'-.r');hold on;
title('LMS算法的学习曲线');
xlabel('迭代次数');ylabel('集平均平方误差');
legend(['W=',num2str(W(1))],['W=',num2str(W(2))],['W=',num2str(W(3))],['W=',num2str(W(4))]);grid on;
figure;subplot(2,1,1);
stem(mean(wo(:,:,1)));text(11.1,0,['W=',num2str(W(1))]);
xlabel('k');ylabel('w_k');
title('自适应均衡器的集平均脉冲响应','fontsize',14);
subplot(2,1,2);
stem(mean(wo(:,:,2)));text(11.1,0,['W=',num2str(W(2))]);
xlabel('k');ylabel('w_k');
figure;subplot(2,1,1);
stem(mean(wo(:,:,3)));text(11.1,0,['W=',num2str(W(3))]);
xlabel('k');ylabel('w_k');
title('自适应均衡器的集平均脉冲响应','fontsize',14);
subplot(2,1,2);
stem(mean(wo(:,:,4)));text(11.1,0,['W=',num2str(W(4))]);
xlabel('k');ylabel('w_k');