FPGA 矩阵转置

article/2025/9/26 16:52:31

这里写目录标题

  • 1 功能
  • 2 开发环境
  • 3 框架
  • 4 转置公式
  • 5 Simulation
    • 第一部分
    • 第二部分
    • 第三部分
  • 6 Matlab代码
    • 产生FIFO数据
    • 产生转置矩阵
  • 7 HDL
    • 仿真文件
    • 顶层文件
    • FIFO顶层文件
    • FIFO读
    • FIFO写
    • RAM顶层文件
  • 8 IP配置
    • FIFO
    • RAM
    • ROM
  • 9 Reference

1 功能

通过tb读取本地数据保存到FIFO,通过coe文件将转置后的地址数据保存在ROM中,读取FIFO的文件作为输入,读取ROM作为地址。通过地址变换,对矩阵进行转置,最终将转置后的矩阵保存在RAM中。

2 开发环境

Vivado

3 框架

在这里插入图片描述
包含IP:FIFO、RAM和ROM

4 转置公式

来源见 Reference
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 Simulation

在这里插入图片描述

第一部分

通过tb将数据写到FIFO中,此部分数据为两路(1:32)*32。
这里的数据也就是转置前的数据,每行从1增长到32,总共32行。

第二部分

从FIFO中读取数据。
从ROM中读取地址,此地址为转置后的地址。
将FIFO中的数据按ROM中的地址写入到RAM中。

第三部分

读取RAM,可以从波形上看到转置的效果。
本来每行是1到32逐渐增加,现在每行为1到32中的一个数。
转置成功!

6 Matlab代码

产生FIFO数据

%% export to bin file% specifying a signed, fixed-point data type, rounding towards negative infinity, and saturate on overflow.
struct.mode = 'fixed'; 
struct.roundmode = 'floor'; 
struct.overflowmode = 'saturate'; 
struct.format = [8 0];    % 8位二进制数,0位小数,默认1位符号位
q=quantizer(struct);miu1_real = zeros(32,32);
for i = 1:32miu1_real(:,i) = i;
end
miu1_imag = miu1_real;% 量化值与实际值的误差
q_miu1_real = quantize(q,miu1_real);
q_miu1_imag = quantize(q,miu1_imag);
disp("最大量化误差");
disp(max(max([abs(miu1_real-q_miu1_real),abs(miu1_imag-q_miu1_imag)])));% 按行转为列向量
real_o = num2bin(q, reshape(miu1_real', [], 1));
imag_o = num2bin(q, reshape(miu1_imag', [], 1));
% 按列转为列向量
% real_o = num2bin(q,miu1_real(:)); 
% imag_o = num2bin(q,miu1_imag(:)); %% 将数据写入TXT
fid1=fopen('F:\MyTest\FPGA\IPFFT2\IPFFT2.srcs\sources_1\script/real_order.txt','wt');
fid2=fopen('F:\MyTest\FPGA\IPFFT2\IPFFT2.srcs\sources_1\script/imag_order.txt','wt');for i=1:32*32fwrite(fid1,real_o(i,:));fprintf(fid1,'\n');fwrite(fid2,imag_o(i,:));fprintf(fid2,'\n');
end
fclose(fid1);
fclose(fid2);

数据
在这里插入图片描述
imag_order内容一致

产生转置矩阵

close all; clear; clc
%% 生成方阵
a = 1:32*32;
a_exp = reshape(a, 32, 32);
a_exp = a_exp';
disp(a_exp);
%% 产生转置系数
m = 32;
n = 32;
% addr = (i-1)*n+j;
addr = 1:32*32;
% disp(addr);
i = floor((addr-1)/n) + 1;
j = mod((addr-1),n) + 1;
addr_t = (j-1)*m+i;
addr_t = addr_t-1;  %0开始
%% 利用转置系数对方阵进行转置
b = zeros(1, 32*32);
for i = 1:32*32b(i) = a(addr_t(i)+1);
end
b_shrink = reshape(b, 32, 32);
b_shrink = b_shrink';
disp(b_shrink);%% 生成coe
N = 32*32;
fid = fopen('F:\MyTest\FPGA\IPFFT2\IPFFT2.srcs\sources_1\script/tran_matrix_para_1024.coe','wt');    
%- standard format
fprintf( fid, 'memory_initialization_radix = 10;\n');                     
fprintf( fid, 'memory_initialization_vector =\n');
%- write data in coe file
for i = 1:1:Nif(i == N)fprintf(fid,'%d;',addr_t(i));  elsefprintf(fid,'%d,\n',addr_t(i));  end
end
fclose(fid);

数据
在这里插入图片描述

7 HDL

仿真文件

module tb_ip_fft2;reg  			clk;
reg  			rst_n;reg [7:0] 		data_real [1023:0];
reg [7:0] 		data_imag [1023:0];reg [7:0] 		dati_in;
reg [7:0] 		datq_in;wire [15:0] 	fifo_din;
reg [9:0]  		count=0;integer i;initial  beginclk=1;rst_n=0;dati_in=0;datq_in=0;// (1:32)*32$readmemb("F:/MyTest/FPGA/IPFFT2/IPFFT2.srcs/sources_1/script/real_order.txt",data_real);$readmemb("F:/MyTest/FPGA/IPFFT2/IPFFT2.srcs/sources_1/script/imag_order.txt",data_imag);// for(i=0; i<127; i=i+1)// 	$display("%h %h", data_real[i], data_imag[i]);#100rst_n=1;
endalways #5  clk=~clk;assign fifo_din = {datq_in, dati_in};top  u_top (.clk                     ( clk                 ),.rst_n                   ( rst_n               ),.fifo_din                ( fifo_din            ),.fifo_wr_en_pre          ( fifo_wr_en_pre      )
);always @(posedge  clk)  beginif (!rst_n) begincount <= 1'b0;dati_in <= 1'b0;datq_in <= 1'b0;endelse if ( fifo_wr_en_pre ) begindati_in <= data_real[count];datq_in <= data_imag[count];count <= count+1'b1;endelse begincount 	<= count 	;dati_in <= dati_in	;datq_in <= datq_in	;end
endendmodule

顶层文件

module top(input   clk                         ,input   rst_n                       ,input [15:0] 	fifo_din            ,output 		fifo_wr_en_pre);wire                fifo_wr_en          ;// wire                fifo_wr_en_pre      ;wire                fifo_rd_en          ;wire    [1:0]            fifo_rd_en_pre      ;wire    [15:0]      fifo_dout           ;wire    [27 : 0] 	ram_douta           ;ip_fifo  u_ip_fifo (.clk                     ( clk              ),.rst_n                   ( rst_n            ),.fifo_din                ( fifo_din         ),.fifo_dout               ( fifo_dout         ),.fifo_wr_en              ( fifo_wr_en       ),.fifo_wr_en_pre          ( fifo_wr_en_pre   ),.fifo_rd_en              ( fifo_rd_en       ),.fifo_rd_en_pre          ( fifo_rd_en_pre   ));//=======================================ip_ram  u_ip_ram (.clk                     ( clk     ),.rst_n                   ( rst_n   ),.fifo_rd_en_pre          ( fifo_rd_en_pre   ),.fifo_dout               ( fifo_dout   ),.ram_douta               ( ram_douta   ));endmodule

FIFO顶层文件

module ip_fifo(input   clk                         ,input   rst_n                       ,input [15:0] 	fifo_din			,output 	[15 : 0] 	fifo_dout		,output 		    	fifo_wr_en			,output 		    	fifo_wr_en_pre		,output 				fifo_rd_en			,			output 	[1:0]		fifo_rd_en_pre					);// wire	[15 : 0]	fifo_dout		;wire				full			;wire				empty			;wire	[9 : 0]		data_count		;// wire 				fifo_wr_en	;wire 				almost_full		;wire 				almost_empty	;fifo_generator_0 u_fifo (.clk			(clk),               	// input wire clk.din			(fifo_din),          	// input wire [15 : 0] din.wr_en			(fifo_wr_en),   		// input wire wr_en.rd_en			(fifo_rd_en),             	// input wire rd_en.dout			(fifo_dout),         	// output wire [15 : 0] dout.full			(full),              	// output wire full.almost_full	(almost_full),  		// output wire almost_full.empty			(empty),            	// output wire empty.almost_empty	(almost_empty),			// output wire almost_empty.data_count		(data_count)     		// output wire [9 : 0] data_count
);fifo_wr  u_fifo_wr (.clk                     ( clk            ),.rst_n                   ( rst_n          ),.almost_empty            ( almost_empty   ),.almost_full             ( almost_full    ),.fifo_din                ( fifo_din   ),.fifo_wr_en_pre             ( fifo_wr_en_pre     ),.fifo_wr_en         		( fifo_wr_en     )
);fifo_rd  u_fifo_rd (.clk                     ( clk            ),.rst_n                   ( rst_n          ),.fifo_out                ( fifo_dout      ),.almost_full             ( almost_full    ),.almost_empty            ( almost_empty   ),.fifo_rd_en              ( fifo_rd_en     ),.fifo_rd_en_pre              ( fifo_rd_en_pre     )
);endmodule

FIFO读

module fifo_rd(input clk,input rst_n,input [15:0] fifo_out,input almost_full,input almost_empty,output reg fifo_rd_en,output reg [1:0] fifo_rd_en_pre);// reg fifo_rd_en;reg [1:0] state;reg almost_full_d0;reg almost_full_syn;reg [3:0] dly_cnt;always @(posedge clk ) beginif (!rst_n) beginalmost_full_d0 <= 1'b0;almost_full_syn <= 1'b0;endelse beginalmost_full_d0 <= almost_full;almost_full_syn <= almost_full_d0;endendalways @(posedge clk ) beginif (!rst_n) beginfifo_rd_en_pre[0] <= 1'b0;state <= 2'd0; dly_cnt <= 4'd0;endelsecase (state)2'd0: if(almost_full_syn)state <= 2'd1;elsestate <= state;2'd1:if (dly_cnt == 4'd9) begindly_cnt <= 4'd0;state <= 2'd2;endelsedly_cnt <= dly_cnt +1'b1;2'd2:if (almost_empty) beginfifo_rd_en_pre[0] <= 1'b0;state <= 2'd3; endelsefifo_rd_en_pre[0] <= 1'b1;2'd3:state <= state;default: state <= 2'd0;endcaseendalways @(posedge clk ) beginfifo_rd_en_pre[1] <= fifo_rd_en_pre[0];fifo_rd_en <= fifo_rd_en_pre[1];endendmodule

FIFO写

module fifo_wr(input clk,input rst_n,input almost_empty,input almost_full,input [15:0]         fifo_din    ,output reg          fifo_wr_en,     output reg          fifo_wr_en_pre  // 涓轰簡娑堥櫎鎵撲竴鎷嶅fifo杈撳叆鐨勫奖鍝�);reg [1:0] state;reg almost_empty_d0;reg almost_empty_syn;reg [3:0] dly_cnt;reg [15:0]    fifo_wr_data;// always @(posedge clk ) beginif (!rst_n) beginalmost_empty_d0 <= 1'b0;almost_empty_syn <= 1'b0;endelse beginalmost_empty_d0 <= almost_empty;almost_empty_syn <= almost_empty_d0;endendalways @(posedge clk ) beginif (!rst_n) beginfifo_wr_en_pre <= 1'b0;fifo_wr_data <=16'd0;state <= 2'd0;dly_cnt <= 4'd0;endelse begincase (state)//  绛夊緟FIFO绌轰俊鍙�2'd0: if (almost_empty_syn) state <= 2'd1;elsestate <= state;// 寤舵椂2'd1:if (dly_cnt == 4'd9) begindly_cnt <= 4'd0;state <= 2'd2;fifo_wr_en_pre <= 1'b0; // 姝ゅ涓�1鐨勮瘽锛屽垯榛樿鏁版嵁浼氳鍐欏叆endelsedly_cnt <= dly_cnt +4'd1;// 鍐欐暟鎹�2'd2:if (almost_full) beginfifo_wr_en_pre <=1'b0;fifo_wr_data <= 16'h0;state <= 2'd3;end    else beginfifo_wr_en_pre <=1'b1;fifo_wr_data <= fifo_wr_data +1'd1;end// 姝诲惊鐜�2'd3:state <= state;default: state <= 2'd0;endcaseendendalways @(posedge clk ) beginfifo_wr_en <= fifo_wr_en_pre;end
endmodule

RAM顶层文件

module ip_ram(input   clk                         ,input   rst_n                       ,input   [15:0] 	    fifo_dout			,	input 	[1:0]		    fifo_rd_en_pre		,output  [27 : 0] 	ram_douta);// ==========rom==============reg [9:0] rom_addra;reg [9:0] rom_addra_pre;wire [10 : 0] rom_douta;reg rom_ena;//===========ram  ==============reg 			ram_ena		;reg [0 : 0] 	ram_wea		;reg [9 : 0] 	ram_addra	;reg [27 : 0] 	ram_dina	;//=============================reg [1:0] state;parameter START = 2'd0, WRITE = 2'd1, READ = 2'd2, WAIT = 2'd3;reg [9:0] ram_read_counter;always @(posedge clk ) beginif(!rst_n) beginram_read_counter <= 10'b0;endelse beginif(state == READ)ram_read_counter <= ram_read_counter + 1'b1;endendalways @(posedge clk ) beginif(!rst_n)beginstate <= START;endelse begincase(state)START:if (fifo_rd_en_pre[0] == 1'b1) beginstate <= WRITE;endelse beginstate <=state;end// 鍐檙amWRITE:if (fifo_rd_en_pre[0] == 1'b1) beginstate <= state;endelse beginstate <= READ;end// read ramREAD:if(ram_read_counter == 10'd1023)state <= WAIT;elsestate <= state;// if (fifo_rd_en_pre[0] == 1'b0) begin//     state <= state;// end// else begin//     state <= WAIT;// endWAIT:state <= state;default:state <= START;endcaseendendalways @(posedge clk ) beginif(!rst_n) beginram_wea <= 1'b0;endelse begincase (state)START: ram_wea <= 1'b0;WRITE: ram_wea <= 1'b1;READ : ram_wea <= 1'b0;WAIT : ram_wea <= 1'b0;default: ram_wea <= 1'b0;endcaseendendalways @(posedge clk ) beginif(!rst_n) beginram_ena <= 1'b0;endelse begincase (state)START: ram_ena <= 1'b0;WRITE: ram_ena <= 1'b1;READ : ram_ena <= 1'b1;WAIT : ram_ena <= 1'b0;default: ram_ena <= 1'b0;endcaseendendalways @(posedge clk ) beginif(!rst_n)beginram_addra <= 10'b0;endelse begincase (state)START: ram_addra <= 10'b0;WRITE: ram_addra <= rom_douta;READ : ram_addra <= ram_addra + 1'b1;WAIT : ram_addra <= 10'b0;default: ram_addra <= 10'b0;endcaseendendalways @(posedge clk ) beginif(!rst_n)beginram_dina <= 28'b0;endelse begincase (state)START: ram_dina <= 28'b0;WRITE: ram_dina <= fifo_dout;READ : ram_dina <= 28'b0;WAIT : ram_dina <= 28'b0;default: ram_dina <= 28'b0;endcaseendendram_wr  u_ram_wr (.clk                     ( clk              ),.rst_n                   ( rst_n            ),.fifo_dout               ( fifo_dout        ),.fifo_rd_en_pre          ( fifo_rd_en_pre   ),.rom_douta               ( rom_douta        ),.ram_ena                 ( ram_ena          ),.ram_wea                 ( ram_wea          ),.ram_addra               ( ram_addra        ),.ram_dina                ( ram_dina         ));blk_mem_gen_0 u_ram (.clka	(clk),    				// input wire clka.ena	(ram_ena),  		   	// input wire ena.wea	(ram_wea),  		   	// input wire [0 : 0] wea.addra	(ram_addra),		 	// input wire [9 : 0] addra.dina	(ram_dina), 		  	// input wire [27 : 0] dina.douta	(ram_douta) 			// output wire [27 : 0] douta);// ============rom==============================always @(posedge clk ) beginif(!rst_n)beginrom_ena <= 1'b0;endelse begincase (state)START:      rom_ena <= 1'b0;WRITE:      rom_ena <= 1'b1;READ :      rom_ena <= 1'b0;WAIT :      rom_ena <= 1'b0;default:    rom_ena <= 1'b0;endcaseendendalways @(posedge clk ) beginif(!rst_n)beginrom_addra <= 10'b0;rom_addra_pre <= 10'b0;endelse begincase (state)START:      rom_addra_pre <= 10'b0;WRITE:      rom_addra_pre <= rom_addra_pre + 1'b1;READ :      rom_addra_pre <= 10'b0;WAIT :      rom_addra_pre <= 10'b0;default:    rom_addra_pre <= 10'b0;endcaserom_addra <= rom_addra_pre; // 鐢变簬ena鏃讹紝addr浠�1寮�濮嬶紝鎵�浠ユ墦涓媿瀛愪粠0寮�濮�endendblk_mem_gen_1 u_rom (.clka       (clk)           ,                    // input wire clka.ena        (rom_ena)       ,                      // input wire ena.addra      (rom_addra)     ,                  // input wire [9 : 0] addra.douta      (rom_douta)                   // output wire [10 : 0] douta);// =====================================endmodule

8 IP配置

FIFO

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RAM

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ROM

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9 Reference

  1. 李汉清. 基于FPGA的快速原地转置算法. 电子测量技术. 2015;38(11):46-50.

都看到这了,点个赞吧!


http://chatgpt.dhexx.cn/article/seiukTys.shtml

相关文章

MATLAB的转置

小席的碎碎叨&#xff1a;   以前处理的数据通常都是实数矩阵&#xff0c;一直认为MATLAB中的转置可用实现&#xff0c;并没有发现有什么不对。但是&#xff0c;这段时间在做线性调频信号的干扰抑制的仿真&#xff0c;其信号矩阵都是复数矩阵&#xff0c;依然在需要转置的时候…

矩阵转置(transpose、T)

1.T T 适用于一、二维数组的转置 transpose 适用于高维数组&#xff0c;需要用到一个由轴编号组成的元组&#xff0c;才能进行转置 In [1]: import numpy as npIn [2]: arr np.arange(20).reshape(4,5)#生成一个4行5列的数组In [3]: arr Out[3]: array([[ 0, 1, 2, 3, 4]…

线性代数:转置矩阵(matrix transpose)和逆矩阵(matrix inverse)

这一篇是为了后面着色效果的数学基础做积累&#xff0c;之前我们使用矩阵的大部分情况都是直接的仿射空间变换&#xff0c;就是仿射空间A变换到仿射空间B&#xff0c;使用矩阵也都是如下&#xff1a; 矩阵T*齐次坐标V 齐次坐标V 其计算细节也就是矩阵行与向量列的点积&#xf…

转置矩阵(matrix transpose)和逆矩阵(matrix inverse)的相关公式

转载自: https://blog.csdn.net/yinhun2012/article/details/84236202 这一篇是为了后面着色效果的数学基础做积累&#xff0c;之前我们使用矩阵的大部分情况都是直接的仿射空间变换&#xff0c;就是仿射空间A变换到仿射空间B&#xff0c;使用矩阵也都是如下&#xff1a; 矩阵T…

转置矩阵(Transpose of a matrix)

定义 给定一个矩阵 A&#xff0c;将矩阵的行列互换得到的新矩阵称为转置矩阵&#xff0c;记为 &#xff0c;。转置矩阵的行列式不变&#xff0c;即 。转置矩阵由下列动作建立&#xff1a; 将 A 的横行写为 的纵列&#xff1b;将 A 的纵列写成 的横行。 形式来说&#xff0…

数据结构--3.3 矩阵转置

矩阵转置 结构体创建初始化转置打印测试代码运行结果 1.稀疏矩阵的压缩存储&#xff0c;至少需要存储以下信息&#xff1a; 矩阵中各非 0 元素的值&#xff0c;以及所在矩阵中的行标和列标&#xff1b; 矩阵的总行数和总列数&#xff1b; 上图是一个稀疏矩阵&#xff0c;若对…

D2D与其他短距离通信技术

本篇文章主要对D2D和其他短距离通信技术&#xff08;WIFI\NFC\zigbee\蓝牙、超宽带、微站&#xff09;做了比较&#xff0c;从运营商投入、基础设施、应用、最大传输速率、最大传输距离、频率、标准、特征等方面

D2D引擎与GDI\GDI+绘制效果对比

本例主要是对比D2D和GDI在绘制文字、线条的区别&#xff0c;以及D2D与GDI在绘制图片时的区别。 D2D是基于COM组件开发的&#xff0c;使用前的CoInitialize(NULL)是必须的&#xff1b;另外&#xff0c;GDI的初始化GdiplusStartup&#xff08;&#xff09;也别忘了。 废话少说&…

D2D加载图片资源(2)

※先给大家认识下什么是WIC WIC全称是Windows Image Component&#xff0c;是一套扩展的API&#xff0c;用来处理数字图像&#xff0c;它是基于COM组件的。该API包含非常丰富的图像处理函数。 详细可以点击百度文库再看看 http://baike.baidu.com/view/414115.htm?fraladdi…

5G关键技术,D2D通信-ielab

D2D&#xff08;device to device&#xff09;技术是指两个对等的用户节点之间直接进行通信的一种通信方式。在由D2D通信用户组成的分散式网路中&#xff0c;每个用户节点都能发送和接收信号&#xff0c;并具有自动路由(转发消息)的功能。网路的参与者共用它们所拥有的一部分硬…

D2D D3D12 渲染视频帧思路及实现

写在之前 耗时2个月&#xff0c;写完公司的音视频处理系统。对于整个音视频处理有了基本的了解。个人感觉最坑的地方有三&#xff1a; 编解码音视频录制的同步视频预览渲染&#xff08;视频帧的渲染&#xff09; 由于在以后要支持同时多路1080P录制及预览&#xff0c;所以对…

车载通信与导航(五):D2D通信流程

取自https://blog.csdn.net/u012159948/article/details/20059927 D2D技术可以应用于移动蜂窝网络&#xff0c;以提高资源利用率和网络容量。每一个D2D通信链路占用的资源与一个蜂窝通信链路占用的相等。D2D通信将在宏蜂窝基站的控制下获得通信所需的频率资源和传输功率。它与蜂…

关于字体绘制的baseline (QT 和 D2D)

常规字体绘制API调用: QT:QPainter::drawText D2D: ID2D1RenderTarget::DrawText 以上字体绘制某些特殊效果无法达到, 我们可以用Path绘制字体: QPainterPath::addText(qreal x, qreal y, const QFont &f, const QString &text); D2D: 将字用指定字体属性绘制好,…

DirectX12(D3D12)基础教程(十三)——D2D、DWrite On D3D12与文字输出

文章目录 1、 前言2、D2D、DWrite简介3、添加D2D、DWrite基础支持文件4、D2D、DWrite基本编程步骤5、基于D3D11On12设备创建D2D渲染目标6、创建DWrite字体用D2D显示文字7、D2D、D3D11on12与D3D12同步 1、 前言 在经过了前面一系列章节的“狂轰滥炸”式的学习之后&#xff0c;如…

D2D

D2D: Device-to-Device即是设备到设备的通信。 1.认识D2D 基于蜂窝网络的D2D通信&#xff0c;或称为邻近服务&#xff08;Proximity Service,ProSe&#xff09;&#xff0c;是指用户数据可不会经过网络中转直接在终端之间传输。D2D通信与传统的通信架构有显著区别&#xff0c…

D2D与蜂窝系统间的干扰

上行频段:D2D发射端UE3对基站的干扰,蜂窝UE1对D2D接收端UE4的干扰;下行频段:基站对D2D接收端UE4的干扰,D2D发射端UE3对蜂窝UE2的干扰。 D2D复用上行资源:eNB会受到D2D的干扰,D2D中的UE都受eNB的控制,eNB为其分配资源,同时也控制最大发射功率,而且还能够将蜂窝的功控信息…

关于D2D

前段时间发现微软的DirectX是如此的强悍&#xff0c;并且对于开发windows程序是如此的重要&#xff0c;决定到msdn去看看&#xff0c;下面是对D2D的介绍&#xff0c;后面会陆续贴上&#xff0c;这是我的第一篇译文&#xff0c;有误之处&#xff0c;还请指教。 什么是D2D? D2D…

移动通信网络规划:D2D通信技术

D2D通信技术 一、什么是D2D通信技术 D2D即Device-to-Device&#xff0c;也称之为终端直通。D2D通信技术是指两个对等的用户节点之间直接进行通信的一种通信方式。 如图中所示。在由D2D通信用户组成的分散式网络中&#xff0c;每个用户节点都能发送和接收信号&#xff0c;并具有…

D2D网络架构介绍

D2D(Device-to-Device)通信,也称为邻近服务(Proximity Service,ProSe),是由3GPP组织提出的一种点到点的无线通信技术,它可以在蜂窝通信系统的控制下允许LTE终端之间利用小区无线资源直接进行通信,而不经过蜂窝网络中转。作为面向5G的关键候选技术,D2D技术能够提升通信…

车载通信与导航(七):D2D通信详解

D2D&#xff08;设备到设备&#xff09;&#xff0c;即临近终端设备之间直接进行通信的技术&#xff0c;在通信网络中&#xff0c;一旦D2D通信链路建立起来&#xff0c;传输语音或数据消息就无需基站的干预&#xff0c;这样就可以减轻通信系统中基站及核心网络的数据压力&#…