📄 ofdm_demod_eq.m
字号:
function [s_out] = ofdm_demod_eq(s_in)
%% ofdm 解调
%% 输入为二进制序列
global trainingSymbols;
global trainingSymbols_len;
global ifft_len;
global CP_len;
global bitPerSymbol;
global symbolPerCarrier;
global carriers;
global s_len
% 接收 ,进行串并转换
P_S = reshape(s_in, ifft_len+CP_len, symbolPerCarrier + trainingSymbols_len + 1);
%去CP
PDeCP = P_S(1+CP_len:ifft_len+CP_len,:);
% fft
P_FFT = fft(PDeCP,ifft_len,1);
P_FFT2 = P_FFT(carriers,:);
RxTrainSymbols = P_FFT2(:, (1: trainingSymbols_len));
%RxTrainSymbols = P_FFT2(:, (1: trainingSymbols_len,size(P_FFT2,2)-trainingSymbols_len+1:size(P_FFT2,2));
%信道均衡
% % 原理:寻求1/H,对FFT之后的数据进行频域补偿
% % 1/H = conj(H)/H^2 because H^2 = H * conj(H)
H = RxTrainSymbols./ trainingSymbols;
H_2 = H.^2;
H_2 = sum(H_2,2);
H_C2 = sum(H,2);
H_C2 = conj(H_C2);
H = H_C2./H_2 ; % 1/H = conj(H)/H^2
P_FFT3 = H*ones(1,size(P_FFT2,2)).*P_FFT2 ; %简单线性插值
P_FFT4 = P_FFT2(:,(trainingSymbols_len+2:size(P_FFT3,2)));
%% 画星座图
% figure(55);
% Tmp = reshape(P_FFT4,1,[]);
% plot(real(Tmp),imag(Tmp),'.');
% title('接收端星座图');axis([-3 3 -3 3]);
%
SQam = Qam4_demod(P_FFT4);
% 并串转换
s_out = reshape(SQam,1,s_len);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -