hlayumi的个人空间 https://blog.eetop.cn/hslogic [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

SC_FDE仿真平台:卷积编码 -> 矩阵交织 -> QPSK调制 -> 插入导频 -> 插入CP -> R ...

已有 6505 次阅读| 2021-12-13 03:00 |系统分类:芯片设计

SC_FDE仿真平台:卷积编码 -> 矩阵交织 -> QPSK调制 -> 插入导频 -> 插入CP -> RayleighFading->channel


%   主函数

%   调用各子函数,建立SC_FDE仿真平台

%   数据输入 -> 卷积编码 -> 矩阵交织 -> QPSK调制 -> 插入导频 -> 插入CP -> RayleighFading

%   channel -> AWGN channel -> 去除CP -> FDE -> QPSK解调 -> 矩阵去交织 -> Viterbi译码


 

%-------------------------------------------------------------------------%

%                         Clearing Workspace                              %

%-------------------------------------------------------------------------%

clear all;

clc;

close all;


%-------------------------------------------------------------------------%

%                        Seeting the parameters                           %

%-------------------------------------------------------------------------%

M = 5;                  %仿真运行的信噪比点数

FrameSize = 512;        %每帧信息比特的大小

FrameNum = 100;        %发送的数据帧数

interleave_table = interleav_matrix( ones(1,2*FrameSize) ); %产生交织码表

UW_Num = 64;            %独特字UW的大小

UW_Ge = UW_Generate( UW_Num );      %产生独特字序列

trel = poly2trellis( 7,[171 133] ); %产生trelis

tblen = 5*7;                        %Traceback depth

Ts = 1/480000;                      %输入Rayleigh channel的信号采样时间(s)

Fd = 4;                             %Rayleigh channel的最大多普勒频移(HZ)

tau = [0 2.6*10^-7];               %Rayleigh channel的路径延时向量(s)

pdb = [0 -3];                       %Rayleigh channel的路径增益向量(dB)

Rayleigh_chan = rayleighchan( Ts,Fd,tau,pdb );  %Generate Rayleigh channel


% t = scatterplot(0);                 %Initialize scatter plot

% h = scatterplot(0);                 %Initialize scatter plot


BER_arry = zeros(16,FrameNum);


for SNR = 0:2:20


    %---------------------------------------------------------------------%

    %                               SC-FDE                                %

    %---------------------------------------------------------------------%

    for ii = 1:1:FrameNum

        %-----------------------------------------------------------------%

        %        Generate Transmit Signal & Convolutional Code            %

        %           & Matrix Interleaver & QPSK modulator                 %

        %-----------------------------------------------------------------%

        BitsTranstmp = randint(1,FrameSize);

        conv_out = convenc( BitsTranstmp,trel );

        interleav_out = interleaving( conv_out,interleave_table );

        QPSK_out = psk( interleav_out,2 );


        %-----------------------------------------------------------------%

        %         QPSK_out -> insetting pilot -> insetting CP             %

        %-----------------------------------------------------------------%

        Signal_Tx = [UW_Ge,QPSK_out,UW_Ge]; 


        %-----------------------------------------------------------------%

        %       Signal_Tx -> Rayleigh channel -> AWGN channel             %

        %-----------------------------------------------------------------%

        Rayleigh_chan_out = filter( Rayleigh_chan,Signal_Tx );

        Signal_Rx = awgn( Rayleigh_chan_out,SNR );


        %-----------------------------------------------------------------%

        %           Signal_Rx -> Deleting CP -> MMSE_FDE                  %

        %-----------------------------------------------------------------%

        FDE_in = Signal_Rx( 1,1:(size(Signal_Rx,2)-UW_Num) );

        FDE_out = MMSE_FDE( FDE_in,UW_Ge );


        %-----------------------------------------------------------------%

        % FDE_out -> QPSK Demodulator -> Matrix Deinterleaver -> Viterbi  %

        %-----------------------------------------------------------------%

%         h = scatterplot( FDE_out,1,0,'b.',h);       %plot the new plot

%         axis([-3 3 -3 3]);                          %Adjust axis limits

%         title('scatter plot - after FDE');

%         grid;

%         drawnow;                                    %refresh the image


        deqpsk_out = de_qpsk( FDE_out );

        deinterleav_out = de_interleaving( deqpsk_out,interleave_table );

        viterbi_out = vitdec( deinterleav_out,trel,tblen,'cont','hard' );  


        %-----------------------------------------------------------------%

        %                   Computing the BER                             %

        %-----------------------------------------------------------------%

        decoded = viterbi_out(tblen+1:end);

        msg = BitsTranstmp(1:end-tblen);

        [n,r] = biterr( decoded,msg );

%         disp(['The bit error rate is:  ',num2str(r)]);

        BER_arry(SNR/2+1,ii) = r;

    end

    

    Ber(SNR/2+1) = sum( BER_arry(SNR/2+1,:) )/FrameNum;

    disp(['The SNR(dB) is : ',num2str(SNR),  '  The BER is : ',num2str(Ber(SNR/2+1))]);

end


Snr = 0:2:20;

figure;

semilogy(Snr,Ber,'--*');

grid on;

xlabel('SNR (dB)');

ylabel('BER');

title('SC-FDE rate 1/2 conv code QPSK');

hold off

————————————————

版权声明:本文为CSDN博主「FPGA&matlab」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ccsss22/article/details/119959582



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 5

    粉丝
  • 0

    好友
  • 1

    获赞
  • 16

    评论
  • 5260

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 17:22 , Processed in 0.016879 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部