zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

基于FPGA的UWB通信/定位系统的开发介绍——简化版

通信开发 基于 介绍 FPGA 简化版
2023-09-11 14:15:33 时间

基于FPGA的UWB通信/定位系统的开发的详细版欢迎订阅本博:https://blog.csdn.net/ccsss22/article/details/115290774

1.问题描述:

超宽带[技术是一种高速率、低成本和低功耗的新型无线通信技术。通过FPGA实现的结构如图所示:

2.部分程序:

kkk = 0;
for EbN0 = EbN0_sub
    kkk
    kkk = kkk + 1;
    
    for jj1 = 1:Tag_Num
        jj1
        rng(jj1);
        for jj = 1:num_bits
            
            %TAG to BS1
            delay_1         = round(time_bs_tag(1,jj1)/ts);
            xx1             = zeros(1,delay_1);
            %传播时延
            delay_1_1(jj,:) = [xx1 sig(1:end-length(xx1))];
            %UWB
            h_4             = uwb_channel(dist_bs_tag(1,jj1)); 
            %信号经过信道
            conv_data1      = conv(delay_1_1(jj,:),h_4); 
            UWB_chan1(jj,:) = conv_data1(1:length(sig));
            
            
            
            %TAG to BS2
            delay_2         = round(time_bs_tag(2,jj1)/ts);
            xx2             = zeros(1,delay_2);
            %传播时延
            delay_2_1(jj,:) = [xx2 sig(1:end-length(xx2))];
            h_2             = uwb_channel(dist_bs_tag(2,jj1));
            conv_data2      = conv(delay_2_1(jj,:),h_2);
            UWB_chan2(jj,:) = conv_data2(1:length(sig));

            %TAG to BS3
            delay_3         = round(time_bs_tag(3,jj1)/ts);
            xx3             = zeros(1,delay_3);
            %传播时延
            delay_3_1(jj,:) = [xx3 sig(1:end-length(xx3))];
            h_3             = uwb_channel(dist_bs_tag(3,jj1));
            conv_data3      = conv(delay_3_1(jj,:),h_3);
            UWB_chan3(jj,:) = conv_data3(1:length(sig));

            %TAG to BS4
            delay_4         = round(time_bs_tag(4,jj1)/ts);
            xx4             = zeros(1,delay_4);
            %传播时延
            delay_4_1(jj,:) = [xx4 sig(1:end-length(xx4))];
            h_4             = uwb_channel(dist_bs_tag(4,jj1));
            conv_data4      = conv(delay_4_1(jj,:), h_4);
            UWB_chan4(jj,:) = conv_data4(1:length(sig));   
        end

        for jj = 1:num_bits
            UWB_chan1n(jj,:) = awgn(UWB_chan1(jj,:)/max(UWB_chan1(jj,:)),EbN0,'measured');
            UWB_chan2n(jj,:) = awgn(UWB_chan2(jj,:)/max(UWB_chan2(jj,:)),EbN0,'measured');
            UWB_chan3n(jj,:) = awgn(UWB_chan3(jj,:)/max(UWB_chan3(jj,:)),EbN0,'measured');
            UWB_chan4n(jj,:) = awgn(UWB_chan4(jj,:)/max(UWB_chan4(jj,:)),EbN0,'measured');
        end

        %BS1接收机
       
        
        
        Rec_bs1    = sum(UWB_chan1n)/num_bits;
        xc1        = xcorr(y,Rec_bs1);
        [a,delay1] = max(xc1);
        Toa1       = (length(sig) - delay1) * ts;

        %BS2接收机
        Rec_bs2    = sum(UWB_chan2n)/num_bits;
        xc2        = xcorr(y,Rec_bs2);
        [a,delay2] = max(xc2);
        Toa2       = (length(sig) - delay2) * ts;

        %BS3接收机
        Rec_bs3    = sum(UWB_chan3n)/num_bits;
        xc3        = xcorr(y,Rec_bs3);
        [a,delay3] = max(xc3);
        Toa3       = (length(sig) - delay3) * ts;

        %BS4接收机
        Rec_bs4    = sum(UWB_chan4n)/num_bits;
        xc4        = xcorr(y, Rec_bs4);
        [a,delay4] = max(xc4);
        Toa4       = (length(sig) - delay4) * ts;   

        [x_est0(jj1),y_est0(jj1),z_est0(jj1)] = func_TOA(BS_pos,[Toa1,Toa2,Toa3,Toa4],C_laser); 

        x_est1(jj1) =  x_est0(jj1);
        y_est1(jj1) =  y_est0(jj1);
        z_est1(jj1) =  z_est0(jj1);
        
        toa_error0(1,jj1) = sqrt((Tag(jj1,1) - x_est0(jj1))^2 + (Tag(jj1,2) - y_est0(jj1))^2+ (Tag(jj1,3) - z_est0(jj1))^2);
        toa_error1(1,jj1) = sqrt((Tag(jj1,1) - x_est1(jj1))^2 + (Tag(jj1,2) - y_est1(jj1))^2+ (Tag(jj1,3) - z_est1(jj1))^2);
        
    end
end


P_est0 = [x_est0',y_est0',z_est0'];
P_est1 = [x_est1',y_est1',z_est1'];

3.仿真结论:

 

PGA定位仿真输出结果是:247,118,77

MATLAB的定位结果如下:

 

A-036:03