前言
一、理论部分
(在书本中,以后补充)
二、仿真
1、生成2PAM信号
理论基础部分:
- 双极性NRZ矩形脉冲信号的最小平均误码率表现比较优秀,因此选用双极性NRZ矩形脉冲信号作为生成仿真的PAM脉冲信号;
- matlab中,有一个生成阶跃信号的函数——stepfun(t,t0),而矩形的脉冲信号就是由一个一个时间长度为1的矩形信号在各个时段内“拼接” 形成。
核心代码部分:
%源信号
t=0:0.01:10;
st_yuan=[1,1,1,0,1,0,0];
st_length=length(st_yuan);
st=0;
st_abs = 1;
for i=1:st_length
if st_yuan(i)==1
st=st_abs*(stepfun(t,i-1)-stepfun(t,i))+st;
elseif st_yuan(i)==0
st=-st_abs*(stepfun(t,i-1)-stepfun(t,i))+st;
end
end
仿真效果展示:

2、模拟信号的匹配滤波仿真
理论基础部分:
- 匹配滤波器的内部,存在一个跟原信号相匹配(时域取反移动)的信号,这个信号和输入信号卷积之后,可以确保在每个周期的最后时刻得到信噪比达到最大;
- 卷积就是能量的累积,而当两个信号完全重合的时候,能量最强,相应地,也就能够确定信号的周期。
核心代码部分:
nt=randn(1,1001);
t=0:0.1:100;
st=0.1*t.*(stepfun(t,0)-stepfun(t,60));
xt=nt+st;
mf=0.1*(60-t).*(stepfun(t,0)-stepfun(t,60));
yt=conv(st,mf);
仿真效果展示:



3、LFP的仿真
理论基础部分:
- 由生成源信号的stepfun函数可知,信号的BT=100Hz,而不是BT=1Hz;
- 理论上,低通滤波器的滤波范围应该为100Hz,也就是保证信号的BT都在滤波的范围内,但是为了确保仿真的效果,应该选用B=200Hz。
核心代码部分:
%源信号
t=0:0.01:10;
st_yuan=[1,1,1,0,1,0,0];
st_length=length(st_yuan);
st=0;
for i=1:st_length
if st_yuan(i)==1
st=st_abs*(stepfun(t,i-1)-stepfun(t,i))+st;
elseif st_yuan(i)==0
st=-st_abs*(stepfun(t,i-1)-stepfun(t,i))+st;
end
end
figure('NumberTitle', 'off', 'Name', '源信号');
plot(t,st);
xlabel('t(s)');
ylabel('s(t)');
%信道噪声
nt=randn(1,1001);
%输入信号
xt=st+nt;
%输入信号的FT变换
fs=1000;
xt_length=length(xt);
NFFT_xt = 2^nextpow2(xt_length);
F_XT_domain = (fs/2)*linspace(0,1,NFFT_xt/2);
XT = fft(xt,NFFT_xt);
Amp_XT = 2*abs(XT(1:NFFT_xt/2));
%LPF滤波器
f_LPF=0:1:1023;
LPF=stepfun(f_LPF,0)-stepfun(f_LPF,200);
%滤波
YT=XT.*LPF;
仿真效果展示:


4、MF的仿真
理论基础部分:
- 由匹配滤波的定义可知:MF滤波器里面的匹配信号就是源信号经过时域取反然后移位得到的;
- MF中的匹配信号是与矩形脉冲信号相匹配的信号,而不是与源信号相匹配的信号;
核心代码部分:
mf=stepfun(t,0)-stepfun(t,1);
yt_MF=conv(xt,mf);
%查看每个周期最后一个时刻的输出信号
sample_yt_MF = [yt_MF(1*100),yt_MF(2*100),yt_MF(3*100),yt_MF(4*100),yt_MF(5*100),yt_MF(6*100),yt_MF(7*100)]
仿真效果展示:


三、拓展知识
1、“假”的[1,1,1,0,1,0,0]序列
理论基础:
- 使用matlab跑信号仿真的时候,我们需要明确一个最基本的概念:MATLAB只能处理或者生成离散的数字序列;
- 在本次仿真中,矩形脉冲信号是使用stepfun() 函数生成的,stepfun()函数的第一个参数是向量,意思是说,这个参量确定了每两个相邻冲激之间的步进,而这个步进就表明,在时域图中,连续的信号并不连续,只是因为使用了plot()函数,使得信号看起来是连续的;
- LPF的滤波带宽参数设置为大于等于两倍源信号的带宽,就可以实现比较好的滤波效果;
- 验证方法:分别使用带宽为B=2Hz和B=200Hz的LPF进行滤波处理,看最后出来的效果图。如果2Hz的LPF得到的输出信号比较平滑,而200Hz的LPF得到的输出信号比较陡峭,那就说明输出信号的带宽为100Hz。
效果验证:
%输入信号
fs=1000;
xt_length=length(xt);
NFFT_xt = 2^nextpow2(xt_length);
F_XT_domain = (fs/2)*linspace(0,1,NFFT_xt/2);
XT = fft(xt,NFFT_xt);
Amp_XT = 2*abs(XT(1:NFFT_xt/2));

LPF的带宽=2Hz:
LPF=stepfun(f_LPF,0)-stepfun(f_LPF,2);

LPF的带宽=200Hz:
LPF=stepfun(f_LPF,0)-stepfun(f_LPF,200);
