vivado实现FFT和IFFT信号处理

article/2025/8/27 22:28:53

一,FFT的物理意义  

    FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外在频谱分析方面,FFT可以将一个信号的频谱提取出来。一个模拟信号,经过ADC采样(采样频率要大于信号频率的两倍)之后,就变成了数字信号。采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。

    IFFT (Inverse Fast Fourier Transform) 就是快速傅里叶逆变换。其为OFDM技术中的一个实现方式:各个子信道的正交调制和解调可以分别通过采用IDFT(Inverse Discrete Fourier Transform)和DFT实现,在子载波数很大的系统中,可以通过采用IFFT(Inverse Fast Fourier Transform)和FFT实现。

二,FFT的Vivado 实现步骤:

运行 Matlab程序 产生测试数据, 绘制 cos  时域和频域波形,运行产生 1 组 cos波形的 1000 个采样点数据,存在time_domain_cos.txt文件,每个数据位宽16bit。

matlab绘制出时域和频域的波形

clc;clear `all;close all;format long gFs = 1000;                    % Sampling frequency
T = 1/Fs;                     % Sampling period
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vectorx1 = cos(2*pi*50*t)*(2^13);          % First row wave
%output time domain data
x1_fix = round(x1,0);    %convert to fixed signed(3.13)
x1_fix(find(x1_fix<0)) = x1_fix(find(x1_fix<0))+(2^16); 
fid0 = fopen('time_domain_cos.txt', 'wt');
fprintf(fid0, '%16x\n', x1_fix);
fid0 = fclose(fid0);
fid1 = fopen('frequency_domain_cos.txt', 'wt');
fprintf(fid1, '%g\n', Y);
fid1 = fclose(fid1);%fft
x1 = x1/2^15;   %signed(.15)
figure(1);
plot(t(1:100),x1(1:100))
title(['Cos in the Time Domain'])n = 2^nextpow2(L);
Y = fft(x1,n);%draw wave
y = abs(Y/n);
t1 = (0:n);                % Time vectorfigure(2);
plot(t1(1:n),y(1:n))
title(['Cos in the Frequency Domain'])%IFFT and draw wave
IY = ifft(Y,n);
figure(3);
plot(t(1:100),IY(1:100))
title(['Cos after FFT and IFFT'])

1,打开 IP Catalog ,搜索 FFT 或者找到分类 Core -> Digital Signal Processing->Transform ->ffts ,Fast Fourier Transform 。

2,Configuration 页面如图,配置 IP 通道数(Number of Channels )、 FFT 转换长度(Transform Length)、目标时钟频率(Target Clock Frequency )和 FFT 实现架构(Architecture
Choice)

3,Implementation 页面,可以配置数据格式(Data Format)、缩放模式(Scaling Options)、数据末尾处理方式(Rounding Modes)、输入数据和相位的位宽(Input Data
Width)和数据输出顺序(Output Ordering)等。

4,Detailed Implement 页面中,可以对 FPGA 存储器或乘法器相关的资源配置

5,在配置页面左侧,可以查看 IP 接口( IP Symbol )、实现信号位宽细节( Implementation Details)和输出延时(Latency)

6,顶层代码

`timescale 1ns / 1ps`timescale 1ns/1ps
module fft_sim();reg clk;
reg rst_n;	reg [7 : 0] s_axis_config_tdata;		
reg s_axis_config_tvalid;
wire s_axis_config_tready;reg [15 : 0] s_axis_data_tdata_img,s_axis_data_tdata_real;	//signed(1.15)
reg s_axis_data_tvalid;
wire s_axis_data_tready;
reg s_axis_data_tlast;wire [26 : 0] m_axis_data_tdata_img,m_axis_data_tdata_real;
wire [31 : 27] m_axis_data_null;
wire m_axis_data_tvalid;
wire m_axis_data_tlast;//xilinx pg109-xfft.pdf page24
parameter FFTCONFIG_FWD_INV_FFT		= 1'b1;		//FFT
parameter FFTCONFIG_FWD_INV_IFFT	= 1'b0;		//IFFT//FFT IP Core	wire event_frame_started;
wire event_tlast_unexpected;
wire event_tlast_missing;
wire event_data_in_channel_halt;xfft_0 	uut_xfft_0 (.aclk							(clk),                               // input wire aclk.s_axis_config_tdata			(s_axis_config_tdata),               // input wire [7 : 0] s_axis_config_tdata		.s_axis_config_tvalid			(s_axis_config_tvalid),              // input wire s_axis_config_tvalid.s_axis_config_tready			(s_axis_config_tready),              // output wire s_axis_config_tready.s_axis_data_tdata			({s_axis_data_tdata_img,s_axis_data_tdata_real}),                 // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid			(s_axis_data_tvalid),                // input wire s_axis_data_tvalid.s_axis_data_tready			(s_axis_data_tready),                // output wire s_axis_data_tready.s_axis_data_tlast			(s_axis_data_tlast),                 // input wire s_axis_data_tlast.m_axis_data_tdata			({m_axis_data_tdata_img,m_axis_data_null,m_axis_data_tdata_real}),                 // output wire [63 : 0] m_axis_data_tdata.m_axis_data_tvalid			(m_axis_data_tvalid),                // output wire m_axis_data_tvalid.m_axis_data_tlast			(m_axis_data_tlast),                 // output wire m_axis_data_tlast.event_frame_started			(event_frame_started),               // output wire event_frame_started.event_tlast_unexpected		(event_tlast_unexpected),          	 // output wire event_tlast_unexpected.event_tlast_missing			(event_tlast_missing),               // output wire event_tlast_missing.event_data_in_channel_halt	(event_data_in_channel_halt)  		 // output wire event_data_in_channel_halt
);integer i,j;reg[15:0]	data_mem [999:0];initial #500 $readmemh("../../time_domain_cos.txt",  data_mem);		initial beginclk = 0;rst_n = 0;s_axis_config_tdata <= 8'd0;s_axis_config_tvalid <= 1'b0;s_axis_data_tdata_img <= 16'd0;s_axis_data_tdata_real <= 16'd0;s_axis_data_tvalid <= 1'b0;s_axis_data_tlast <= 1'b0;#1000;@(posedge clk);s_axis_config_tdata <= {7'd0,FFTCONFIG_FWD_INV_FFT};s_axis_config_tvalid <= 1'b1;	repeat(2) begin @(posedge clk); ends_axis_config_tvalid <= 1'b0;		#1000;@(posedge clk);i <= 1;#10000;@(posedge clk);		#100_000;$fclose(w1_file);$fclose(w2_file);#1000;$stop;
end	always @(*) beginif((i>0) && (i<1001)) s_axis_data_tdata_real <= data_mem[i-1];else s_axis_data_tdata_real <= 16'd0;
end	always @(posedge clk) beginif(i == 0) i <= 0;else if(i <= 1024) begin	if(s_axis_data_tready && s_axis_data_tvalid) i <= i+1;else ;endelse if(i < 1050) i <= i+1;else ;
endalways @(posedge clk) 
beginif((i>=1) && (i<=1023)) s_axis_data_tvalid <= 1'b1;	else s_axis_data_tvalid <= 1'b0;
endalways @(posedge clk) 
beginif(i==1023) s_axis_data_tlast <= 1'b1;else s_axis_data_tlast <= 1'b0;	
endalways #10 clk = ~clk;		
integer w1_file,w2_file;initial w1_file = $fopen("./fft_result_real.txt","w");	
initial w2_file = $fopen("./fft_result_image.txt","w");	always @(posedge clk) 
beginif(m_axis_data_tvalid) begin$fwrite(w1_file, "%x\n", m_axis_data_tdata_real);$fwrite(w2_file, "%x\n", m_axis_data_tdata_img);	$display("%x    ,    %x",m_axis_data_tdata_real,m_axis_data_tdata_img);end	
end	endmodule

7,Flow Navigator 面板中,展开 Simulation ,点击 Run Simulation ,弹出菜单中点击 Run Behavioral Simulation仿真

打开**.sim\sim_1\behav 文 件 夹 下 fft_result_real.txt 和fft_result_image.txt 文本,分别存储 FFT 结果的实部和虚部。这里需要注意定点的小数问题

8,FFT的MATLAB验证

clc;clear `all;close all;
format long g
FFT_NUM = 1024;
%input file
fid1 = fopen('fft_result_real.txt', 'r');
fft_real = fscanf(fid1,'%x');
fclose(fid1);
fid2 = fopen('fft_result_image.txt', 'r');
fft_image = fscanf(fid2,'%x');
fclose(fid2);for i=1:FFT_NUMif fft_real(i) >= 2^26fft_real(i) = fft_real(i)-2^27;endif fft_image(i) >= 2^26fft_image(i) = fft_image(i)-2^27;end    
endy = sqrt(fft_real.*fft_real + fft_image.*fft_image)/2^15/FFT_NUM;   
t = (0:FFT_NUM);                % Time vector
figure(1);
plot(t(1:FFT_NUM),y(1:FFT_NUM))

三,IFFT的vivado实现

`timescale 1ns/1ps
module ifft_sim();
//接口定义reg clk;
reg rst_n;	
reg [7 : 0] s_axis_config_tdata;		
reg s_axis_config_tvalid;
wire s_axis_config_tready;reg [7 : 0] si_axis_config_tdata;		
reg si_axis_config_tvalid;
wire si_axis_config_tready;reg [15 : 0] s_axis_data_tdata_img,s_axis_data_tdata_real;
reg s_axis_data_tvalid;
wire s_axis_data_tready;
reg s_axis_data_tlast;reg [26 : 0] si_axis_data_tdata_img,si_axis_data_tdata_real;
reg si_axis_data_tvalid;
wire si_axis_data_tready;
reg si_axis_data_tlast;wire [26 : 0] m_axis_data_tdata_img,m_axis_data_tdata_real;
wire [31 : 27] m_axis_data_null;
wire m_axis_data_tvalid;
wire m_axis_data_tlast;wire [37 : 0] mi_axis_data_tdata_img,mi_axis_data_tdata_real;
wire [39 : 38] mi_axis_data_null;
wire mi_axis_data_tvalid;
wire mi_axis_data_tlast;//xilinx pg109-xfft.pdf page24
parameter FFTCONFIG_FWD_INV_FFT		= 1'b1;		//FFT
parameter FFTCONFIG_FWD_INV_IFFT	= 1'b0;		//IFFT//FFT IP Core	wire event_frame_started;
wire event_tlast_unexpected;
wire event_tlast_missing;
wire event_data_in_channel_halt;xfft_0 	uut_xfft_0 (.aclk							(clk),                               // input wire aclk.s_axis_config_tdata			(s_axis_config_tdata),               // input wire [7 : 0] s_axis_config_tdata		.s_axis_config_tvalid			(s_axis_config_tvalid),              // input wire s_axis_config_tvalid.s_axis_config_tready			(s_axis_config_tready),              // output wire s_axis_config_tready.s_axis_data_tdata			({s_axis_data_tdata_img,s_axis_data_tdata_real}),                 // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid			(s_axis_data_tvalid),                // input wire s_axis_data_tvalid.s_axis_data_tready			(s_axis_data_tready),                // output wire s_axis_data_tready.s_axis_data_tlast			(s_axis_data_tlast),                 // input wire s_axis_data_tlast.m_axis_data_tdata			({m_axis_data_tdata_img,m_axis_data_null,m_axis_data_tdata_real}),                 // output wire [63 : 0] m_axis_data_tdata.m_axis_data_tvalid			(m_axis_data_tvalid),                // output wire m_axis_data_tvalid.m_axis_data_tlast			(m_axis_data_tlast),                 // output wire m_axis_data_tlast.event_frame_started			(event_frame_started),               // output wire event_frame_started.event_tlast_unexpected		(event_tlast_unexpected),          	 // output wire event_tlast_unexpected.event_tlast_missing			(event_tlast_missing),               // output wire event_tlast_missing.event_data_in_channel_halt	(event_data_in_channel_halt)  		 // output wire event_data_in_channel_halt
);xfft_1 	uut_xfft_1 (.aclk							(clk),                                              // input wire aclk.s_axis_config_tdata			(si_axis_config_tdata),                // input wire [7 : 0] s_axis_config_tdata.s_axis_config_tvalid			(si_axis_config_tvalid),              // input wire s_axis_config_tvalid.s_axis_config_tready			(si_axis_config_tready),              // output wire s_axis_config_tready.s_axis_data_tdata			({5'd0,si_axis_data_tdata_img,5'd0,si_axis_data_tdata_real}),                    // input wire [63 : 0] s_axis_data_tdata.s_axis_data_tvalid			(si_axis_data_tvalid),                  // input wire s_axis_data_tvalid.s_axis_data_tready			(si_axis_data_tready),                  // output wire s_axis_data_tready.s_axis_data_tlast			(si_axis_data_tlast),                    // input wire s_axis_data_tlast.m_axis_data_tdata			({mi_axis_data_tdata_img,mi_axis_data_null,mi_axis_data_tdata_real}),                    // output wire [79 : 0] m_axis_data_tdata.m_axis_data_tvalid			(mi_axis_data_tvalid),                  // output wire m_axis_data_tvalid.m_axis_data_tlast			(mi_axis_data_tlast),                    // output wire m_axis_data_tlast.event_frame_started			(),                // output wire event_frame_started.event_tlast_unexpected		(),          // output wire event_tlast_unexpected.event_tlast_missing			(),                // output wire event_tlast_missing.event_data_in_channel_halt	()  // output wire event_data_in_channel_halt
);//初始化
integer i,j;reg[15:0]	data_mem [999:0];
reg[26:0]	fft_data_mem_real [1023:0];
reg[26:0]	fft_data_mem_image [1023:0];initial #500 $readmemh("../../time_domain_cos.txt",  data_mem);		reg flag_fft;	//1--fft, 0--ifftinitial beginclk = 0;rst_n = 0;s_axis_config_tdata <= 8'd0;s_axis_config_tvalid <= 1'b0;si_axis_config_tdata <= 8'd0;si_axis_config_tvalid <= 1'b0;s_axis_data_tdata_img <= 16'd0;s_axis_data_tdata_real <= 16'd0;s_axis_data_tvalid <= 1'b0;s_axis_data_tlast <= 1'b0;//FFT#1000;@(posedge clk);s_axis_config_tdata <= {7'd0,FFTCONFIG_FWD_INV_FFT};s_axis_config_tvalid <= 1'b1;	repeat(2) begin @(posedge clk); ends_axis_config_tvalid <= 1'b0;		flag_fft = 0;#1000;@(posedge clk);i <= 1;#100_000;$fclose(w1_file);$fclose(w2_file);//IFFTflag_fft = 1;	#1000;@(posedge clk);si_axis_config_tdata <= {7'd0,FFTCONFIG_FWD_INV_IFFT};si_axis_config_tvalid <= 1'b1;	repeat(2) begin @(posedge clk); endsi_axis_config_tvalid <= 1'b0;			#1000;@(posedge clk);i <= 1;#100_000;$fclose(w3_file);	#1000;$stop;
end	always #10 clk = ~clk;	//产生FFT IP核的输入数据
always @(*) beginif(!flag_fft) begins_axis_data_tdata_img <= 0;if((i>0) && (i<1001)) s_axis_data_tdata_real <= data_mem[i-1];else s_axis_data_tdata_real <= 16'd0;endelse beginsi_axis_data_tdata_real <= fft_data_mem_real[i-1];si_axis_data_tdata_img <= fft_data_mem_image[i-1];end
end	always @(posedge clk) beginif(i == 0) i <= 0;else if(i <= 1024) beginif(!flag_fft)beginif(s_axis_data_tready && s_axis_data_tvalid) i <= i+1;else ;endelse beginif(si_axis_data_tready && si_axis_data_tvalid) i <= i+1;else ;endendelse if(i < 1050) i <= i+1;else ;
endalways @(posedge clk) 
beginif(!flag_fft) beginif((i>=1) && (i<=1023)) s_axis_data_tvalid <= 1'b1;	else s_axis_data_tvalid <= 1'b0;endelse beginif((i>=1) && (i<=1023)) si_axis_data_tvalid <= 1'b1;	else si_axis_data_tvalid <= 1'b0;end
endalways @(posedge clk) 
beginif(!flag_fft) beginif(i==1023) s_axis_data_tlast <= 1'b1;else s_axis_data_tlast <= 1'b0;	endelse beginif(i==1023) si_axis_data_tlast <= 1'b1;else si_axis_data_tlast <= 1'b0;	end
end//文件存储IP核输出数据integer w1_file,w2_file,w3_file;initial w1_file = $fopen("./fft_result_real.txt","w");	
initial w2_file = $fopen("./fft_result_image.txt","w");	
initial w3_file = $fopen("./ifft_result.txt","w");	integer k = 0;		always @(posedge clk) 
beginif(m_axis_data_tvalid && !flag_fft) begin$fwrite(w1_file, "%x\n", m_axis_data_tdata_real);$fwrite(w2_file, "%x\n", m_axis_data_tdata_img);	fft_data_mem_real[k] <= m_axis_data_tdata_real;fft_data_mem_image[k] <= m_axis_data_tdata_img;k <= k+1;endelse if(mi_axis_data_tvalid && flag_fft) begin$fwrite(w3_file, "%x\n", mi_axis_data_tdata_real[25:10]);end
end	endmodule


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

相关文章

ifft java_OpenCV DFT_INVERSE与Matlab的ifft不同

我尝试使用opencv的dft函数过滤信号 . 我试图这样做的方式是在时域中获取信号&#xff1a; x [0.0201920000000000 -0.0514940000000000 0.0222140000000000 0.0142460000000000 -0.00313500000000000 0.00270600000000000 0.0111770000000000 0.0233470000000000 -0.00162700…

4.8 IFFT/FFT

4.8.1 IFFT/FFT原理 1. IFFT、FFT在OFDM系统中的应用 2、IFFT/FFT原理 3、DIT的基2FFT算法 4、DIF的基2FFT运算 5、基于的频率抽选FFT算法 4.8.2 基于 DIF FFT的硬件 结构 1、各级的蝶形运算硬件实现 2、transfer12、 transfer34、transfer56硬件实现 3、transfer23、 transfe…

Python实现FFT及IFFT

运行环境及编译工具 WindowsVS Code 编程语言及库版本 库版本Python3.7.0copy无numpy1.19.2opencv3.4.2PIL8.1.0matplotlib3.4.3 可执行文件 HW_2.pyHW_2.ipynb在HW_2.ipynb中执行&#xff0c;详细程序信息在HW_2.py中 问题 1 通过计算一维傅里叶变换实现图像二维快速傅里…

matlab FFT 和IFFT

代码&#xff1a; fs100;N128; n0:N-1;tn/fs; xsin(2*pi*40*t)sin(2*pi*15*t); subplot(221);plot(n,x,b); xlabel(时间/s);ylabel(x);title(原始信号); grid on;yfft(x,N); magabs(y); fn*fs/N; subplot(222);plot(f(1:N/2),mag(1:N/2)*2/N,b); xlabel(频率/Hz);ylabel(振幅)…

基于vivado实现FFT/IFFT

文章目录 前言一、基本过程二、vivado配置1.新建工程2.调用DDS的IP核2.调用FFT的IP核 三、编写Verilog程序1.顶层文件fft.v2.仿真文件fft_tb.v 四、运行仿真1. 运行仿真设置2. 仿真波形设置3. 结果分析 前言 使用vivado2018.3实现FFT&#xff0f;IFFT&#xff0c;过程比较详细…

python fft ifft

文章目录 条件代码实例 条件 任何一个满足狄利克雷条件的函数都可以通过傅里叶基数展开。 numpy和scipy中都有fft变换&#xff0c;且效果都是一样的。 代码 import numpy as np from scipy.fftpack import fft,ifft import matplotlib.pyplot as plt from matplotlib.pylab …

FFT专题:IFFT后信号如何重建

ifft(outFFTData, g_fft_temp, inFFTData, g_twiddle_ifft, twiddle_stride, F_WLEN);//思考ifft输出的复数结果怎么给到硬件输出 之前一直关注FFT后信号奔赴到频域处理,那么频域处理完后,怎么重建信号呢? 给出一段FFT和IFFT函数源码 int nFrameRunCount 0;#pragma section…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换&#xff0c;是MATLAB中计算信号频谱的函数&#xff0c;使用方法是fft(x)&#xff0c;直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

信号处理中的反傅里叶变换(IFFT)原理

信号处理中&#xff0c;经常需要将信号转换到频域进行分析&#xff0c;有时候还会从频域转回时域&#xff0c;用到FFT和IFFT函数。 FFT变换是将信号从时域转换到频域&#xff0c;在时域看起来复杂的信号转换到频域看起来就方便容易了很多。但有时候也需要将频域信号转换到时域…

adb下载、安装、环境配置

一&#xff1a;adb安装 adb下载链接&#xff1a;https://pan.baidu.com/s/1Vd6KyZ6vT2Qtmhazwre4OQ 提取码&#xff1a;3dx1 安装&#xff1a; 1.双击adb.exe文件&#xff0c;并运行。 2.添加环境变量&#xff1a; 右击计算机–属性—高级系统设置—高级—环境变量—新建&…

windows下载安装adb(极其简单)

单独安装adb&#xff0c;不安装sdk 下载adb Google很好的心&#xff0c;直接放出ADB的档案供人下载。下档路径如下&#xff1a; Windows版本&#xff1a;https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本&#xff1a;https://dl.google…

ADB-adb命令安装app

下载adb 安装adb 将名称中含有adb的文件&#xff0c;和fastboot.exe复制到 c:/windows/system32目录将名称中含有adb的所有文件复制到 c:/windows/system目录将adb.exe和AdbWinApi.dll复制到c:/windows/SysWoW64目录 有线安装apk 连接上数据线&#xff0c;然后把手机开发者模…

adb详细教程(一)-下载安装与环境变量配置

对于Android开发来说&#xff0c;adb是再熟悉不过的调试工具 但其实对于移动端的测试来说&#xff0c;adb也是一个十分重要的、能够提高测试工作效率的工具。 文章目录 一、介绍二、下载地址三、安装四、配置环境变量 一、介绍 全称 adb全称全称为Android Debug Bridge&#x…

mac下载安装adb环境

目录 方法一1、下载安装包2、下载完成后进行解压&#xff0c;目录路径注意不得包含中文3、配置环境变量4、验证安装是否成功 方法二1、安装homebrew2、安装adb3、运行adb 方法一 1、下载安装包 安装包下载地址 &#xff1a;https://developer.android.com/studio/releases/pl…

adb工具下载安装

一、adb环境配置 adb即Android Debug Bridge&#xff0c;就是可以通过窗口命令&#xff0c;使在pc端可以调试安卓移动端的一个工具包 我这里是默认电脑已经安装SDK的&#xff0c;如果没有也没关系&#xff0c;直接网上下载一个adb工具包一样的https://developer.android.goo…

adb环境配置

adb环境配置 1.下载工具包 工具包&#xff1a;platform-tools_r30.0.4-windows.zip 获取途径1&#xff1a;链接: https://pan.baidu.com/s/17BiARFlgsQa2wDETmoJIvQ?pwddsd2 提取码: dsd2 获取途径2&#xff1a;https://developer.android.google.cn/studio/releases/plat…

android adb驱动官方下载,adb驱动下载

这里给你简单的介绍一下adb驱动:adb驱动就是电脑与android设备的通信的客户端驱动程序。使用它可以直接操作管理android模拟器或者真实的andriod设备。 adb驱动百科介绍: Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的。 adb的全称…

windows ——adb下载与安装

一、adb下载 链接&#xff1a;https://pan.baidu.com/s/1D3eOkHsuAnZd6WoFEVC7xQ 提取码&#xff1a;sc94 二、adb安装 双击 adb-setup-1.3.exe 安装 可以查看此安装教程[转载]&#xff1a;http://m.mz6.net/detail/4506-13.html 三、adb安装成功验证 键盘快捷键&#xff1a;Wi…

adb下载安装教程(已安装Android studio)

adb下载安装教程&#xff08;已安装Android studio&#xff09; ①找到adb.exe的绝对路径如下&#xff1a; ②将绝对路径放入环境变量path中&#xff08;绝对路径不带入adb.exe&#xff09; 右击“此电脑”>“属性”>”高级系统设置“>”环境变量“>”path“ 双…

ADB下载及常用命令

ADB&#xff0c;即 Android Debug Bridge&#xff0c;它是 Android 开发/测试人员不可替代的强大工具 文章目录 预先准备adb的平台工具软件包下载配置环境变量 连接设备确认连接状态\查询已连设备USB 连接无线连接&#xff08;Android11 及以上&#xff09; 应用管理查看应用列…