当前位置:首页 > OFDM_matlab源程序总结
elseif seq_num==2
fbconnection=[1 0 0 0 0 0 1];
QPSKdata_pn=[m_sequence(fbconnection),0]; QPSKdata_pn=qpsk(QPSKdata_pn); end
countmod=0; for k=1:128
if seq_num==1
if mod(k-1,16)==0 %生成16位循环的短训练符号 countmod=countmod+1;
trainsp_temp(k)=QPSKdata_pn(countmod); else
trainsp_temp(k)=0; end
elseif seq_num==2 if mod(k-1,2)==0
countmod=countmod+1;
trainsp_temp(k)=QPSKdata_pn(countmod); else
trainsp_temp(k)=0; end end end
dout=trainsp_temp;
% ************************end of file***********************************
%************************beginning of file***************************** %m_sequence.m
%用线性移位寄存器产生m序列
function [mseq]= m_sequence(fbconnection);
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % fbconnection 线性移位寄存器的系数 % mseq 生成的m序列
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
n = length(fbconnection); N = 2^n-1;
register = [zeros(1,n - 1) 1];%定义移位寄存器的初始状态 mseq(1)= register(n);
for i = 2:N
newregister(1)= mod(sum(fbconnection.*register),2); for j = 2:n,
newregister(j)= register(j-1); end;
register = newregister; mseq(i) = register(n); end
% ************************end of file**********************************
%************************beginning of file***************************** %nyquistimp_PS.m
%使用改进的Nyquist脉冲实现OFDM信号的PAPR抑制 function dout=nyquistimp_PS()
%改进的Nyquist脉冲整形方法能够显著改善OFDM信 %号的PAPR分布;该方法实现简单,和PTS和SLM相比 %不需迭代计算多个IFFT操作,不需传送边带信息, %不会引起信号的畸变;通用性强,可以调整滚降 %系数以适应任何子载波数的通信系统。当然, %Nyquist脉冲成形的方法由于扩展了频谱,一定程 % 度上降低了频谱利用率。
%creat a matrix to shape the subcarries. %the spectrum of the pulse is as follows: % if abs(f)<=Bw*(1-b) % spec=1;
% else if (abs(f)>Bw*(1-b))&(abs(f)<=Bw) % spec=exp(aa.*(Bw.*(1-b)-abs(f)));
% else if (abs(f)>Bw)&(abs(f)
N=106; L=11; b=0.22;
% N=84; % L=22;
% b=0.5;
% N=98; % L=15; % b=0.3;
% N=116; % L=6; % b=0.1;
T=0.004; Ts=T/N; Bw=1/Ts;
begin=-Bw*(1+b)+Bw*(1+b)/128; finish=Bw*(1+b)-Bw*(1+b)/128; distance=Bw*(1+b)/64; kk=0;
aa=log(2)/(b.*Bw);
for f=begin:distance:finish kk=kk+1;
if abs(f)<=Bw*(1-b) spec=1;
else if (abs(f)>Bw*(1-b))&(abs(f)<=Bw) spec=exp(aa.*(Bw.*(1-b)-abs(f)));
else if (abs(f)>Bw)&(abs(f)
C(kk)=spec; end
for m=0:N-1
for k=0:(N+2*L-1)
p(m+1,k+1)=C(k+1)*exp(-i*2*pi.*m.*(k-L)./N); end end
dout=p;
% ************************end of file***********************************
%************************beginning of file***************************** ?t_my.m
%实现N点FFT运算
function dout=fft_my(din)
%本程序对输入序列din实现DIT——FFT基2算法,点数取大于等于din长度的2的幂次
%+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % dout 输出数据
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
m=nextpow2(din) ; N=2^m ;
if length(din) din=[din,zeros(1,N-length(din))]; end nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1; y=din(nxd); for mm=1:m Nmr=2^mm; u=1; WN=exp(-i*2*pi/Nmr); for j=1:Nmr/2 for k=j:Nmr:N kp=k+Nmr/2; t=y(kp)*u; y(kp)=y(k)-t; y(k)=y(k)+t; end u=u*WN; end end dout=y; % ************************end of file********************************** %************************beginning of file***************************** -d_GI_upsample.m %加循环前后缀和升采样程序
共分享92篇相关文档