📄 gaussian确定离散多普勒频移、系数、相移的程序.m
字号:
%函数Parameter_Gaussian;
%功能:确定离散多普勒频移(fi,n)、多普勒系数(Ci,n)、多普勒相移(@i,n):适用于仿真高斯功率谱的情况。
%输入参数说明:
%(1)Method_type,表示计算离散多普勒频移和多普勒系数所采用的方法。其输入以及具体含义如下:
% MED 等距离法
% MEA 等面积法
% MCM Monte Carlo法
% MSEM 最小均方误差法
% MEDS 精确多普勒扩展法
% Jakes Jakes仿真法
%(2)N_i,表示正弦振荡器的数目;
%(3)Variance, 表示确定高斯过程的平均功率;
%(4)fc,为3dB截止频率;
% (5)kc由仿真所需的离散多普勒频移fi,n的选择范围来决定,下面选择kc=2sqrt(2/ln2)
%(6)phase, 表示用于计算多普勒相移的方法。其输入以及具体含义如下:
% Rand 随机相移法
% permuted 组合相移法
% 输出参数说明:
%(1)f_i,表示离散多普勒频移(fi,n)
% (2)c_i,表示多普勒系数(Ci,n);
% (3)theta_i, 表示多普勒相移(@i,n)
%程序:
function [f_i,c_i,theta_i]=Parameter_Gaussian(Method_type,N_i,Variance,fc,kc,phase)
sigma=sqrt(Variance);
%等距离法(MED)
if Method_type =='MED'
n=(1:N_i)';
f_i=kc*fc/(2*N_i)*(2*n-1);
c_i=sigma*sqrt(2)*(sqrt(erf(n*kc*sqrt(log(2))/N_i)-erf((n-1)*kc*sqrt(log(2))/N_i));
%等面积法
elseif Method_type=='MEA'
n=(1:N_i)';
f_i=fc/sqrt(log(2))*erfinv(n/N_i);
f_i(N_i)=fc/sqrt(log(2))*drfinv(0.999999);
c_i=sigma*sqrt(2/N_i)*ones(size(n));
%Mont Carlo法(MCM)
elseif Method_type=='MCM'
n=rand(N_i,1);
f_i=famx*sin(pi*n/2);
c_i=sigma*sqrt(2/N_i)*one*(size(n));
%最小均方误差法(MSEM)
elseif Method_type=='MSEM'
n=(1:N_i);
f_i=kc*fc/(2*N_i)*(2*n-1);
T=1/(2*kc*fc);
M=1e3;
t=linspace(0,T,M);
f1=exp(-(pi*fc*t).^2/log(2));
c_i=zeros(size(f_i));
for k=1:lenght(f_i)
c_i(k)=2*sigma*sqrt(trapz(t,f1.*cos(2*pi*f_i(k)*t))/T);
end;
%精确多普勒扩展法(MEDS)
elseif Method_type=='MEDS'
n=(1:N_i);
f_i=fc/sqrt(log(2))*erfinv((2*n-1)/(2*N_i));
c_i=sigma*sqrt(2/N_i)*ones(size(n));
else
error('Method if unkown')
end
%计算多普勒相移
if phase=='rand'
theta_i=rand(N_i,1)*2*pi;
elseif phase=='permuted',
n=(1:N_i)';
U=rand(size(n));
[x,k]=sort(U);
theta_i=2*pi*n(k)/(N_i+1);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -