当前位置:首页 > OFDM matlab源程序
%到符号尾部,将每个OFDM符号的后32个数据放到符号头部, %升采样是通过中间插零的方式实现
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % upsample 升采样倍数 % dout 输出数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
data_buf=[din(225:256),din,din(1:32)];
temp(1,:)=data_buf;
temp(2:upsample,:)=zeros(upsample-1,length(data_buf)); dout_temp=reshape(temp,1,length(data_buf)*upsample); dout=dout_temp(1:end);
% ************************end of file*********************************
%************************beginning of file***************************** %cic_inter.m
%发射机的CIC滤波器设计 function dout=cic_inter(din,r)
%插值CIC滤波器通过复制样值实现升采样
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据
% r 升采样的插值因子 % dout 输出数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
din_1d=[0,din];
diff1=[din,0]-din_1d;
diff1_1d=[0,diff1(1:end-1)];
diff2=[diff1(1:end-1),0]-diff1_1d; for i=1:r
temp1(i,:)=diff2(1:end-1); end
temp2=reshape(temp1,1,length(diff2(1:end-1))*r); data_int=temp2;
for i=1:length(data_int)
int1(i)=sum(data_int(1:i)); int2(i)=sum(int1(1:i)); end
dout=int2;
%************************end of file**********************************
%************************beginning of file***************************** %up_convert_ofdm.m
%用DDS的方式实现上变频
function dout=up_convert_ofdm(fwc_up,dini,dinq)
%fwc_up是上变频处的频率控制字,每个控制字对应一个载波频率 %count_dds_up是用于查找存储表的整数值,
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % fwc_down 上变频处的频率控制字 % dini 输入数据的实部 % dinq 输入数据的虚部 % dout 输出数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
global seq_num global count_dds_up
for mk=1:length(dini)
if (seq_num==1) & (mk==1) count_dds_up=0; else
count_dds_up=count_dds_up+fwc_up; if count_dds_up>=128
count_dds_up=count_dds_up-128; end end
[up_sin,up_cos]=ram_sin(count_dds_up); up_sin_t(mk)=up_sin; up_cos_t(mk)=up_cos; end
for xl=1:length(dini)
DUCdata(xl)=dini(xl)*up_cos_t(xl)-dinq(xl)*up_sin_t(xl); end
dout=DUCdata;
% ************************end of file***********************************
%************************beginning of file***************************** %ram_sin.m
%构造用于DDS的查找表
function [ysin,ycos]=ram_sin(adr) Ys方式需要的sin表 %ram_sin为寄存器名称
-r为输入地址,y为读出数据
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % adr 输入地址 % ysin 输出的正弦值 % ycos 输出的余弦值
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
anl_inc=2*pi/128; for n=1:128
data_sin(n)=sin((n-1)*anl_inc); data_cos(n)=cos((n-1)*anl_inc); end
ysin=data_sin(adr+1); ycos=data_cos(adr+1);
% ************************end of file***********************************
%************************beginning of file***************************** %guiyi_DUCdata.m
function [dataout,datamax]=guiyi_DUCdata(datain)
%实现数据的归一化
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % datain 输入数据 % dataout 输出数据
% datamax 输入数据中的最大值
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
datamax=max(abs(datain)); dataout=datain./datamax;
% ************************end of file**********************************
%************************beginning of file***************************** %down_convert_ofdm.m
function [douti,doutq]=down_convert_ofdm(fwc_down,din) %用DDS的方式实现下变频
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % fwc_down 下变频处的频率控制字 % din 输入数据
% douti 输出数据的实部 % doutq 输出数据的虚部
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
global seq_num global count_dds_down
global count_dds_down_tmp
for mkd=1:length(din)
if (seq_num==1) & (mkd==1) count_dds_down=0;
count_dds_down_tmp=0; else
count_dds_down=round(count_dds_down_tmp+fwc_down); count_dds_down_tmp=count_dds_down_tmp+fwc_down; if count_dds_down>=128
count_dds_down=count_dds_down-128;
count_dds_down_tmp=count_dds_down_tmp-128; end end
[up_sin_d,up_cos_d]=ram_sin(count_dds_down); up_sin_td(mkd)=up_sin_d; up_cos_td(mkd)=up_cos_d;
DDCdatai(mkd)=din(mkd)*up_cos_td(mkd); DDCdataq(mkd)=-din(mkd)*up_sin_td(mkd); end
douti=DDCdatai; doutq=DDCdataq;
% ************************end of file**********************************
%************************beginning of file***************************** %cic_deci.m
%接收机的CIC滤波器设计 function dout=cic_deci(din,r,init)
%抽取CIC滤波器通过降采样实现
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++
共分享92篇相关文档