⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transmitter_receiver.m

📁 在matlab环境下
💻 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 + -