📄 smart_antenna2.m
字号:
% OFDM 建模
clear; % 清除内存/command窗口/图形窗口
SubCarNum=64;
OFDMSymbolNum=100;
SymbolNum=SubCarNum*OFDMSymbolNum;
snr=20;
NOISE_EN = 0; ZorM = 1; % 0:ZF=zero force 1:MMSE=最小均方误差
modsch='qask';M_ary=16; Power=5;
%噪声功率
snr_d = 10^(snr/10);
sigma=sqrt(Power/(2*snr_d));
% 信道延时
A=1;
B=[1 -0.25 0.1 -0.05 0.02]; % 延时扩展到第5个符号
symbol = zeros(SubCarNum,1); % OFDM符号
SYMBOL = zeros(SubCarNum,1); % OFDM符号 ==> ifft
rSYMBOL = zeros(SubCarNum,1); % H*SYMBOL + noise
rsymbol = zeros(SubCarNum,1); % eSYMBOL ==> fft
SYMBOL1 = zeros(SubCarNum,1); % OFDM符号 =X=> ifft
rSYMBOL1 = zeros(SubCarNum,1); % H*SYMBOL + noise
rsymbol1 = zeros(SubCarNum,1); % eSYMBOL =X=> fft
b = zeros(SymbolNum,1); % 发送数据
sig = zeros(SymbolNum,1); % 发送符号
rsig = zeros(SymbolNum,1); % 接收符号
rb = zeros(SymbolNum,1); % 接收数据
rsig1 = zeros(SymbolNum,1); % 接收符号
rb1 = zeros(SymbolNum,1); % 接收数据
b = randint(SymbolNum,1,M_ary); % 数据
sig = dmodce(b,1,1,modsch,M_ary); % 调制
%分组fft
for ii=1:SubCarNum:SymbolNum-1
for jj=1:1:SubCarNum % 分组
symbol(jj) = sig(ii+jj-1);
end
SYMBOL=ifft([symbol;conj(symbol(SubCarNum:-1:1))],2*SubCarNum)*sqrt(2*SubCarNum); % ifft
nr = normrnd(0,sigma,SubCarNum,1); % 噪声
ni = normrnd(0,sigma,SubCarNum,1);
noise(ii:ii-1+SubCarNum,1)=nr+i*ni;
rSYMBOL = filter(B,A,SYMBOL);
% rSYMBOL = H * SYMBOL;
if NOISE_EN == 1 % 使用噪声
rSYMBOL = rSYMBOL + [noise(ii:ii-1+SubCarNum); noise(ii:ii-1+SubCarNum)];
end
rsymbol = fft(rSYMBOL,SubCarNum*2)/sqrt(2*SubCarNum); % fft
rsymbol(SubCarNum+1:SubCarNum*2)=[];
rsig(ii:ii-1+SubCarNum) = rsymbol;
end
rb = ddemodce(rsig,1,1,modsch,M_ary); % 调制
rsig1=filter(B,A,sig);
if NOISE_EN==1
rsig1 = rsig1 + noise;
end
rb1 = ddemodce(rsig1,1,1,modsch,M_ary); % 调制
[errnum,errrat] = symerr(b,rb,'overall');
[errnum1,errrat1] = symerr(b,rb1,'overall');
OFDMerr_Normalerr=[errnum,errrat; errnum1,errrat1]
plot([1:SymbolNum],abs(rb-b),'o',[1:SymbolNum],abs(rb1-b),'*');grid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -