matlab程序求解释……越详细越好……程序如下……若解释的令人满意,分大大地有赏……先上20分……

问题描述:

matlab程序求解释……越详细越好……程序如下……若解释的令人满意,分大大地有赏……先上20分……
function y=pipei(x)
%构造发送信号波形
t1=0:100;
s01=-2+0*t1;s11=2+0*t1;
t2=100:200;
s02=2+0*t2;s12=-2+0*t2;
t3=200:1:400;
s03=0*t3;s13=0*t3;
t=[t1,t2,t3];
s0=[s01,s02,s03];
s1=[s11,s12,s13];
%匹配滤波器系统函数
h0=s1;
h1=s0;
%码元周期
Tb=200;
for i=1:length(x)
if(x(i)==1)
for j=1:Tb
d((i-1)* Tb+j)=1;
end
else
for j=1:Tb
d((i-1)* Tb+j)=0;
end
end;
end;
%对发送二进制信号进行波形映射
k=1;
for g=1:length(x)
if(x(g)==1)
y=s1;
else
y=s0;
end;
%叠加高斯白噪声,信噪比设为10dB
ynr=awgn(y,10,'measured');
%产生输出信号
r0=ifft(fft(ynr,512).*fft(h0,512),512);
r1=ifft(fft(ynr,512).*fft(h1,512),512);
tt=0:511;
figure(k);
subplot(211);
plot(t,y,'k',t,ynr,'g');
axis([0,400,-3,3]);
legend('发送波形','叠加高斯白噪声后波形');
subplot(212);
plot(tt,r0,'b',tt,r1,'r');
axis([0,400,-900,900]);
gtext('\leftarrow r0=conv(y,h0)');
gtext('\leftarrow r1=conv(y,h1)');
if r0(Tb)>r1(Tb)
m(k)=0;
else m(k)=1;
end;
k=k+1;
end;
for i=1:length(m)
if(m(i)==1)
for j=1:Tb
n((i-1)* Tb+j)=1;
end
else
for j=1:Tb
n((i-1)* Tb+j)=0;
end
end;
end;
figure(k);
subplot(211);
plot(d);
axis([0,length(d),-0.2,1.2]);
title('发送的二进制信号');
subplot(212);
plot(n);
axis([0,length(n),-0.2,1.2]);
title('接收判定后的二进制信号');
本人对matlab不太感冒,我专业走的也不是这个方向,我走的是单片机方向,并且matlab我们也没有学过……程序里面有些还是能稍微看的懂的……请大体的解释下程序,能解释多少算多少吧…… 能补全更好啊~
1个回答 分类:综合 2014-11-16

问题解答:

我来补答
function y=pipei(x)
%构造发送信号波形
t1=0:100;--自变量,间隔为1,等价于t1=0:1:100
s01=-2+0*t1;s11=2+0*t1;--实际上产生了t1上的两个常量信号 -2和2
t2=100:200;--第二个区间段
s02=2+0*t2;s12=-2+0*t2;--第二个区间t2上的两个常量信号
t3=200:1:400;
s03=0*t3;s13=0*t3;--第三个区间t3上的两个零信号
t=[t1,t2,t3];--下面这三行将自变量区间和函数空间合并.
s0=[s01,s02,s03];
s1=[s11,s12,s13];
%匹配滤波器系统函数
h0=s1;
h1=s0;
%码元周期
Tb=200;
for i=1:length(x)--x是函数的传入参数即pipei(x)中的x,length求其长度
if(x(i)==1)
for j=1:Tb
d((i-1)* Tb+j)=1;--如果x的第i个元素为1,执行此循环
--此时每个x元素对应产生一个Tb(200)长的1序列
end
else
for j=1:Tb
d((i-1)* Tb+j)=0;
--否则产生一个Tb(200)长的零序列
end
end;
end;
--这个循环结束后,d就是一个200*length(x)长度的数列,每一个x元素对应d中200个值,1对应1,其它数对应0.
%对发送二进制信号进行波形映射
--后面的太长,具体功能我就不解释了,而且我对编码也不大懂,只给出函数代码表面的含义
k=1;
for g=1:length(x)--for循环
if(x(g)==1)
y=s1;
else
y=s0;
end;
%叠加高斯白噪声,信噪比设为10dB
ynr=awgn(y,10,'measured');--产生高斯噪声
%产生输出信号
r0=ifft(fft(ynr,512).*fft(h0,512),512);--两个信号分别fft之后相乘,对乘积再进行ifft(逆傅里叶变换),时域上看就是卷积.512指进行fft或ifft的点数.
r1=ifft(fft(ynr,512).*fft(h1,512),512); --同上
tt=0:511;
figure(k);--绘图
subplot(211);--将一个图像分成上下两块,这里绘制第一块
plot(t,y,'k',t,ynr,'g');--绘制两条曲线,一个是黑色black,一个是绿色green
axis([0,400,-3,3]);--设置坐标系的范围:x是从0到400,y轴从-3到3
legend('发送波形','叠加高斯白噪声后波形');--给两条曲线添加标记
subplot(212);--绘制第二块
plot(tt,r0,'b',tt,r1,'r');--一条是蓝色blue,一条是红色red
axis([0,400,-900,900]);--设置坐标轴范围
gtext('\leftarrow r0=conv(y,h0)');--在图像上给出文本标记
gtext('\leftarrow r1=conv(y,h1)');
if r0(Tb)>r1(Tb)
m(k)=0;
else m(k)=1;
end;
k=k+1;
end;
for i=1:length(m)--跟上面的大同小异
if(m(i)==1)
for j=1:Tb
n((i-1)* Tb+j)=1;
end
else
for j=1:Tb
n((i-1)* Tb+j)=0;
end
end;
end;
figure(k);--绘图,与上面的大同小异.
subplot(211);
plot(d);
axis([0,length(d),-0.2,1.2]);
title('发送的二进制信号');
subplot(212);
plot(n);
axis([0,length(n),-0.2,1.2]);
title('接收判定后的二进制信号');
 
 
展开全文阅读
剩余:2000