1.軟體版本
MATLAB2013b
2.本算法理論知識
可見光通信,2篇比較好的論文:
http://wenku.baidu.com/view/3c077736a32d7375a4178022.html
http://www.docin.com/p-121488388.html
3.核心代碼
%OFDM transmitter and receiver for Visible light communication.
clc;
clear all;
close all;
warning off;
addpath 'func\'
%參數初始化
%the OFDM symbols
Nsc = 256;
%frame length
Lf = 10;
%發送資料
tx_data = func_seq('PRBS_15','PRBS',2e5);
%MQAM
M = 4;
%QAM objects
[mods,demods] = func_MQAM(Nsc,'M',M,'SymbolOrder','Gray');
SNR = [1:1:8];%高斯白噪聲
Ng = 0.1;
%training sequence
TS_level = [1,1];
%samples per symbol
Nfft = 8*Nsc;
%cyclic prefix length
Np = round(Ng*Nfft);
%發送前調制
y_Tx_mod = func_OFDM_modulator(tx_data,mods,Np,Lf,TS_level,Nfft);
for i = 1:length(SNR)
i
SNRs = SNR(i);
%可見光信道
y_Tx_bef = y_Tx_mod;
Fs = 40e9;
Ts = 1/Fs;
F_AWG = 1.25e9;
F_RF = 0e9;
AWG = upsample(y_Tx_bef,Fs/F_AWG);
n = (1:length(AWG))';
S_RF = AWG.*exp(1j*2*pi*F_RF*n*Ts); %
%LED信道
SNRdb = func_LED_channel();
y_Rx = func_decimate2(S_RF,Fs/F_AWG);
%最後加入白噪聲
y_Rx2 = awgn(y_Rx,SNRs+SNRdb,'measured');
%OFDM解調
[rx_data,Y] = func_OFDM_demodulator(y_Rx2,demods,Np,Lf,TS_level,Nfft);
[Nerr,BER] = func_error(rx_data,15,0);
Bers(i) = BER;
end
figure;
plot(Y(1:Nsc/2,:),'r.');
hold on;
plot(Y(Nsc/2+1:end,:),'b.');
title('Received constellation');
xlabel('I');
ylabel('Q');
grid on;
%計算誤碼率
figure;
semilogy(SNR,Bers,'b-o');
hold on;
xlabel('SNR');
ylabel('BER');
grid on;
legend('OFMD-4QAM');
axis([0,12,1e-5,1]);
4.操作步驟與仿真結論
最後仿真結果如下所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM4EDO0QjN2czNkJmNjNDNzYzXzEjNxUTMwEzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
這個是最後接收後的星座圖,這裡我們使用的OFDM-4QAM的調制方法,是以最後可以看到四個星座點。
這個是誤碼率曲線,從上面的仿真結果可知,當SNR=8的時候,誤碼率在10-4左右。
5.參考文獻