MATLAB OFDM卷积编码程序及代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%bin22deci.m
function y=bin22deci(x)
%将二进制数转化为十进制数
t=size(x,2);
y=(t-1:-1:0);
y=2.^y;
y=x*y';
%************************end of file***********************************
%comb.m
%AWGN加噪声程序
function[iout,qout]=comb(idata,qdata,attn)
%******************variables*************************
%idata:输入I信道数据
%qdata:输入Q信道数据
%iout输出I信道数据
%qout输出Q信道数据
%attn:由信噪比导致的衰减系数
%******************************************************
iout=randn(1,length(idata)).*attn;
qout=randn(1,length(qdata)).*attn;
iout=iout+idata(1:length(idata));
qout=qout+qdata(1:length(qdata));
%************************end of file***********************************
%crdemapping.m
%数据逆映射载波程序
function[iout,qout]=crdemapping(idata,qdata,fftlen,nd);
%******************variables*************************
%idata:输入I信道的数据
%qdata:输入Q信道的数据
%iout:输出I信道的数据
%qout:输出Q信道的数据
%fftlen:FFT的长度
%nd:OFDM符号数
%*****************************************************
iout(1:26,:)=idata(2:27,:);
qout(1:26,:)=qdata(2:27,:);
iout(27:52,:)=idata(39:64,:);
qout(27:52,:)=qdata(39:64,:);
%********************end of file***************************
%crmapping.m
%数据映射载波程序
function[iout,qout]=crmapping(idata,qdata,fftlen,nd);
%******************variables*************************
%idata:输入I信道的数据
%qdata:输入Q信道的数据
%iout:输出I信道的数据
%qout:输出Q信道的数据
%fftlen:FFT的长度
%nd:OFDM符号数
%*****************************************************
iout=zeros(fftlen,nd);
qout=zeros(fftlen,nd);
iout(2:27,:)=idata(1:26,:);
qout(2:27,:)=qdata(1:26,:);
iout(39:64,:)=idata(27:52,:);
qout(39:64,:)=qdata(27:52,:);
%********************end of file***************************
%deci22bin.m
function y=deci22bin(x,t)
%十进制数x转化为二进制数,二进制数至少表示为t位
y=zeros(size(x,1),t);
for j=1:size(x,1)
i=1;
while x(j)>=0&i<=t
y(j,i)=rem(x(j),2);%x(j)为偶数时,y(j,i)为0;反之为1
x(j)=(x(j)-y(j,i))/2;
i=i+1;
end
y(j,:)=y(j,t:-1:1);%倒序排列
end
%************************end of file***********************************
%giins1.m
%插入保护间隔程序
function[iout,qout]=giins1(idata,qdata,fftlen,gilen,nd);
%******************变量*************************
%idata:输入I信道数据
%qdata:输入Q信道数据
%iout:输出I信道数据
%qout:输出Q信道数据
%fftlen:FFT长度(points)
%gilen:保护间隔长度(points)
%*****************************************************
idata1=reshape(idata,fftlen,nd);
qdata1=reshape(qdata,fftlen,nd);
idata2=[idata1(fftlen-gilen+1:fftlen,:);idata1];
qdata2=[qdata1(fftlen-gilen+1:fftlen,:);qdata1];
iout=reshape(idata2,1,(fftlen+gilen)*nd);
qout=reshape(qdata2,1,(fftlen+gilen)*nd);
%********************end of file***************************
%qpskdemod1.m
%QPSK解调程序
function[demodata]=qpskdemod1(idata,qdata,para,nd,ml)
%******************variables*************************
%idata:输入I信道数据
%qdata:数据Q信道数据
%demodata:解调后数据(para-by-nd matrix)
%para:并行信道数
%nd:符号数
%ml:调制数
%(QPSK->2 16QAM->4)
%*****************************************************
demodata=zeros(para,ml*nd);
demodata((1:para),(1:ml:ml*nd-1))=idata((1:para),(1:nd))>=0; demodata((1:para),(2:ml:ml*nd))=qdata((1:para),(1:nd))>=0;
%************************end of file***********************************
%qpskmod1.m
%QPSK调制程序
function[iout,qout]=qpskmod1(paradata,para,nd,ml)
%******************variables*************************
%paradata:输入数据
%iout:输出数据I
%qout:输出数据Q
%para:并行信道数
%nd:数据数
%ml:调制数
%(QPSK->2 16QAM->4)
%*****************************************************
m2=ml./2;
paradata2=paradata.*2-1;
count2=0;