




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
天线选择定点算法一、 系统平台与原理算法间的对应关系在文档1中提出,用以下两个公式来对不同天线配置下的信道容量进行遍历式计算,然后通过比较这些容量的大小来确定天线选择方案: (1) (2)其中为Hermitian矩阵,维数为()。是第个参考信号子载波的有效信道矩阵,维数为。是总的信号的发送能量(归一化能量发送时取值为1),是发送流数,是多个接收天线上的平均噪声方差。为参与运算的总的子载波信道数目。在系统算法平台中,发射端的调制信号能量归一化以后,经过IFFT运算后总能量衰减为原来的1/1024,总的信号发送能量没有进行归一化,在对过了多径的信号噪声的时候,噪声功率计算为:多径信道增益:平均每个符号的能量,星座点归一化为1:发射天线数: FFT点数:噪声功率谱密度:指定的信噪比:调制方式实际加入的噪声是信号的实部和虚部分别加入的,功率谱密度为:在利用CP或是preamble进行的估计时,由于是在时域进行的,接收到的信号经过AGC以后会有个AGC的调整因子:AGC调整因子这样估计到的噪声功率谱密度是的倍数,倍数关系为:,即估计得到的噪声功率谱密度:由于接收到的midamble也是经过AGC的,且信道估计是在频域进行,而接收机这端FFT运算也没有归一化,会对信号有个放大,从仿真结果看放大倍数在左右,没有作大量的统计仿真,观察了几组数据,选择用来作为估算结果。综合考虑发送端、接收端的IFFT、FFT和AGC的影响,估计得到的频域信道和实际频域信道间的关系为:以及算法中估算的结果,公式(2)变为以下形式:(3)二、 定点算法中各个模块及各变量位宽设置有了上述结果,下面给出天线选择各个模块的定点化程序。2.1 噪声功率谱密度计算通过估计得到的噪声功率谱密度及其位宽设置为: 位宽为(18, 18),当的变换范围为:030dB的时候,估算得到的的浮点数值范围为(0.0000488281, 0.0488281)通过查表法求得其倒数为: 位宽为(18, 2)2.2 天线选择模块变量名位宽说明h_ch(18,10)频域信道N整数32用了32个导频上的信道var_inverse(18,2)噪声功率谱的倒数nr4接收天线数h_eff(18,8)计算的有效信道h_eff* (h_eff)(18,4)有效信道和它自己的共轭转置的乘积matrixA(18,6)公式(2)中的矩阵Adet(18,8)矩阵的行列式temp_capa_fix(11,7)行列式的对数capacity(16,7)容量值void P_rank_cal(P_Complex* h_ch,/输入的信道矩阵int input_w,int input_w_d,/信道矩阵位宽(18,10)int N,/天线选择中所选用的子载波数FIX var_inverse,/信道矩阵位宽(18,10)int var_w, int var_w_d,/噪声功率谱密度的倒数位宽(18,2)int *mimo_indicator,/计算得到的mimo索引值int nr)/接收天线数 int eff_nt,i,j,k,nr_idx,nt_idx,mimo_idx; int h_eff_w=input_w;/计算有效信道位宽和输入总位宽一致, int h_eff_w_d=input_w_d-2;/有效信道小数位宽减两位,分两位计入整数位宽 int matrix_a_w=18;/H*H得到的矩阵的总位宽,统一为18 int matrix_a_w_d=4;/ H*H得到的矩阵的小数位宽,统一为4 int matrix_adjust2_a_w=18;/公式(2)中计算后的总位宽 int matrix_adjust2_a_w_d=6;/公式(2)中计算后的总小数位宽 int det_w=18;/算得的行列式位宽 int det_w_d=8;/算得的行列式小数位宽FIX det=0; FIX temp=0; FIX tmp1,tmp2; FIX* temp_capa_fix=(FIX*)malloc(sizeof(FIX);/对每个载波计算算得的容量,最后要累加到变量capacity中,共32个累加量(N) int temp_capa_fix_w=11;/每个累加量的总位宽 int temp_capa_fix_w_d=7;/每个累加量的小数位宽 FIX capacity4; /现在只计算天线独立数为1和4时的容量,每个位宽为(16,7),由32个temp_capa_fix累加得到 int capacity_w=16; int capacity_w_d=7;/*所需变量空间分配,可以不管*/ P_Complex *h_matrix,*h_eff,*h_subcarr,*h_subcarr_Htranspose, *matrixA, tmp; h_eff = alloc_mem_P_complex3(N,nr,4); h_subcarr = alloc_mem_P_complex1(nr*4); h_subcarr_Htranspose = alloc_mem_P_complex1(4*nr); matrixA = alloc_mem_P_complex1(4*4); memset(capacity,0,sizeof(FIX)*4); / mimo_index 4 for (mimo_idx=0;mimo_idx4;mimo_idx+=3) / mimo_index 4 /*利用函数P_eff_ch_cal 和输入的h_ch来计算对应于不同mimo_idx下的有效信道*/ P_eff_ch_cal(h_ch, input_w, input_w_d,N, mimo_idx,h_eff,h_eff_w,h_eff_w_d, &eff_nt,nr);for (k=0;kN;k+) /*每次提取一个载波上的有效信道矩阵到变量h_subcarr 中,即公式(2)中的Hi*/ h_subcarrh_effk*nr_idx*nt_idx; /*求Hi共轭转置 Hi*/ P_Htranspose(h_subcarr,nr,eff_nt,h_subcarr_Htranspose,1); /*矩阵相乘:Hi*Hi*/ P_Matrix_Multiply(matrixA, h_subcarr_Htranspose,h_subcarr,h_eff_w,h_eff_w_d,matrix_a_w,matrix_a_w_d, eff_nt, eff_nt, nr); /* 求行列式对应的矩阵,即公式(2)中的矩阵,由于有效天线数为1的时候,要对计算得到的矩阵除以218,而有效天线数为4时,要除以220,所以此处将分根据有效天线数的不同,对(2)中矩阵的计算分开来处理,但是最终结果都是保存为(18,6)*/ if(eff_nt=1) for (i=0;ieff_nt;i+) for (j=0;jre,var_inverse);tmp2=Multiply(matrixA+i*eff_nt+j)-im,var_inverse);(matrixA+i*eff_nt+j)-re= AdjustFIX(tmp118,36,6,matrix_adjust2_a_w,matrix_adjust2_a_w_d);(matrixA+i*eff_nt+j)-im= AdjustFIX(tmp218,36,6,matrix_adjust2_a_w,matrix_adjust2_a_w_d); if (i=j) (matrixA+i*eff_nt+j)-re = (matrixA+i*eff_nt+j)-re + Tofixed(1,matrix_adjust2_a_w,matrix_adjust2_a_w_d); else if(eff_nt=4) for (i=0;ieff_nt;i+) for (j=0;jre,var_inverse);tmp2=Multiply(matrixA+i*eff_nt+j)-im,var_inverse);(matrixA+i*eff_nt+j)-re= AdjustFIX(tmp120,36,6,matrix_adjust2_a_w,matrix_adjust2_a_w_d);(matrixA+i*eff_nt+j)-im= AdjustFIX(tmp220,36,6,matrix_adjust2_a_w,matrix_adjust2_a_w_d); if (i=j) (matrixA+i*eff_nt+j)-re = (matrixA+i*eff_nt+j)-re + Tofixed(1,matrix_adjust2_a_w,matrix_adjust2_a_w_d); /* 求行列式*/ det = P_Matrix_Determinant(matrixA, eff_nt,matrix_adjust2_a_w,matrix_adjust2_a_w_d,det_w,det_w_d); if(det.re Tofixed(1,det_w,det_w_d) / calculation protection det.re = Tofixed(1,det_w,det_w_d); *temp_capa_fix=0;/* 查表法求对数*/LOG2FORFIX(tmp.re, det_w,det_w_d, temp_capa_fix, temp_capa_fix_w, temp_capa_fix_w_d);/* 计算得到的容量累积*/ capacitymimo_idx= Add(AdjustFIX(*temp_capa_fix,temp_capa_fix_w, temp_capa_fix_w_d,capacity_w,capacity_w_d),capacitymimo_idx); /* 选择最大容量的天线配置为系统下一帧的天线数*/ for (mimo_idx=0;mimo_idxtemp) temp = capacitymimo_idx; *mimo_indicator= mimo_idx; 2.3 各个子模块2.3.1 有效信道计算模块根据输入的mimo_index值来计算有效信道输入、输出参数位宽参见上一节。不管信道是几维的,4*4还是1*1,最终都将位宽调整为(18,8)。void P_eff_ch_cal(P_Complex *h_ch, int input_w,int input_w_d,int N, int mimo_index, P_Complex *h_eff,int h_eff_w,int h_eff_w_d, int *eff_nt,int nr) int nt_idx,nr_idx,k; P_Complex t1,t2;/*分别根据输入的mimo_index不同,对频域信道矩阵做不同处理*/ if (mimo_index=0) for (nt_idx=0;nt_idx4;nt_idx+) for (nr_idx=0;nr_idxnr;nr_idx+) for (k=0;kN;k+) h_effknr_idxnt_idx = AdjustPC(h_chknr_idxnt_idx,input_w, input_w_d,h_eff_w, h_eff_w_d); *eff_nt=4; /mimo_index为1时,0、1两根天线上的数据相加 else if (mimo_index=1) for (nr_idx=0;nr_idxnr;nr_idx+) for (k=0;kN;k+) h_effknr_idx0 = P_Complex_Add( h_chknr_idx0 , h_chknr_idx1 ); h_effknr_idx0 = AdjustPC(h_effknr_idx0,input_w+1,input_w_d,h_eff_w, h_eff_w_d); h_effknr_idx1 = AdjustPC(h_chknr_idx2,input_w,input_w_d,h_eff_w, h_eff_w_d); h_effknr_idx2 = AdjustPC(h_chknr_idx3,input_w,input_w_d,h_eff_w, h_eff_w_d); *eff_nt=3; /mimo_index为1时,0,1两根天线上的数据相加,2、3两根天线上的数据相加 else if (mimo_index=2) / mimo_index = 7 for (nr_idx=0;nr_idxnr;nr_idx+) for (k=0;kN;k+) h_effknr_idx0 = P_Complex_Add( h_chknr_idx0 , h_chknr_idx1 ); h_effknr_idx0 = AdjustPC(h_effknr_idx0,input_w+1,input_w_d,h_eff_w, h_eff_w_d); h_effknr_idx1 = P_Complex_Add( h_chknr_idx2 , h_chknr_idx3 ); h_effknr_idx1 = AdjustPC(h_effknr_idx1,input_w+1,input_w_d,h_eff_w, h_eff_w_d); *eff_nt=2; /mimo_index为1时,0,1, 2、3两根天线上的数据相加 else if (mimo_index=3) / mimo_index = 10 for (nr_idx=0;nr_idxnr;nr_idx+) for (k=0;kN;k+) t1 = P_Complex_Add( h_chknr_idx0 , h_chknr_idx1 ); t2 = P_Complex_Add( h_chknr_idx2 , h_chknr_idx3 ); h_effknr_idx0 = P_Complex_Add(t1, t2 ); h_effknr_idx0 = AdjustPC(h_effknr_idx0,input_w+2,input_w_d,h_eff_w, h_eff_w_d); *eff_nt=1; else printf(Wrong mimo_index in eff_ch_); return;2.3.2 矩阵相乘矩阵matrixB和矩阵matrixC相乘,并将结果保存在matrixA中变量名位宽说明matrixB(18,8)在调用的时候为信道矩阵HimatrixC(18,8)Hi的共轭转置matrixA(18,4)Hi*Hivoid P_Matrix_Multiply(P_Complex * matrixA, P_Complex * matrixB, P_Complex * matrixC, int input_w, int input_w_d, intmatrix_a_w, intmatrix_a_w_d, int row, int column, int same_parameter )/FILE* fptest=fopen(f:fix.txt,at+);int i,j,k;P_Complex * move_pointerA;const P_Complex * move_pointerB;const P_Complex * move_pointerC;memset(matrixA,0,sizeof(P_Complex)*row*column);for(i=0;irow;i+)move_pointerB=matrixB+i*same_parameter;for(j=0;jcolumn;j+)move_pointerA=matrixA+i*column+j;move_pointerC=matrixC+j;for(k=0;ksame_parameter;k+)*move_pointerA=P_Complex_Add(*move_pointerA,P_Complex_Multiply(*(move_pointerB+k),*(move_pointerC+k*column);*move_pointerA=AdjustPC(*move_pointerA,input_w*2+2,input_w_d*2,matrix_a_w,matrix_a_w_d);2.3.3 矩阵行列式行列式是用递归的方法来求,递归过程中所有中间结果位宽统一调整为(18,8)P_Complex P_Matrix_Determinant(P_Complex *matrix, int eff_nt, int input_w, int input_w_d, intdet_w, intdet_w_d)P_Complex *matrixA = matrix;P_Complex determinant;/根据有效信道数来确定矩阵的维数switch (eff_nt)case 1:determinant = AdjustPC(*matrixA,input_w,input_w_d,det_w,det_w_d);break;case 2:determinant = P_Matrix_Determinant_Two(matrixA,input_w,input_w_d,det_w,det_w_d);break;case 3:determinant = P_Matrix_Determinant_Three(matrixA, input_w,input_w_d,det_w,det_w_d);break;case 4:determinant = P_Matrix_Determinant_Four(matrixA, input_w,input_w_d,det_w,det_w_d);return determinant;/ N = column 二阶行列式,对角线相乘得到P_Complex P_Matrix_Determinant_Two(P_Complex * matrix, int input_w, int input_w_d, int det_w, int det_w_d)P_Complex determinant = 0,0;P_Complex temp1,temp2;temp1 = P_Complex_Multiply(*(matrix), *(matrix+3); temp2 = P_Complex_Multiply(*(matrix+1), *(matrix+2);determinant = P_Complex_Minus( temp1 , temp2 );/ 调整行列式位宽为啊(18,8)determinant = AdjustPC(determinant,input_w*2,input_w_d*2,det_w,det_w_d);return(determinant);/ N = column 三阶行列式,利用二阶行列数递归得到P_Complex P_Matrix_Determinant_Three(P_Complex *matrix, int input_w, int input_w_d, int det_w, int det_w_d)int i;int N=3;P_Complex tmp;P_Complex determinant = 0,0;P_Complex * matrix_part;matrix_part = (P_Complex*)malloc(N-1)*(N-1)*sizeof(P_Complex);for(i=0; iN; i+)/ 先求代数余子式P_Matrix_Part(matrix_part, matrix, N, N, 0, i);P_Scalar_Multiply2(matrix_part,input_w,input_w_d, N-1, N-1, i);/ 求得的代数余子式和元素相乘 tmp= P_Complex_Multiply(*(matrix+i), P_Matrix_Determinant_Two(matrix_part,input_w,input_w_d,det_w,det_w_d);tmp=AdjustPC(tmp,input_w+det_w,input_w_d+det_w_d,det_w,det_w_d);determinant = P_Complex_Add( determinant, tmp);/ 调整行列式位宽为啊(18,8)determinant = AdjustPC(determinant,det_w+2,det_w_d,det_w,det_w_d);free(matrix_part);return(determinant);/ N = column 四阶行列式,利用三阶行列数递归得到P_Complex P_Matrix_Determinant_Four(P_Complex *matrix, int input_w, int input_w_d, int det_w, int det_w_d)int i;int N=4;P_Complex tmp;P_Complex determinant = 0,0;P_Complex *matrix_part;matrix_part = (P_Complex *) malloc(N-1)*(N-1)*sizeof(P_Complex);for(i=0; iN; i+)/ 先求代数余子式P_Matrix_Part(matrix_part, matrix, N, N, 0, i);P_Scalar_Multiply2(matrix_part,input_w,input_w_d, N-1, N-1, i);/ 求得的代数余子式和元素相乘tmp= P_Complex_Multiply(*(matrix+i), P_Matrix_Determinant_Three(matrix_part, input_w,input_w_d,det_w,det_w_d);tmp=AdjustPC(tmp,input_w+det_w,input_w_d+det_w_d,det_w,det_w_d);determinant = P_Complex_Add( determinant, tmp);/ 调整位宽determinant = AdjustPC(determinant,det_w+2,det_w_d,det_w,det_w_d);free(matrix_part);return(determinant);2.3.4 查表法求对数算法由朱正航提供利用查表法求对数,表长为27+1=129,表可事先生成,生成以后保存起来,其中表中的数据位宽为(8,7),即小数位7位,生成函数如下:void LOG_TABLE_generate(FIX* log_table, int table_length)int i=0;for(i=0;itable_length;i+)log_tablei=Tofixed(log10(1+i*0.0078125)/log10(2),8,7);利用上面生成的表格,对输入的数据data_in进行查表,得到对数值。找到第一个“1”以后,其后7位数据有效,以该7位数据为地址直接索引表格对应的定点对数值,再和第一个“1”相对于小数点的位置值相加得到对数值。变量名位宽说明data_in(18,8)行列式值的实部Log_value(11,7)求得的对数值void LOG2FORFIX(FIX data_in, int input_w, int input_w_d, FIX* log_value, int log_value_w, int log_value_w_d)int i=0,j=0;char table_index=0;char location=input_w-input_w_d-1;FIX* log_table=(FIX*)malloc(sizeof(FIX)*129); /3bitsFIX tmp=Tofixed(256,input_w,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中扎染课件
- 2025年春季学校工作计划(蛇舞春雷启新程 育人为本奏华章)
- 高中公民政治课课件
- 高三正确使用词语课件
- 2025年资产证券化行业市场前景及投资研究报告
- 研发中心租赁合同附加研发设备及技术服务协议
- 品牌家居样板间租赁服务及维护合作协议
- 离婚户口迁移约定及子女抚养权转移服务合同
- 离婚户口迁移处理及财产分割及子女抚养权明确合同
- 广告媒体排期代理执行合同
- 2024年个人信用报告(个人简版)样本(带水印-可编辑)
- 机电设备安装材料采购流程及计划
- SYT 7653-2021 石油天然气钻采设备 耐蚀螺栓连接
- 一例CAG循证护理查房
- 安全生产投入台账(模板)
- 委托书办理压力容器使用登记证
- 幼儿园领域课程指导丛书:幼儿园美术领域教育精要关键经验与
- 粤绣行业发展前景分析报告
- 稀土知识讲座
- 河道堤防冲刷深度计算(新规范)
- 世界现代化理论
评论
0/150
提交评论