永发信息网

变步长盲均衡算法的matlab仿真程序

答案:2  悬赏:70  手机版
解决时间 2021-03-04 02:51
  • 提问者网友:雪舞兮
  • 2021-03-03 13:04
变步长盲均衡算法的matlab仿真程序
最佳答案
  • 五星知识达人网友:轻雾山林
  • 2021-03-03 13:40
并不擅长循环运算。如果不是特别复杂的运算,数组的算法可能并不难想出来。
如果你非要用变步长的循环,我想到一个折中的办法,因为你提前知道了m应该取那些数值,也就是说你也提前知道了i的相应数值。可以提前构造一个数组(比如叫prei),其中的元素就是i相应的数值。
然后在循环内加入这样的判断
if(~isempty(find(prei==i)))
end
这样他就会在你所需要的步长上进行计算了。

如果m事先不知道,那我倒是建议用while,不用for来做循环,
可以写为
i=1;
while (i<=6)
if ...
...;
i=i+1;
else
...
i=i-1;
end
全部回答
  • 1楼网友:行雁书
  • 2021-03-03 13:48
clear all close all n=10; %滤波器阶数 sample_n=500; %采样点数 a=1; %信号幅度 snr=10; %信噪比 t=1:sample_n; length_t=100; %期望信号序列长度 d=a*sin(2*pi*t/length_t); %期望信号 m=length(d); %m为接收数据长度 x=awgn(d,snr); %经过信道(加噪声) delta=1/(10*n*(a^2)); %计算能够使lms算法收敛的delta y=zeros(1,m); h=zeros(1,n); %lms滤波器系数 h_normalized=zeros(1,n); %归一化lms滤波器系数 y1=zeros(1,n); for n=n:m %系数调整lms算法 x1=x(n:-1:n-n+1); %lms算法 y(n)=h*x1'; e(n)=d(n)-y(n); h=h+delta*e(n)*x1; %nlms算法 y_normalized(n)=h_normalized*x1'; e_normalized(n)=d(n)-y_normalized(n); h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1'); end error=e.^2; %lms算法每一步迭代的均方误差 error_normalized=e_normalized.^2; %nlms算法每一步迭代的均方误差 for n=n:m %利用求解得到的h,与输入信号x做卷积,得到滤波后结果 x2=x(n:-1:n-n+1); y1(n)=h*x2'; y2(n)=h_normalized*x2'; end subplot(411) plot(t,d); axis([1,sample_n,-2,2]); subplot(412) plot(t,x); subplot(413) plot(t,y); subplot(414) plot(t,y_normalized); figure(2) plot(t,error,'r',t,error_normalized,'b');
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯