📄 multipath_chann.c
字号:
++v_;
}
mlfAssign(&k, mlfScalar(v_));
}
}
/*
* %以下计算信道频率响应值,行数与载波数相同,列数与符号个数相同
* N_carrier=nl-cp_n;
*/
mlfAssign(&N_carrier, mclMinus(mclVv(nl, "nl"), mclVa(cp_n, "cp_n")));
/*
* N_ofdm=l;
*/
mlfAssign(&N_ofdm, mclVv(l, "l"));
/*
* selec_ray_channew=zeros(num,chann_l+N_ofdm*(N_carrier+cp_n));
*/
mlfAssign(
&selec_ray_channew,
mlfZeros(
mclVa(num, "num"),
mclPlus(
mclVv(chann_l, "chann_l"),
mclMtimes(
mclVv(N_ofdm, "N_ofdm"),
mclPlus(mclVv(N_carrier, "N_carrier"), mclVa(cp_n, "cp_n")))),
NULL));
/*
* selec_ray_channew(:,1:chann_l)=selec_ray_chan;
*/
mclArrayAssign2(
&selec_ray_channew,
mclVv(selec_ray_chan, "selec_ray_chan"),
mlfCreateColonIndex(),
mlfColon(_mxarray1_, mclVv(chann_l, "chann_l"), NULL));
/*
* Hk=zeros(N_carrier,N_ofdm);
*/
mlfAssign(
Hk,
mlfZeros(mclVv(N_carrier, "N_carrier"), mclVv(N_ofdm, "N_ofdm"), NULL));
/*
* for kk=1:N_ofdm
*/
{
int v_ = mclForIntStart(1);
int e_ = mclForIntEnd(mclVv(N_ofdm, "N_ofdm"));
if (v_ > e_) {
mlfAssign(&kk, _mxarray2_);
} else {
/*
* for ii=1:N_carrier
* sum1=0;
* for ll=1:num
* sum1=sum1+selec_ray_channew(ll,(kk-1)*(N_carrier+cp_n)+cp_n+ii+t_shift(ll))*exp(-sqrt(-1)*2*pi*(ii-1)*t_shift(ll)/N_carrier);
* end
* Hk(ii,kk)=sum1;
* end
* end
*/
for (; ; ) {
int v_0 = mclForIntStart(1);
int e_0 = mclForIntEnd(mclVv(N_carrier, "N_carrier"));
if (v_0 > e_0) {
mlfAssign(&ii, _mxarray2_);
} else {
for (; ; ) {
mlfAssign(&sum1, _mxarray3_);
{
int v_1 = mclForIntStart(1);
int e_1 = mclForIntEnd(mclVa(num, "num"));
if (v_1 > e_1) {
mlfAssign(&ll, _mxarray2_);
} else {
for (; ; ) {
mlfAssign(
&sum1,
mclPlus(
mclVv(sum1, "sum1"),
mclMtimes(
mclArrayRef2(
mclVv(
selec_ray_channew,
"selec_ray_channew"),
mlfScalar(v_1),
mclPlus(
mclPlus(
mclPlus(
mclMtimes(
mlfScalar(v_ - 1),
mclPlus(
mclVv(
N_carrier, "N_carrier"),
mclVa(cp_n, "cp_n"))),
mclVa(cp_n, "cp_n")),
mlfScalar(v_0)),
mclIntArrayRef1(
mclVv(t_shift, "t_shift"),
v_1))),
mlfExp(
mclMrdivide(
mclMtimes(
mclMtimes(
mclMtimes(
mclMtimes(
mclUminus(
mlfSqrt(_mxarray4_)),
_mxarray5_),
_mxarray6_),
mlfScalar(v_0 - 1)),
mclIntArrayRef1(
mclVv(t_shift, "t_shift"),
v_1)),
mclVv(
N_carrier, "N_carrier"))))));
if (v_1 == e_1) {
break;
}
++v_1;
}
mlfAssign(&ll, mlfScalar(v_1));
}
}
mclIntArrayAssign2(Hk, mclVv(sum1, "sum1"), v_0, v_);
if (v_0 == e_0) {
break;
}
++v_0;
}
mlfAssign(&ii, mlfScalar(v_0));
}
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&kk, mlfScalar(v_));
}
}
/*
* % N_carrier=nl-cp_n;
* % N_ofdm=l;
* % Hk=zeros(N_carrier,N_ofdm);
* % for kk=1:N_ofdm-1
* % for ii=1:N_carrier
* % sum1=0;
* % for ll=1:num
* % sum1=sum1+selec_ray_chan(ll,(kk-1)*(N_carrier+cp_n)+cp_n+ii+t_shift(ll))*exp(-sqrt(-1)*2*pi*(ii-1)*t_shift(ll)/N_carrier);
* % end
* % Hk(ii,kk)=sum1;
* % end
* % end
*
* for k=1:l
*/
{
int v_ = mclForIntStart(1);
int e_ = mclForIntEnd(mclVv(l, "l"));
if (v_ > e_) {
mlfAssign(&k, _mxarray2_);
} else {
/*
* input_sig_serial(((k-1)*nl+1):k*nl)=input_sig(:,k).';%输入信号矩阵转变成串行序列
* end
*/
for (; ; ) {
mclArrayAssign1(
&input_sig_serial,
mlfTranspose(
mclArrayRef2(
mclVa(input_sig, "input_sig"),
mlfCreateColonIndex(),
mlfScalar(v_))),
mlfColon(
mclPlus(
mclMtimes(mlfScalar(v_ - 1), mclVv(nl, "nl")),
_mxarray1_),
mclMtimes(mlfScalar(v_), mclVv(nl, "nl")),
NULL));
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&k, mlfScalar(v_));
}
}
/*
* delay_sig=zeros(num,chann_l);%初始化延时后的送入各径的信号,每径所含符号数为chann_l
*/
mlfAssign(
&delay_sig, mlfZeros(mclVa(num, "num"), mclVv(chann_l, "chann_l"), NULL));
/*
* %以下for循环为各径的输入信号做延迟处理
* for f=1:num
*/
{
int v_ = mclForIntStart(1);
int e_ = mclForIntEnd(mclVa(num, "num"));
if (v_ > e_) {
mlfAssign(&f, _mxarray2_);
} else {
/*
* if t_shift(f)~=0
* delay_sig(f,1:t_shift(f))=zeros(1,t_shift(f));
* end
* delay_sig(f,(t_shift(f)+1):chann_l)= input_sig_serial(1:(chann_l-t_shift(f)));
* end
*/
for (; ; ) {
if (mclNeBool(
mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
_mxarray3_)) {
mclArrayAssign2(
&delay_sig,
mlfZeros(
_mxarray1_,
mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
NULL),
mlfScalar(v_),
mlfColon(
_mxarray1_,
mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
NULL));
}
mclArrayAssign2(
&delay_sig,
mclArrayRef1(
mclVv(input_sig_serial, "input_sig_serial"),
mlfColon(
_mxarray1_,
mclMinus(
mclVv(chann_l, "chann_l"),
mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_)),
NULL)),
mlfScalar(v_),
mlfColon(
mclPlus(
mclIntArrayRef1(mclVv(t_shift, "t_shift"), v_),
_mxarray1_),
mclVv(chann_l, "chann_l"),
NULL));
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&f, mlfScalar(v_));
}
}
/*
* output_sig_serial=zeros(1,chann_l);%初始化输出信号串行序列
*/
mlfAssign(
&output_sig_serial,
mlfZeros(_mxarray1_, mclVv(chann_l, "chann_l"), NULL));
/*
* %得到各径叠加后的输出信号序列
* for f=1:num
*/
{
int v_ = mclForIntStart(1);
int e_ = mclForIntEnd(mclVa(num, "num"));
if (v_ > e_) {
mlfAssign(&f, _mxarray2_);
} else {
/*
* output_sig_serial= output_sig_serial+selec_ray_chan(f,:).*delay_sig(f,:);
* end
*/
for (; ; ) {
mlfAssign(
&output_sig_serial,
mclPlus(
mclVv(output_sig_serial, "output_sig_serial"),
mclTimes(
mclArrayRef2(
mclVv(selec_ray_chan, "selec_ray_chan"),
mlfScalar(v_),
mlfCreateColonIndex()),
mclArrayRef2(
mclVv(delay_sig, "delay_sig"),
mlfScalar(v_),
mlfCreateColonIndex()))));
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&f, mlfScalar(v_));
}
}
/*
* for k=1:l
*/
{
int v_ = mclForIntStart(1);
int e_ = mclForIntEnd(mclVv(l, "l"));
if (v_ > e_) {
mlfAssign(&k, _mxarray2_);
} else {
/*
* output_sig(:,k)=output_sig_serial(((k-1)*nl+1):k*nl).';%输出信号串行序列转变成与输入信号相同的矩阵形式,做为本函数输出
* end
*/
for (; ; ) {
mclArrayAssign2(
&output_sig,
mlfTranspose(
mclArrayRef1(
mclVv(output_sig_serial, "output_sig_serial"),
mlfColon(
mclPlus(
mclMtimes(mlfScalar(v_ - 1), mclVv(nl, "nl")),
_mxarray1_),
mclMtimes(mlfScalar(v_), mclVv(nl, "nl")),
NULL))),
mlfCreateColonIndex(),
mlfScalar(v_));
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&k, mlfScalar(v_));
}
}
mclValidateOutput(output_sig, 1, nargout_, "output_sig", "multipath_chann");
mclValidateOutput(*Hk, 2, nargout_, "Hk", "multipath_chann");
mxDestroyArray(t_shift);
mxDestroyArray(nl);
mxDestroyArray(l);
mxDestroyArray(chann_l);
mxDestroyArray(selec_ray_chan);
mxDestroyArray(pow_per_channel);
mxDestroyArray(total_pow_allchan);
mxDestroyArray(k);
mxDestroyArray(atts);
mxDestroyArray(N_carrier);
mxDestroyArray(N_ofdm);
mxDestroyArray(selec_ray_channew);
mxDestroyArray(kk);
mxDestroyArray(ii);
mxDestroyArray(sum1);
mxDestroyArray(ll);
mxDestroyArray(input_sig_serial);
mxDestroyArray(delay_sig);
mxDestroyArray(f);
mxDestroyArray(output_sig_serial);
mxDestroyArray(cp_n);
mxDestroyArray(count_begin);
mxDestroyArray(counter);
mxDestroyArray(t_interval);
mxDestroyArray(fd);
mxDestroyArray(delay);
mxDestroyArray(var_pow);
mxDestroyArray(num);
mxDestroyArray(input_sig);
mclSetCurrentLocalFunctionTable(save_local_function_table_);
return output_sig;
/*
* %注意,在本函数中没有为信号叠加白噪声
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -