求教高人MATLAB仿真OFDM系统 关于子载波的问题 15
以下是一段OFDM系统调制的开始部分clearall;closeall;carrier_count=200;%子载波数symbols_per_carrier=12;%每子...
以下是一段OFDM系统调制的开始部分
clear all;
close all;
carrier_count=200;%子载波数
symbols_per_carrier=12;%每子载波含符号数
bits_per_symbol=4;%每符号含比特数,16QAM调制
IFFT_bin_length=512;%FFT点数
PrefixRatio=1/4;%保护间隔与OFDM数据的比例 1/6~1/4
GI=PrefixRatio*IFFT_bin_length ;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length 即保护间隔长度为128
beta=1/32;%窗函数滚降系数
GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度20
SNR=15; %信噪比dB
%==================================================
%================信号产生===================================
baseband_out_length = carrier_count * symbols_per_carrier * bits_per_symbol;%所输入的比特数目
!!!carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_count/2));%共轭对称子载波映射 复数数据对应的IFFT点坐标
conjugate_carriers = IFFT_bin_length - carriers + 2;%共轭对称子载波映射 共轭复数对应的IFFT点坐标
rand( 'state',0);
baseband_out=round(rand(1,baseband_out_length));%输出待调制的二进制比特流
%==============16QAM调制====================================
complex_carrier_matrix=qam16(baseband_out);%列向量
complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%symbols_per_carrier*carrier_count 矩阵
figure(1);
plot(complex_carrier_matrix,'*r');%16QAM调制后星座图
axis([-4, 4, -4, 4]);
grid on
%=================IFFT===========================
IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT_bin_length IFFT 运算
IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号 ,子载波映射在此处
IFFT_modulation(:,conjugate_carriers ) = conj(complex_carrier_matrix);%共轭复数映射
其中15,16行和31,32行是关于子载波映射的部分,请问在IFFT_modulation 矩阵中为什么要加入共轭复数映射?另外该矩阵中的0的个数以及位置有什么讲究吗?
谢谢了。 展开
clear all;
close all;
carrier_count=200;%子载波数
symbols_per_carrier=12;%每子载波含符号数
bits_per_symbol=4;%每符号含比特数,16QAM调制
IFFT_bin_length=512;%FFT点数
PrefixRatio=1/4;%保护间隔与OFDM数据的比例 1/6~1/4
GI=PrefixRatio*IFFT_bin_length ;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length 即保护间隔长度为128
beta=1/32;%窗函数滚降系数
GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度20
SNR=15; %信噪比dB
%==================================================
%================信号产生===================================
baseband_out_length = carrier_count * symbols_per_carrier * bits_per_symbol;%所输入的比特数目
!!!carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_count/2));%共轭对称子载波映射 复数数据对应的IFFT点坐标
conjugate_carriers = IFFT_bin_length - carriers + 2;%共轭对称子载波映射 共轭复数对应的IFFT点坐标
rand( 'state',0);
baseband_out=round(rand(1,baseband_out_length));%输出待调制的二进制比特流
%==============16QAM调制====================================
complex_carrier_matrix=qam16(baseband_out);%列向量
complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%symbols_per_carrier*carrier_count 矩阵
figure(1);
plot(complex_carrier_matrix,'*r');%16QAM调制后星座图
axis([-4, 4, -4, 4]);
grid on
%=================IFFT===========================
IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT_bin_length IFFT 运算
IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号 ,子载波映射在此处
IFFT_modulation(:,conjugate_carriers ) = conj(complex_carrier_matrix);%共轭复数映射
其中15,16行和31,32行是关于子载波映射的部分,请问在IFFT_modulation 矩阵中为什么要加入共轭复数映射?另外该矩阵中的0的个数以及位置有什么讲究吗?
谢谢了。 展开
2个回答
2011-05-04
展开全部
matlab是要学习的,最起码你要会建立文件,会对其进行仿真。下面的程序可以直接复制到一个新的m文件中进行仿真。
clear;
clc;
SNR=10; % 信噪比
fl=128; % 设置FFT长度
Ns=6; %设置一个祯结构中OFDM信号的个数
para=128;%设置并行传输的子载波个数
sr=250000; %符号速率
br=sr.*2;% 每个子载波的比特率
gl=32 %保护时隙的长度
Signal=rand(1,para*Ns*2)>0.5;%产生0,1 随即序列,符号数为para*Ns*2
for i=1:para
for j=1:Ns*2
SigPara(i,j)=Signal(i*j);%串并变换
end
end
%QPSK调制,将数据分为两个通道
for j=1:Ns
ich(:,j)=SigPara(:,2*j-1);
qch(:,j)=SigPara(:,2*j);
end
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
x=ich1+qch1.*sqrt(-1); %频域数据变时域
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%插入保护间隔
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
%并串变换
ich4=reshape(ich3,1,(fl+gl)*Ns);
qch4=reshape(qch3,1,(fl+gl)*Ns);
%形成复数发射数据
TrData=ich4+qch4.*sqrt(-1);
%接收机
%加入高斯白噪声
ReData=awgn(TrData,SNR,'measured');
%接收端
%移去保护间隔
idata=real(ReData);
qdata=imag(ReData);
idata1=reshape(idata,fl+gl,Ns);
qdata1=reshape(qdata,fl+gl,Ns);
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
%FFT
Rex=idata2+qdata2*sqrt(-1);
ry=fft(Rex);
ReIChan=real(ry);
ReQChan=imag(ry);
ReIchan=ReIChan/kmod;
ReQchan=ReQChan/kmod;
%QPSK逆映射
for j=1:Ns
RePara(:,2*j-1)=ReIChan(:,j);
RePara(:,2*j)=ReQChan(:,j);
end
ReSig=reshape(RePara,1,para*Ns*2);
%符号抽样判决
ReSig=ReSig>0.5;
figure(1);
subplot(2,1,1),stem(ReSig(1:20)),grid minor;
title('resignal');
xlabel('x'),ylabel('y');
subplot(2,1,2),stem(Signal(1:20)),grid;
title('signal');
这是一个最基本的OFDM系统仿真,可以与OFDM系统框图对照理解,希望能帮到你。
另外,团IDC网上有许多产品团购,便宜有口碑
clear;
clc;
SNR=10; % 信噪比
fl=128; % 设置FFT长度
Ns=6; %设置一个祯结构中OFDM信号的个数
para=128;%设置并行传输的子载波个数
sr=250000; %符号速率
br=sr.*2;% 每个子载波的比特率
gl=32 %保护时隙的长度
Signal=rand(1,para*Ns*2)>0.5;%产生0,1 随即序列,符号数为para*Ns*2
for i=1:para
for j=1:Ns*2
SigPara(i,j)=Signal(i*j);%串并变换
end
end
%QPSK调制,将数据分为两个通道
for j=1:Ns
ich(:,j)=SigPara(:,2*j-1);
qch(:,j)=SigPara(:,2*j);
end
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
x=ich1+qch1.*sqrt(-1); %频域数据变时域
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%插入保护间隔
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
%并串变换
ich4=reshape(ich3,1,(fl+gl)*Ns);
qch4=reshape(qch3,1,(fl+gl)*Ns);
%形成复数发射数据
TrData=ich4+qch4.*sqrt(-1);
%接收机
%加入高斯白噪声
ReData=awgn(TrData,SNR,'measured');
%接收端
%移去保护间隔
idata=real(ReData);
qdata=imag(ReData);
idata1=reshape(idata,fl+gl,Ns);
qdata1=reshape(qdata,fl+gl,Ns);
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
%FFT
Rex=idata2+qdata2*sqrt(-1);
ry=fft(Rex);
ReIChan=real(ry);
ReQChan=imag(ry);
ReIchan=ReIChan/kmod;
ReQchan=ReQChan/kmod;
%QPSK逆映射
for j=1:Ns
RePara(:,2*j-1)=ReIChan(:,j);
RePara(:,2*j)=ReQChan(:,j);
end
ReSig=reshape(RePara,1,para*Ns*2);
%符号抽样判决
ReSig=ReSig>0.5;
figure(1);
subplot(2,1,1),stem(ReSig(1:20)),grid minor;
title('resignal');
xlabel('x'),ylabel('y');
subplot(2,1,2),stem(Signal(1:20)),grid;
title('signal');
这是一个最基本的OFDM系统仿真,可以与OFDM系统框图对照理解,希望能帮到你。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询