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

📄 dfe_main_3.m

📁 信号处理
💻 M
字号:
clc
clear
echo off
global cir_matrix_t
global N
global flag
flag = 1;    
snr_b = [1,5,10,15,20,35,30];
iter_num = 3;
N = 32;
snr = snr_b + 10*log10(2);


subCarrNum=64;    %number of ifft/fft point ,the subchannel numbers.
gama=16;          %length of polyphase filter
Nf=(2*gama-1);% Select FSE and DFE lengths
Nb=gama;

Prototype=ProtoFilter(subCarrNum,gama);
tPolyphase=reshape(Prototype,subCarrNum,gama);%polyphase:多相,gama多相滤波器的长度,subCarrNum为子载波个数, reshape:改变数组的配置 
mPolyphase=SubMatchFilter(tPolyphase,subCarrNum);
for p=1:subCarrNum
    subChannelMat(p,:)=conv(tPolyphase(p,:),mPolyphase(p,:));%conv:求两个多项式的乘积
end
for p=1:subCarrNum
    c(p,:)=subChannelMat(p,:)/norm(subChannelMat(p,:));%%%norm:矩阵或向量的范数
end

for snr_index=1:length(snr)
    errsnr(snr_index)=0;
   ber(snr_index)=0;
    lambda = power(10,-snr(snr_index)/20);
    
     erriter= 0;
    for iter =1:iter_num
      
        for p=1:subCarrNum
           
           
        bit_signal(p,:) = randint(1,N);
        modul_signal1(p,:) = mod_4PSK(bit_signal(p,:));
        end
         modul_signal=ifft(modul_signal1);

        
        for p=1:subCarrNum
          rx_sym(p,:) = Through_channel(c(p,:),modul_signal(p,:),N/2);
         rx_signal1(p,:) = awgn(rx_sym(p,:),snr(snr_index));
        end
         
        
        for p=1:subCarrNum
               equal_bit= [];
        equal_signal1(p,:) = equalizer(Nf,Nb,rx_signal1(p,:),lambda);
        end
  equal_signal=fft(equal_signal1);
  
        
        errp=0;
        for p=1:subCarrNum
          
               equal_bit= [];
        
            for k=1:N/2
                
                if real(equal_signal(p,k))>0.5
                equal_bit = [equal_bit 0 0];
                elseif real(equal_signal(p,k)<-0.5)
                equal_bit = [equal_bit 1 1];
                elseif imag(equal_signal(p,k))>0.5
                equal_bit = [equal_bit 1 0];
                else equal_bit = [equal_bit 0 1 ];
                end
            end
            errr(p) = sum(abs(equal_bit-bit_signal(p,:)));
           errp = errp+ errr(p);
        end   
        erriter=erriter+errp;
   
    end
   errsnr(snr_index)=erriter;
       errsnr1(snr_index)=errsnr(snr_index)/(N*iter_num*subCarrNum);
       ber(snr_index)= errsnr1(snr_index)
       snr_index
end
     semilogy(snr_b,ber,'*-')
hold on
grid on

⌨️ 快捷键说明

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