⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm.m

📁 % OFDM系统的发送
💻 M
字号:
% OFDM系统的发送,通过多径衰落信道,接收,判决
% 信道使用jakes模型。
% 时间色散系数我使用[0.9, 0.8 , ....., ],你们自己去修改。
% 块数,点数之类系数自己修改到满意

clear all;
clc;
close all;

%%%%%%%%%%%%%%%%%%%%%%%
% OFDM参数 
blocks=10; % OFDM 块数
BN=128;% OFDM 块点数
CN=6;% 循环前缀点数...必须大于等于信道多径数目
DN=BN*blocks;%数据点数

%%%%%%%%%%%%%%%%%%%%%%
% 产生发送信号  8 PSK
% 调制信号
M=8;  % PSK 调制水平
for m=1:M
    psk(m)=cos((m-1)*2*pi/M)+sqrt(-1)*sin((m-1)*2*pi/M);%  PSK序列
end
psk=psk/norm(psk)*sqrt(length(psk));% 归一化
psk_delta=abs((psk(2)-psk(1))/2);
for k=1:DN
   uu(k)=rand(1);
    for m=1:M
        if m/M>=uu(k) & uu(k)>(m-1)/M
            s(k)=psk(m);%  发送的PSK序列
        end
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%
% 信道参数

% 生成信道参数, 参考 jakes.m
internal=BN+CN; %每2个信道抽样点的信道距离点数    % 信道抽样间隔
Datalen=blocks * internal;
fm=100;
fs=25e3;
startp=0;
No=9;
L=5;%多径数目

[h] =jakes(Datalen,L,fm,fs,No,startp);% 生成信道

h_fade=0.1*[9:-1:1]; % 时间色散系数
h_fade=h_fade(1:L);% 实际有多种衰落。。。比如指数衰落。。可以参考 COST207 模型

for k=1:L
    h(k,:)=h(k,:) * h_fade(k);
end


% sample the channel
internal=BN+CN; %每2个信道抽样点的信道距离点数    % 信道抽样间隔
shL=[]; % 信道抽样
for k=1:Datalen
    if(mod(k,internal)==0)
        shL=[shL h(:,k)];                   % 抽样信道
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 接收信号:频域接收信号ifft变化到时域加上噪声

H=zeros(1,BN);
for k=1:blocks
    for kk=1:BN
        H(kk)=0;
        for i=1:L
            H(kk)=H(kk)+ shL(i,k) * exp(-j*2*pi*(kk-1)*(i-1)/BN);% 每一块的信道传输函数
        end
        R((k-1)*BN+1:k*BN)=s((k-1)*BN+1:k*BN).*H; % 接收频域信号
    end
end

% 加上噪声
SNR=20; % 20 dB
nsr=sqrt( 10.^(-SNR/10) );% 噪声方差

for k=1:blocks
    r((k-1)*BN+1:k*BN)=ifft( R((k-1)*BN+1:k*BN) ); % 频域接收信号ifft变化得到时域接收信号
end
r_power=sum(abs(r).^2)/(DN); % 时域接收信号的平均功率
gsn=randn(1,DN)+sqrt(-1)*randn(1,DN); % 噪声
rw=r + nsr*sqrt(r_power)./sqrt(2); % 加上噪声后的时域接收信号 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 频域解调
for k=1:blocks
    RW((k-1)*BN+1:k*BN)=fft( rw((k-1)*BN+1:k*BN) );  % 加上噪声后的频域接收信号
end

H=zeros(1,BN);
for k=1:blocks
    for kk=1:BN
        H(kk)=0;
        for i=1:L
            H(kk)=H(kk)+ shL(i,k) * exp(-j*2*pi*(kk-1)*(i-1)/BN);% 每一块的信道传输函数
        end
        d((k-1)*BN+1:k*BN)=RW((k-1)*BN+1:k*BN)./H; % 接收端噪声污染后的发送信号
    end
end

ber=sum(abs(s-d)>0.1)./DN; % BER : 误判概率

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -