資源簡介
1、首先,Matlab產生16QAM映射方式的OFDM符號,然后在產生ACO-OFDM信號。
2、在每個ACO-OFDM符號前添加循環前綴,然后編寫ACO-OFDM信號發送接收程序。
3、信道使用高斯白噪聲(AWGN)信道。
4、Matlab繪出時域ACO-OFDM信號,均衡后的接收信號的星座圖。

代碼片段和文件信息
%E:\大學課件&科學瀏覽器\大三下\光纖通信\光纖實驗\ACO?OFDM
clc;
clear?all?;
global?N_IFFT;
global?N_sc;
N_IFFT=64;%IFFT點數
N_sc=128;%有效數據的子載波數
BitperSymbol=4;%每符號的比特數
DataSymlength=256;%傳輸的符號數
%?Data_Bitlength=DataSymlength*N_sc*BitperSymbol;
N_cp=16;%循環前綴的個數
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?
%產生數據信號(X_DataY_Data),round四舍五入取整
X_BitSource=round(rand(1DataSymlength*BitperSymbol*N_sc));??%131072
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?
%串并變換,每一行是一個子載波
X_input=reshape(X_BitSourceN_sc[]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%M-QAM調制??
%SymbolOrder?=?Binary時
%0??4??8??12
%1??5??9??13
%2??6??10?14
%3??7??11?15
hI?=?modem.qammod(‘M‘2^BitperSymbol?‘PhaseOffset‘?0?‘SymbolOrder‘‘Binary‘?‘InputType‘?‘bit‘);
X_Data?=?modulate(hIX_input);
figure(1);
plot(X_Data‘*r‘);title(‘16QAM調制后的X-Data‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%矩陣調整
X1_zero=X_Data;
X1_zero_half=X1_zero(1:N_sc/8:);???%X路數據的一半
%奇數子載波上數據置0
for?k=1:N_sc/2^BitperSymbol
???X1_zero_half(2*k-11:DataSymlength*BitperSymbol)=zeros(1DataSymlength*BitperSymbol);
end????
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Hermitian對稱關于第17行共軛對稱
X1_zero_j=conj(X1_zero_half);???%求共軛
%初始化后半段信號
X1_zero_j_z=zeros(N_sc/8DataSymlength*BitperSymbol);
for?i?=?1:N_sc/16
????k=(N_sc/16+1)-i;
????????X1_zero_j_z(2*i1:DataSymlength*BitperSymbol)?=?X1_zero_j(2*k1:DataSymlength*BitperSymbol);
end??
X1_zero?=?vertcat(X1_zero_halfX1_zero_j_z);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ifft變換,結果為實數
X1_ifft_output=ifft(X1_zero);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%零值處限幅,小于0的置0
X1_ifft_output_x=X1_ifft_output;
X1_ifft_output_x(find(X1_ifft_output<0))=0;
figure(2);
subplot(211);
stem(X1_ifft_output‘r.‘);title(‘限幅前X1‘);
subplot(212);
stem(X1_ifft_output_x‘r.‘);title(‘限幅后X1‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加cp
%頭部加cp
X1_cp=vertcat(X1_ifft_output_x(((end-N_cp+1):end):)X1_ifft_output_x);
figure(3);
subplot(211);
stem(X1_cp‘r‘);title(‘X1?with?CP‘);
subplot(212);
stem(X1_ifft_output_x‘r‘);title(‘X1?without?CP‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%并串變換
X1_OFDMSymbol=reshape(X1_cp.‘[]1).‘;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%高斯白噪聲信道
RX1=awgn(X1_OFDMSymbol30);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%串并變換,加了16行的CP
RX1_para=reshape(RX1[]N_sc/4+N_cp).‘;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%去掉CP,去掉前16行,剩下的是數據
RX1_cutCP=RX1_para(N_cp+1:N_cp+N_sc/4?:?);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%FFT運算
RX1_QAMSymbol=fft(RX1_cutCP);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%逆限幅
RX1_QAMSymbol_2=2*RX1_QAMSymbol;
RX1_QAMSymbol_2_z=RX1_QAMSymbol_2;
for?i=1:16;
????RX1_QAMSymbol_2_z((2*i)-1:)=X_Data((2*i)-1:);?%奇數位恢復
end
figure(4);
plot(RX1_QAMSymbol_2_z‘r.‘);title(‘FFT后RX1‘);
axis([-4?4?-4?4]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%?%解碼
%?DX1_Bit=zeros(N_scDataSymlength*BitperSymbol);
%?
%?for?i=1:32
%?????for?j=1:1024
%?????????if?real(RX1_QAMSymbol_2_z(ij))?>?2?&&?imag(RX1_QAMSymbol_2_z(ij))?>?2?%11
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4472??2018-06-05?15:07??ACO_OFDM.m
-----------?---------??----------?-----??----
?????????????????4472????????????????????1
評論
共有 條評論