📄 ch_est.m
字号:
%发送和接收合在一块的程序
%修改于2004/11/10
%==========output parameters=============
%peak_h 估计的多径分量的幅度
%t_h 多径分量对应的延时值——相对值,以接收到的信号的起始点为零点
%==========input parameters==============
%rt 接收到的信号,由训练序列和噪声以及多经组成,训练序列全是1
%Ts 采样周期,和发送信号采样周期相同
%N_monocycle 训练序列的符号个数
%gt 本地相关信号,采样周期为Ts,单周期脉冲(一个周期内的波形),脉冲形状可以自由选择,和发射信号脉冲波形相同
%Tf 脉冲周期=脉冲持续时间+空闲时间
%Dg 脉冲持续时间
%-----------------------------------------------
function [peak_h,t_h]=ch_est(rt,Ts,N_monocycle,gt,Tf,Dg,h)
%================接收端估计过程======================
Num_Tf=Tf/Ts;
rt_len=length(rt);
nrt=[1:rt_len];
Eb=Eb_halfcos(Ts,Dg);
% figure(10);
% subplot(3,1,1); %接收信号波形
% plot([0:Ts:(rt_len-1)*Ts],rt);
ngt=[1:length(gt)];
[gt1,ngt1]=sigfold(gt,ngt);
[ft0,nft]=conv_m(rt,nrt,gt1,ngt1);
ft=ft0*Ts; %卷积相当于能量积分,因此乘以抽样间隔
% subplot(3,1,2);
% plot(nft*Ts,ft/Eb); %和参考波形卷积的波形
nft_len=length(nft);
K0=find(nft==0);
ft_len=nft(nft_len); %ft正系数部分的实际长度
%=============
for j=1:N_monocycle %考虑信道存在码间干扰,故每80ns截取并叠加一次
for n=0:Num_Tf-1
TL=n*Ts;
N0=((j-1)*Tf+TL)/Ts;
N=round(N0);
if ((j==1)&(N<0))|((j==N_monocycle)&(N>=ft_len))
Zj(n+1)=0;
else
Zj(n+1)=ft(N+K0); %由于ft的序号从负数开始,所以要找到序号为1所对应的实际序号K0
end
end
Zk(j,:)=Zj; %在tao处抽样的结果,得到N-1个向量
end
Zk0=sum(Zk)/(Eb*N_monocycle); % Zk(tao,ak)
%==================================================
n=[0:(length(Zk0)-1)];
t=n*Ts;
% subplot(3,1,3);
% plot(t,Zk0);
%eval_h=[zeros(1,20/Ts-1),Zk0(20/Ts:1:length(Zk0))]; %CM3和CM4信道条件使用这些语句,目的是消除前20ns内的伪峰值
[peak_h,index_h]=findpeak(Zk0);
t_h=(index_h-1)*Ts;
%[peak_h,t_h]=searchpeak(eval_h,Th,Ts);
figure(11);
t=[0:Ts:Tf-Ts];
plot(t,Zk0,'r');
hold on;
h_comp=h(1:Tf/Ts); %CM3和CM4截取信道冲激响应前80ns内的值画图
stem(t,h_comp,'*');grid;
legend('Estimated paths','Actual paths');
hold off;
title('信道估计结果和实际信道冲激响应');
xlabel('time(ns)');ylabel('amplitude');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -