📄 ofdm_mod_eq.m
字号:
function [s_out] = ofdm_mod_eq( s_in )
%% ofdm 调制,带均衡
%% 输入:二进制序列
%% 输出:ofdm调制后符号
%global CP_len;
global nSubC
global ifft_len;
global symbolPerCarrier;
global bitPerSymbol;
global trainingSymbols;
global trainingSymbols_len;
global CP_len;
global carriers;
len = length(s_in);
SQam = reshape(s_in, nSubC,len/nSubC); %串并转换
PQam = Qam4_mod(SQam);
%% 添加训练序列 共 4*48 个,使用随机数作为训练序列
tmpTable = [-1,1,i,-i];
trainingSymbols_len = 10;
trainingSymbols = (tmpTable(floor( 4*rand(trainingSymbols_len,nSubC))+1 ))';
PQam = cat(2,zeros(nSubC,1),PQam);
PQam = cat(2,trainingSymbols,PQam);
% 64 个子载波安排,前后8个为留空,中间48 个为有效数据用
carriers = (1: nSubC) + (floor( ifft_len/4) - floor(nSubC/2)); % 坐标: (1 to 50) + 7 --> 8 to 57
conj_carriers = ifft_len - carriers + 2; % 坐标: 122 to 73
P_IFFT = zeros(ifft_len,1 + symbolPerCarrier + trainingSymbols_len); % 一个符号块,含4列训练序列,1列 0
P_IFFT(carriers,:) = PQam;
P_IFFT(conj_carriers,:)=conj(PQam) ; % 构造共轭矩阵,扩展为128点 ( RCC算法 ,ifft 后为实数 )
PCh = (ifft( P_IFFT ,ifft_len,1)); % 得到的数据全部为实数,实际上是虚部非常小,因此还要取实部
% 添加 CP
PCh2 = cat(1, PCh((ifft_len-CP_len+1):ifft_len,:), PCh);
s_out = reshape(PCh2, 1, (ifft_len+CP_len)*(symbolPerCarrier +trainingSymbols_len + 1)); %并串转换
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -