📄 transmitter_receiver.m
字号:
clear all
clc
%%%%%%%%%%%%%%%%%%%%%%% 不进行衰害补偿的系统参数设置 %%%%%%%%%%%%%%%%%%
%各种损伤说明
cng=input('信道噪声增益选择: 0(无损失) 0.6(轻微损失) 2(硬损伤) : ');
cdi=input('多径干扰选择: 0(无干扰) 1(轻微干扰) 2(硬干扰) :');
fo=input('发射机载频频偏: 0 0.01 :');
po=input('发射机载频相位补偿参数: 0 0.7 0.9 :');
toper=input('时间补偿参数(采样周期的百分比): 0 20 30 :');
so=input('采样周期偏移量(发射机符号周期低于接收机的单位数): 0 1 :');
%%%%%%%%%%%%%%%%%%%%%%%%%% 发射机 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将字符串转变为4-PAM序列
str='01234 I wish I were a leader in the future!';
m=letters2pam(str); %调用letters2pam子函数
N=length(m);
%进行过采样
M=100; %过采样因子
mup=zeros(1,N*M);
mup(1:M:end)=m;
%用Hamming窗进行脉冲成形
p=hamming(M);
x=filter(p,1,mup); %卷积
% figure(1),plotspec(x,1/M) %作出脉冲成形后的频谱图
%调制
t=1/M:1/M:length(x)/M;
fc=20; %载波频率
c=cos(2*pi*fc*t); %载波
r=c.*x; %调制后的信号
% figure(2),plotspec(r,1/M) %作出调制后的频谱图
%%%%%%%%%%%%%%%%%%%%%%%%%% 引入各种损害参数 %%%%%%%%%%%%%%%%%%%%%%%%%
if cdi<0.5
mc=[1 0 0]; %无干扰
elseif cdi<1.5
mc=[1 zeros(1,M) 0.28 zeros(1,2.3*M) 0.11]; %轻微干扰
else mc=[1 zeros(1,M) 0.28 zeros(1,1.8*M) 0.44]; %硬干扰
end
mc=mc/(sqrt(mc*mc'));
dv=filter(mc,1,r); %经过信道后对发射机信号进行滤波
nv=dv+cng*(randn(size(dv))); %加入高斯信道噪声
to=floor(0.01*toper*M); %采样周期偏移
rnv=nv(1+to:end); %指定信号延迟
rt=(1+to)/M:1/M:length(nv)/M; %采用延迟信息修正时间参数
rM=M+so; %接收机采样偏移
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 信道 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%产生一个时变衰落信道
lr=length(nv);
fp=[ones(1,floor(0.2*lr)),0.5*ones(1,floor(lr-0.2*lr))]; %平坦衰落信道
r1=nv.*fp;
%使用自动增益控制对信号进行修正
ds=pow(r1); %期望的信号平均功率
g=zeros(1,lr); %初始化增益
g(1)=1;
nr=zeros(1,lr);
mu=0.0003; %步长
for i=1:lr-1;
nr(i)=g(i)*r1(i);
g(i+1)=g(i)-mu*(nr(i)^2-ds);
end
r2=nr;
% figure(3),plotspec(r2,1/M) %作出经过AGC后的频谱图
%%%%%%%%%%%%%%%%%%%%%%%%%%% 接收机 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%采用AM进行方式解调
c2=cos(2*pi*fc*t); %同步载波进行混频
x2=r.*c2;
% figure(4),plotspec(x2,1/M) %作出解调后的频谱图
fl=50; %LPF中冲激响应的项数
fbe=[0 0.5 0.6 1];
damps=[1 1 0 0];
b=remez(fl,fbe,damps); %产生LPF冲激响应
x3=2*filter(b,1,x2); %进行低通滤波
% figure(5),plotspec(x3,1/M) %作出经过LPF后的频谱图
% l=0.5*fl+0.5*M+0.5*M; %初始时延l对应于LPF、相关滤波器和信号周期长度的一半
% ul=floor((length(x3)-l-1)/(4*rM)); %作出眼图
% figure(6),plot(reshape(x3(125:ul*4*rM+124),4*rM,ul))
%与脉冲信号进行相关操作以加强脉冲序列的波峰
y=filter(fliplr(p)/(pow(p)*M),1,x3); %对接收信号脉冲进行卷积、归一化
% figure(7),plot(reshape(y(125:ul*4*rM+124),4*rM,ul)) %作出眼图
%对采样信号及增量设置延迟
z=y(0.5*fl+M:M:end); %下采样
figure(8),plot([1:length(z)],z,'.') %软判决后的星座图
%判决装置和匹配特性
mprime=quantalph(z,[-3,-1,1,3])'; %量化
cluster_variance=(mprime-z)*(mprime-z)'/length(mprime);
lmp=length(mprime);
percentage_symbol_error=100*sum(abs(sign(mprime-m(1:lmp))))/lmp %误码率
%重建信号
reconstructed_message=pam2letters(mprime);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -