变步长盲均衡算法的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
如果你非要用变步长的循环,我想到一个折中的办法,因为你提前知道了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');
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯