?? data_generator.m
字號:
%測試文件,一次性生成數個data symbol,按標準方法調制,組裝成待發送信號
%目的是快捷地調試解調模塊,尤其是sync的部分
%原先worked的一組數據s_1 s_2 s_3,原封不動地保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 定義參數 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n_data=4; %本程序產生的數據symbol個數
Tu=2048; %for MODE I
delta=504; %Guard interval
Ts=2552; %toatal length of a symbol
k=1536; %number of carriers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信號發生器,生成的數放在mass_prj里,注意,這也是以用來和解調結果比較的源信號 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mass_prj=binornd(1,0.5,[n_data,k*2]); %參數為0.5的二項分布偽隨機數
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% QPSK mapping,結果放在QPSK_map里 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%由于自然進化了行列操作,比原先的程序簡單許多,運行效率也更高
QPSK_map=(1/(2^0.5))*((1-(mass_prj(:,1:k)*2))+i*(1-(mass_prj(:,k+1:2*k)*2)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Frequency interleaving,結果放在Freq_inter里 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%matrix_k是頻率插值正變換矩陣,取自328目錄下的interleaver.m
Freq_inter=QPSK_map*matrix_k;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Differentiation,結果放在Diff_mo里 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%注意,此段程序以前并未編寫過
%用了累計積cumprod,使程序更簡單
Diff_mo=[];
for i_nk=1:k
Diff_mo=[Diff_mo,cumprod(Freq_inter(:,i_nk))];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% OFDM Modulation,結果放在OFDM_mo里 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%OFDM調制器輸入端,1536個信號點,前768個和后768個互換位置
%再補上512個0,湊足2048個點,存為OFDM_in
OFDM_in=[Diff_mo(:,k/2+1:k),zeros(n_data,512),Diff_mo(:,1:k/2)];
%每行分別進行2048點的IFFT變換,結果仍是同維的復數矩陣
%當參數x是一個矩陣時,ifft(x)會對x的每一列分別進行ifft計算,而我需要的是每行分別
%進行ifft,因此采用了先轉置,再轉置回來的方法,注意 .'表示只轉置而不求共軛
OFDM_out=(ifft(OFDM_in.')).';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 給OFDM_mo里面的數加上guard interval,成為OFDM_guard %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OFDM_guard=[OFDM_out(:,1545:2048),OFDM_out];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 創造一幀數據,放在frame_1里 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
frame_1=[null,PRS];
for i_frame_1=1:n_data
frame_1=[frame_1,OFDM_guard(i_frame_1,:)];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 原始數據和待發送數據幀的存儲 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
save('imp data.mat','mass_prj','frame_1');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -