📄 channel.m
字号:
RPP=[0.0 -1.0 -9.0 -10.0 -15.0 -20.0];%case2 Relative Path Power(dB)
P0=10.^(RPP./10);%将能量由dB形式还原为正常形式
Pk=P0./(sum(P0));%将能量归一化
delay=[0 310 710 1090 1730 2510];%时延(ns)
delay=delay.*(1e-9);%将单位由ns还原为s
B=1.28e6;%TD-SCDMA 带宽;
%以下部分是为了将所有抽样点的能量分配到整数点上
ntotal=ceil(delay(end)*B)+1;%根据最后一个抽样点的时延确定需要几个整数点
n=floor(delay*B);%获得抽样点的前一个整数,比如1.3取1;1.9也取1.
pn=zeros(length(Pk),ntotal);%预设一个矩阵,每一行为一个抽样点的能量分配情况,每一列为一个整数点的能量
for i=1:length(Pk)%对每一个抽样点进行能量分配,按比例分给该抽样点的临近的两个整数点上
pn(i,n(i)+1)=((n(i)+1)-delay(i)*B)*Pk(i);%抽样点的前一个整数点
pn(i,n(i)+2)=(delay(i)*B-n(i))*Pk(i);%抽样点的后一个整数点
end
pn=sum(pn,1);%将分配结果累加起来,最终的到ntotal个整数点上的能量
%以下为利用上面的pn进行信道估计
K=8;%假设用户数为8
ck=zeros(K,ntotal);%预设一个矩阵,每一行代表一个用户,每一列代表一个用于信道估计的信道系数
[G W stringcom]=midamble(K);%获得G矩阵和midamble码
for i=1:ntotal
ck(:,i)=random('Normal',0,pn(i)/2,K,1)+j*random('Normal',0,pn(i)/2,K,1); %对每个用户产生一个信道系数的原始值
end
e=[];
for i=1:K
e=[e;conv(G(i,:),ck(i,:))];%将每个用户的信道估计值与midamble码卷积,将卷积后的结果组成一个矩阵
end
e=sum(e,1);%将矩阵中的值按行加起来,即将各个用户的信道值加起来
%产生高斯噪声
SNR=10;%信道信噪比
Psnr=1/(10^(0.1*SNR));
noise=random('Normal',0,Psnr/2,1,length(e))+j*random('Normal',0,Psnr/2,1,length(e));
%信道估计不引入噪声
h_idea=ifft(fft(e(W+1:W+128))./fft(stringcom));
%信道估计引入噪声
en=e+noise;
h_noise=ifft(fft(en(W+1:W+128))./fft(stringcom));
%原始信道系数
h=[ck(1,:) zeros(1,W-size(ck,2))];%取第一个用户的信道系数的原始值,用于估计
figure(1)
subplot(2,2,1)
stem(real(h(1:W))); %实部
title('原始--实部');
grid on
subplot(2,2,2)
stem(imag(h(1:W))); %虚部
title('原始--虚部');
grid on
subplot(2,2,3)
stem(real(h_idea(1:W))); %实部
title('不加噪声--实部');
grid on
subplot(2,2,4)
stem(imag(h_idea(1:W))); %虚部
title('不加噪声--虚部');
grid on
figure(2)
subplot(2,2,1)
stem(real(h(1:W))); %实部
title('原始--实部');
grid on
subplot(2,2,2)
stem(imag(h(1:W))); %虚部
title('原始--虚部');
grid on
subplot(2,2,3)
stem(real(h_noise(1:W))); %实部
title('加噪声--实部');
grid on
subplot(2,2,4)
stem(imag(h_noise(1:W))); %虚部
title('加噪声--虚部');
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -