clc;
clear all ;
close all;
global N_IFFT;
global N_sc;
N_IFFT=128;%IFFT点数
N_sc=256;%有效数据的子载波数
BitperSymbol=4;%每符号的比特数
DataSymlength=512;%传输的符号数
Data_Bitlength=DataSymlength*N_sc*BitperSymbol;
N_cp=32;%循环前缀的个数
%% 产生数据信号 ------------(X_Data,Y_Data)
% X_BitSource=PRBS_Generator(Data_Bitlength,15,1);
% Y_BitSource=PRBS_Generator(Data_Bitlength,13,4);
X_BitSource=round(rand(1,DataSymlength*BitperSymbol*N_sc)); %524288
Y_BitSource=round(rand(1,DataSymlength*BitperSymbol*N_sc));
%% 串并变换
X_input=reshape(X_BitSource,N_sc,[]);
Y_input=reshape(Y_BitSource,N_sc,[]);
%% MQMAM调制
hI = modem.qammod('M',2^BitperSymbol, 'PhaseOffset', 0, 'SymbolOrder',...
'Binary', 'InputType', 'bit');
X_Data = modulate(hI,X_input);
Y_Data = modulate(hI,Y_input);
figure(1);
subplot(1,2,1);
plot(X_Data,'*r');title('X_Data after 16QAM');
subplot(1,2,2);
plot(Y_Data,'*b');title('Y_Data after 16QAM');
%% 矩阵调整
X1_zero=X_Data;
Y1_zero=Y_Data;
X1_zero_half=X1_zero(1:N_sc/8,:);
Y1_zero_half=Y1_zero(1:N_sc/8,:);
for k=1:N_sc/16
X1_zero_half(2*k-1,1:DataSymlength*BitperSymbol)=zeros(1,DataSymlength*BitperSymbol);
Y1_zero_half(2*k-1,1:DataSymlength*BitperSymbol)=zeros(1,DataSymlength*BitperSymbol);
end
%% Hermitian对称
X1_zero_j=conj(X1_zero_half);
Y1_zero_j=conj(Y1_zero_half);
X1_zero_j_z=zeros(N_sc/8,DataSymlength*BitperSymbol);
Y1_zero_j_z=zeros(N_sc/8,DataSymlength*BitperSymbol);
for i = 1:N_sc/16
for k=(N_sc/16+1)-i
X1_zero_j_z(2*i,1:DataSymlength*BitperSymbol) = X1_zero_j(2*k,1:DataSymlength*BitperSymbol);
Y1_zero_j_z(2*i,1:DataSymlength*BitperSymbol) = Y1_zero_j(2*k,1:DataSymlength*BitperSymbol);
end
end
X1_zero = vertcat(X1_zero_half,X1_zero_j_z);
Y1_zero = vertcat(Y1_zero_half,Y1_zero_j_z);
%% ifft变换
X1_ifft_output=ifft(X1_zero);
Y1_ifft_output=ifft(Y1_zero);
%% 零值处限幅
X1_ifft_output_x=X1_ifft_output;
Y1_ifft_output_x=Y1_ifft_output;
X1_ifft_output_x(find(X1_ifft_output<0))=0;
Y1_ifft_output_x(find(Y1_ifft_output<0))=0;
figure(2);
subplot(2,2,1);
stem(X1_ifft_output,'r.');title('X1 befor clip');
subplot(2,2,3);
stem(X1_ifft_output_x,'r.');title('X1 after clip');
subplot(2,2,2);
stem(Y1_ifft_output,'b.');title('Y1 befor clip');
subplot(2,2,4);
stem(Y1_ifft_output_x,'b.');title('Y1 after clip');
%% 加cp
%头部加cp
X1_cp=vertcat(X1_ifft_output_x(((end-N_cp+1):end),:),X1_ifft_output_x);
Y1_cp=vertcat(Y1_ifft_output_x(((end-N_cp+1):end),:),Y1_ifft_output_x);
figure(3);
subplot(2,2,1);
stem(X1_cp,'r');title('X1 with CP');
subplot(2,2,3);
stem(X1_ifft_output_x,'r');title('X1 without CP');
subplot(2,2,2);
stem(Y1_cp,'b');title('Y1 with CP');
subplot(2,2,4);
stem(Y1_ifft_output_x,'b');title('Y1 without CP');
%首尾加cp
% X_cp=vertcat( X_ifft_output( ((end-N_cp/2+1):end) , : ), X_ifft_output, X_ifft_output( (1:N_cp/2) , : ) );
% Y_cp=vertcat( Y_ifft_output( ((end-N_cp/2+1):end) , : ), Y_ifft_output, Y_ifft_output( (1:N_cp/2) , : ) );
%% 并串变换
X1_OFDMSymbol=reshape(X1_cp.',[],1).';
Y4_OFDMSymbol=reshape(Y1_cp.',[],1).';
%% 高斯白噪声信道
%RX1=awgn(X1_OFDMSymbol,20);
%RY1=awgn(Y4_OFDMSymbol,20);
%% 串并变换
RX1_para=reshape(X1_OFDMSymbol,[],N_sc/4+N_cp).';
RY1_para=reshape(Y4_OFDMSymbol,[],N_sc/4+N_cp).';
%% 去掉CP
RX1_cutCP=RX1_para(N_cp+1:N_cp+N_sc/4, : );
RY1_cutCP=RY1_para( N_cp+1:N_cp+N_sc/4, : );
%% FFT运算
RX1_QAMSymbol=fft(RX1_cutCP);
RY1_QAMSymbol=fft(RY1_cutCP);
%% 逆限幅
RX1_QAMSymbol_2=2*RX1_QAMSymbol;
RY1_QAMSymbol_2=2*RY1_QAMSymbol;
RX1_QAMSymbol_2_z=RX1_QAMSymbol_2;
RY1_QAMSymbol_2_z=RY1_QAMSymbol_2;
for i=1:32;
RX1_QAMSymbol_2_z((2*i)-1,:)=X_Data((2*i)-1,:);
RY1_QAMSymbol_2_z((2*i)-1,:)=Y_Data((2*i)-1,:);
end
figure(4);
subplot(1,2,1)
plot(RX1_QAMSymbol_2_z,'r.');title('RX1 after FFT');
subplot(1,2,2)
plot(RY1_QAMSymbol_2_z,'b.');title('RY1 after FFT');
%% 解码
DX1_Bit=QAM_decoder(RX1_QAMSymbol_2_z,BitperSymbol);
DY1_Bit=QAM_decoder(RY1_QAMSymbol_2_z,BitperSymbol);
%% 并串变换
DX1_Bit_chuan=reshape(DX1_Bit.',1,[]);
DY1_Bit_chuan=reshape(DY1_Bit.',1,[]);
%% BER计算
X_input_ceshi=X_input(1:128,:);
Y_input_ceshi=Y_input(1:128,:);
DX1_Bit_ceshi=DX1_Bit(1:128,:);
DY1_Bit_ceshi=DY1_Bit(1:128,:);
start_bit=BitperSymbol*N_sc*0+1;
last_bit=BitperSymbol*DataSymlength*N_sc/8;
X1_BER=BER_Compution(DX1_Bit_ceshi(start_bit:last_bit),X_input_ceshi(start_bit:last_bit));
Y1_BER=BER_Compution(DY1_Bit_ceshi(start_bit:last_bit),Y_input_ceshi(start_bit:last_bit));
disp([' ']);
disp(['=========>> X1_BER=',num2str(X1_BER),'; Y1_BER=',num2str(Y1_BER)]);
disp([' BER=',num2str(( X1_BER + Y1_BER)/2)]);
disp('_______________________________________');
没有合适的资源?快使用搜索试试~ 我知道了~
非对称限幅正交频分复用matlab实现
共4个文件
m:4个
1星 需积分: 23 22 下载量 16 浏览量
2018-05-15
00:21:06
上传
评论 5
收藏 3KB ZIP 举报
温馨提示
此文件是matlab实现的ACO-OFDM系统仿真,发送端为产生发送数据QAM调制埃尔米特对称ifft运算添加CP,通过高斯白噪声信道,接收端为逆过程,最后运算误码率来衡量信道传输信号能力
资源推荐
资源详情
资源评论
收起资源包目录
ACO-OFDM_代码.zip (4个子文件)
ACO-OFDM 代码
my_ACO_OFDM.m 5KB
BER_Compution.m 245B
QAMdecision.m 270B
QAM_decoder.m 263B
共 4 条
- 1
资源评论
- ww1354892021-02-028行。直接没有加AWGN的过程
*BoyfriendEric
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功