精华内容
下载资源
问答
  • 常见的数字调制方法

    2021-04-01 15:14:06
    常见的数字调制方法如: ASK ——幅移键控调制,把二进制符号0和1分别用不同的幅度来表示。 FSK ——频移键控调制,即用不同的频率来表示不同的符号。如2KHz表示0,3KHz表示1。 PSK——相移键控调制,通过二进制...

    常见的数字调制方法如:

    ASK ——幅移键控调制,把二进制符号0和1分别用不同的幅度来表示。

    FSK ——频移键控调制,即用不同的频率来表示不同的符号。如2KHz表示0,3KHz表示1。

    PSK——相移键控调制,通过二进制符号0和1来判断信号前后相位。如1时用π相位,0时用0相位。

    GFSK——高斯频移键控,在调制之前通过一个高斯低通 滤波器来限制信号的频谱宽度 。

    GMSK —— 高斯滤波最小频移键控,GSM系统所用调制技术。

    QAM——正交幅度调制

    DPSK(Differential Phase Shift Keying)——差分相移键控。指利用调制信号前后码元之间载波相对相位的变化来传递信息。

    BPSK(Binary Phase Shift Keying)——二进制相移键控。是把模拟信号转换成数据值的转换方式之一,利用偏离相位的复数波浪组合来表现信息键控移相方式。BPSK使用了基准的正弦波和相位反转的波浪,使一方为0,另一方为1,从而可以同时传送接受2值(1比特)的信息。由于最单纯的键控移相方式虽抗噪音较强但传送效率差,所以常常使用利用4个相位的QPSK和利用8个相位的8PSK

    QPSK(Quadrature Phase Shift Keying)——正交相移键控,是一种四进制相位调制,它分为绝对相移和相对相移两种。由于绝对相移方式存在相位模糊问题,所以在实际中主要采用相对移相方式DQPSK。具有良好的抗噪特性和频带利用率,广泛应用 于卫星链路、数字集群等通信业务。

    MPSK(multiple phase shift keying)——多进制数字相位 , 又称多相制,是二相制的拓展延伸。

    mQAM——多电平正交调幅

    mPSK——多相相移键控

    TCM——网格编码调制

    VSB——残留边带调制

    OFDM——正交频分复用调制

    总的来说:数字调制是把数字基带信号变换为数字带通信号。

    展开全文
  • 几种常见的数字调制方法 ASK,FSK,GFSK

    千次阅读 2015-09-25 11:58:00
    说说常见的射频调制方式吧。 常见的有ASK,FSK,GFSK。 1、ASK(Amplitude Shift Keying),即振幅键控方式,这种调制方式是根据信号的不同,调节载波的幅度,载波的频率是保持不变的。 因此载波幅度是随着调制...

    说说常见的射频调制方式吧。

    常见的有ASK,FSK,GFSK。

    1、ASK(Amplitude Shift Keying),即振幅键控方式,这种调制方式是根据信号的不同,调节载波的幅度,载波的频率是保持不变的。

       因此载波幅度是随着调制信号而变化的,最简单的方式就是载波在调制信号的控制下表现为通断,由此也可由引出另外一种调试方式就是多电平MASK,顾名思义M为Multi,是一种较高效的传输方式,但由于抗噪声能力较差,所以一般不常见

    2、FSK(Frequency Shift Keying),即频移键控方式,这种调试方式是利用载波的频率变化来传递数字信息。

      例如20KHz的频率用来表示1,10KHz的频率用来表示0。

    常见的数字调制方法 ASK,FSK,GFSK - 杭州众悦 - 杭州众悦

    几种常见的数字调制方法 ASK,FSK,GFSK - 杭州众悦 - 杭州众悦

    几种常见的数字调制方法 ASK,FSK,GFSK - 杭州众悦 - 杭州众悦

    3、GFSK(Gauss Frequency Shift Keying) 高斯频移键控,与FSK类似,就在FSK前通过一个高斯低通滤波器来限制信号的频谱宽度。

    几种常见的数字调制方法 ASK,FSK,GFSK - 杭州众悦 - 杭州众悦

    转载于:https://my.oschina.net/tusir/blog/511074

    展开全文
  • 针对七种常见的数字调制信号,提取了六个瞬时特征参数,其中[Rσa]参数是改进得到的,同理类推得到[Rσp]。为了在保持基本粒子群(Particle Swarm Optimization,PSO)算法优点的基础上进一步提高算法的性能,增加了...
  • 利用深空背景中常见的星点作为在轨MTF测量的目标,结合点源法研究其在轨MTF测量的方法,利用高斯拟合定位和多图配准重构点扩展函数,提出最终基于星点的MTF检测方法。仿真和实验结果表明:所提方法的抗噪性好,当随机噪声...
  • 为了测算中分辨率光谱成像仪在轨调制传递函数(MTF),提出了一种基于图像中非理想阶跃目标处理方法。利用仅一侧具有较好均匀性目标,在线扩散函数(LSF)对称性假设下,实施基于阶跃响应思想测算方法。与传统...
  • 方法通过信号延迟复共轭相乘相位特征分析,提出了两个新分类特征参数,结合对信号非线性变换谱特征和信号包络分析,应用层次结构判决树分类器实现了常见数字信号自动识别。 仿真结果表明,本文提出分类...
  • 出于这个缘故,本人根据多年酌维修经验,总结了龟动车充电器的常见故障维修方法,供大家参考。  常见故障维修  由于电动车充电器输入电路工作在高电压、太电流状态下,因此,故障率最高。如高压大电流...
  • 视频信号基带传输方式把视频信号调制成射频信号传输方式视频信号转换成数字信号传输方式)
  • 硅光子是新一代大规模光/电集成理想技术,可实现各种常见光器件,其中硅微环电光调制器是一个重要器件。相对于幅度光调制,相移键控(PSK)光调制具有更好功率利用率,是代替普通开关键控(OOK)调制方式较好技术。...
  • 基于FPGA映射调制实现

    千次阅读 2020-05-31 16:09:32
    基于FPGA的映射调制实现项目简述数学建模MATLAB仿真FPGA代码FPGA映射的代码FPGA的映射测试代码FPGA与MATLAB的交叉验证小结参考文献总结...首先我们常见的QPSK与16-QAM的星座图如下: 由星座图可以得到编码之后的如下信

    项目简述

    在通信过程中,经常能碰见调制解调,这里将讲解一种映射调制的方法,并且给出相应的代码供大家学习。一般调制位于无线通信中比较靠后的未知,在交织之后。这里的映射调制并没有介入载波,只是进行了相应的星座图映射,至于最后载波的加入,将在后面的博客中学习。

    数学建模

    首先我们常见的QPSK与16-QAM的星座图如下:
    在这里插入图片描述
    由星座图可以得到编码之后的如下信息:
    QPSK编码对应坐标轴大小
    在这里插入图片描述
    在这里插入图片描述
    16-QAM编码对应坐标轴大小
    在这里插入图片描述
    在这里插入图片描述

    星座图映射的对象为位交织输出 u=(u0,u1,...,uNldpc2,uNldpc1)u=(u_0,u_1,...,u_{N_{ldpc}-2},u_{N_{ldpc}-1}) , Nldpc=16200N_{ldpc}=16200主要是因为LDPC编码之后每包的长度就是16200,星座图映射分为两步:
    (1)解复用,将uu 分解为 NsubstreamsN_{substreams} 个子流
    (2)将 NsubstreamsN_{substreams} 个子流根据调制方式映射到对应星座图。

    那么对于不同的调制方式, $N_{substreams}的值如下:

    Modulation Number of sub-streams NsubstreamsN_{substreams}
    QPSK 2
    16-QAM 8

    首先我们要完成解复用,其实说白了解复用就是一个串并变换。

    在这里插入图片描述
    解复用模块将输入vdiv_{di} 映射到输出bi,jb_{i,j},其中ii为第ii个子流,j=di div Nsubstreamsj=di \ div\ N_{substreams}。其中对于QPSK调制,i与di mod Nsubstreamsdi \ mod\ N_{substreams}的值一样,对于16-QAM则进行了相应的变换,如下表:

    Modulation format QPSK
    di mod Nsubstreamsdi \ mod\ N_{substreams} 0 1
    e 0 1
    Modulation format 16-QAM
    di mod Nsubstreamsdi \ mod\ N_{substreams} 0 1 2 3 4 5 6 7
    e 7 1 4 2 5 3 6 0

    进行完解复用之后就应该进行相应的映射操作,将会将上面产生的NsubstreamsN_{substreams}个并行通道映射到相应的σ\sigma个码元,映射的关系如下表:

    Modulation NsubstreamsN_{substreams} σ\sigma
    QPSK 2 2
    16-QAM 8 4

    对于 QPSK 调制, Nsubstreams 个子流每次组成一个调制符号,而对于 16-QAM,NsubstreamsN_{substreams} 个子流每次组成两个调制符号,前半个子流组成一个调制符号,后半个子流组成一个调制符号。具体公式如下:
    定义调制符号:ydo=[y0,do,...,yσ1,do]y_{do}=[y_{0,do},...,y_{\sigma-1,do}]
    对于QPSK调制:[y0,do,...,yσ1,do]=[b0,do,...,bNsubstreams1,do][y_{0,do},...,y_{\sigma-1,do}]=[b_{0,do},...,b_{N_{substreams}-1,do}]
    对于16-QAM调制:[y0,2do,...,yσ1,2do]=[b0,do,...,bNsubstreams/21,do][y_{0,2do},...,y_{\sigma-1,2do}]=[b_{0,do},...,b_{N_{substreams}/2-1,do}]
    [y0,2do+1,...,yσ1,2do+1]=[bNsubstreams/2,do,...,bNsubstreams1,do][y_{0,2do+1},...,y_{\sigma-1,2do+1}]=[b_{N_{substreams}/2,do},...,b_{N_{substreams}-1,do}]
    然后就完成了相应的映射操作。也就将原来的码映射到了星座表中的坐标上。

    MATLAB仿真

    上面我们已经讲解了映射调制的星座图对应关系,但是相信大家还都不是特别明白,接下来给出相应的MATLAB代码供大家学习,学习的时候需要结合数学模型与MATLAB仿真相互学习。

    sim_options = struct(...
        'CONSTELLATION', '16-QAM' ...
    );
    fid1 = fopen('mapper_in.txt','r');
    DataIn = fscanf(fid1,'%d');
    %------------------------------------------------------------------------------
    %------------------------------------------------------------------------------
    switch sim_options.CONSTELLATION
        case 'QPSK'
            V        = 2;                       % Bits per cell
        case '16-QAM'
            V        = 4;
        otherwise, error('sim_options UNKNOWN CONSTELLATION');
    end
    %------------------------------------------------------------------------------
    % Parameters Definition
    %------------------------------------------------------------------------------
    CONSTEL  = sim_options.CONSTELLATION;
    %------------------------------------------------------------------------------
    % Procedure
    %------------------------------------------------------------------------------
    %bits to cells
    data = DataIn';
    streams = V * 2;
    switch CONSTEL
      case 'QPSK'
        mapping = [0 1 2 3] + 1;
      case '16-QAM' 
          mapping = [7 1 4 2 5 3 6 0] + 1;
    end
    
    numBits  = length(data);
    numCells = floor(numBits/streams);
    numBits  = numCells*streams;
    data = data(1:numBits);
    %make streams
    cells = reshape(data', streams, size(data,2)/streams)';
    %swap this to agree with spec, above line maps the wrong way
    cells(:, mapping) = cells;
    
    
    cells = reshape(cells', [] , 1);
    cells = reshape(cells, V , [])';
    
    if ~isempty(cells)
        DataOut = bi2de(cells,'left-msb');
    else
        DataOut = [];
    end
    save DataOut.mat DataOut
    

    上面的代码主要是源于电子发烧友学院,只是博主为了方便理解,进行了一小部分的更改。需要的同学可以关注上面的课程信息。阅读完相应的MATLAB代码,再观察前面的数学模型,会发现映射调制非常简单。

    设置调制方式:
    在这里插入图片描述
    找到输入数据:
    在这里插入图片描述
    设置映射方式:
    在这里插入图片描述
    解复用:
    在这里插入图片描述
    映射到星座图:
    在这里插入图片描述

    FPGA代码

    上面我们已经详细介绍了映射调制的原理与MATLAB代码,这里将给出相应的MATLAB代码。代码非常简单,这里也就不对说了。

    FPGA映射的代码

    tx_Mapper模块:

    `timescale 1ns / 1ps
    // *********************************************************************************
    // Project Name : OSXXXX
    // Author       : zhangningning
    // Email        : nnzhang1996@foxmail.com
    // Website      : 
    // Module Name  : tx_Mapper.v
    // Create Time  : 2020-05-31 11:23:32
    // Editor       : sublime text3, tab size (4)
    // CopyRight(c) : All Rights Reserved
    //
    // *********************************************************************************
    // Modification History:
    // Date             By              Version                 Change Description
    // -----------------------------------------------------------------------
    // XXXX       zhangningning          1.0                        Original
    //  
    // *********************************************************************************
    
     
     module tx_Mapper(
    	input  	     	      	clk 						,
    	input  	     	      	rst_n 						,
    	
    	input  	     	      	s_config_tvalid 			,
    	input  	     	      	s_config_tdata 				,
    	input  	     	      	s_data_tvalid				,
    	input  	     	      	s_data_tdata				,
    	output 	reg  	      	s_data_tready				,
    	input  	     	      	s_data_tlast				,
    						
    	output 	reg  	      	m_data_tvalid				,
    	output 	reg  	[ 3:0]	m_data_tdata				,
    	input  	     	      	m_data_tready				,
    	output 	reg  	      	m_data_tlast					 		 
    );
     
    //========================================================================================\
    //**************Define Parameter and  Internal Signals**********************************
    //========================================================================================/
    
    reg        					mode_type					;
    reg 				[12:0] 	Ncell 						;
    
    reg 				[ 1:0]  QPSK_cnt					;
    reg 				[ 3:0]  QPSK_data					;
    reg 				        map_ena						;
    reg 				[ 7:0]  QPSK_mod_data				;
    reg        					QPSK_mod_valid				;
    
    
    reg 				[ 2:0]  QAM_cnt 					;
    reg 				[ 7:0]  QAM_data					;
    reg 				        map_enb						;
    reg 				[ 7:0]  QAM_mod_data				;
    reg 				        QAM_mod_valid				;
    
    reg 				       	map_wea 					;
    reg 				[11:0] 	map_addra 					;
    reg 				[ 7:0]  map_dina 					;
    reg 				[12:0] 	map_addrb 					;
    wire				[ 3:0]  map_doutb 					;
    
    reg        					data_ordy					;
    reg 				[12:0] 	m_cnt						;
    reg        					s_data_tvalid_reg 			;
    wire       					start_data_invld 		 	;	
    	
     
    //========================================================================================\
    //**************     Main      Code        **********************************
    //========================================================================================/
    
    assign start_data_invld 	= 			~s_data_tvalid_reg && s_data_tvalid;       
    	
    //====================================================================================
    // configure parameter
    //====================================================================================
    always@(posedge clk)
    	if(rst_n == 1'b0)
    		mode_type 			<= 			0;
    	else if(s_config_tvalid == 1'b1)
    		mode_type 			<= 			s_config_tdata; ///mode_type = 0,QPSK ; mode_type = 1 ,16QAM;
    
    	 
    always@(*)
        case(mode_type)
    		1'b0	: 		Ncell 		= 		13'd8100;
    		1'b1	: 		Ncell 		= 		13'd4050;
    		default	: 		Ncell 		= 		13'd0;
    	endcase
    	
    always@(posedge clk)
    	if(mode_type == 1'b0 && s_data_tvalid == 1'b1)
    		QPSK_cnt 		<=      	QPSK_cnt + 1'b1;
    	else
    		QPSK_cnt 		<=      	0;
    	   
    always@(posedge clk)
    	if(rst_n == 1'b0)
    		QPSK_data 		<=      	0;
    	else case(QPSK_cnt)	
    		2'b00	: 	QPSK_data[0] 	<=      s_data_tdata;
    		2'b01	: 	QPSK_data[1] 	<=      s_data_tdata;
    		2'b10	: 	QPSK_data[2] 	<=      s_data_tdata;
    		2'b11	: 	QPSK_data[3] 	<=      s_data_tdata;
    		default	: 	QPSK_data 		<= 		QPSK_data;
    	endcase
    	
    always@(posedge clk)
    	if(QPSK_cnt == 2'b11)
    		map_ena 		<=			1'b1;
    	else
    		map_ena 		<=      	1'b0;
    	 
    always@(posedge clk)
    	if(map_ena)begin
    		QPSK_mod_data 	<=      	{2'b00,QPSK_data[2],QPSK_data[3],2'b00,QPSK_data[0],QPSK_data[1]};
    		QPSK_mod_valid 	<=      	1'b1;
    	end else begin
    		QPSK_mod_data 	<=      	0;
    		QPSK_mod_valid 	<=      	0;
    	end
    	
    //16QAM
    always@(posedge clk)
    	if(mode_type == 1'b1 && s_data_tvalid)
    		QAM_cnt 		<=      	QAM_cnt + 1'b1;
    	else
    		QAM_cnt 		<=      	0;
    	   
    always@(posedge clk)
    	if(rst_n == 1'b0)
    		QAM_data <=      0;
    	else case(QAM_cnt)
    		3'b000	: 	QAM_data[0] 	<=      s_data_tdata;
    		3'b001	: 	QAM_data[1] 	<=      s_data_tdata;
    		3'b010	: 	QAM_data[2] 	<=      s_data_tdata;
    		3'b011	: 	QAM_data[3] 	<=      s_data_tdata;
    		3'b100	: 	QAM_data[4] 	<=      s_data_tdata;
    		3'b101	: 	QAM_data[5] 	<=      s_data_tdata;
    		3'b110	: 	QAM_data[6] 	<=      s_data_tdata;
    		3'b111	: 	QAM_data[7] 	<=      s_data_tdata;
    		default	: 	QAM_data 		<= 		QAM_data;
    	endcase
        
    always@(posedge clk)
    	if(QAM_cnt == 3'b111)
    		map_enb 		<=  		1'b1;
    	else
    		map_enb 		<=      	1'b0;
    	 
    always@(posedge clk)
    	if(map_enb)begin
    		QAM_mod_data 	<=      	{QAM_data[0],QAM_data[6],QAM_data[4],QAM_data[2],QAM_data[5],QAM_data[3],QAM_data[1],QAM_data[7]};
    		QAM_mod_valid 	<=      	1'b1;
    	end else begin
    		QAM_mod_data 	<=      	0;
    		QAM_mod_valid 	<=      	0;
    	end	
    		
    always@(posedge clk)
    	map_wea 			<=      QAM_mod_valid || QPSK_mod_valid;
    	
    always@(posedge clk)
    	if(mode_type == 0)
    		map_dina 		<=	  		QPSK_mod_data ;
    	else
    		map_dina 		<=			QAM_mod_data;
    	 
    always@(posedge clk)
    	if(rst_n == 1'b0)
    		map_addra 		<=      	0;
    	else if(mode_type == 0 && map_addra == 12'd4050)
    		map_addra 		<=      	0;
    	else if(mode_type == 1 && map_addra == 12'd2025)
    		map_addra 		<=      	0;
    	else if(map_wea == 1'b1)
    		map_addra 		<=      	map_addra + 1'b1;
    	
    	
    always@(posedge clk)
    	if(map_addra > 12'd3100 && mode_type == 0)
    		map_addrb 		<=      	map_addrb + 1'b1;
    	else if(map_addra > 12'd1800 && mode_type == 1)
    		map_addrb 		<=      	map_addrb + 1'b1;
    	else if(map_addrb < (Ncell-1) && map_addrb > 0)
    		map_addrb 		<=      	map_addrb + 1'b1;
    	else 
    		map_addrb 		<=      	0;
    	  
    //====================================================================================
    // Output
    //====================================================================================
    	  
    always@(posedge clk)
    	if(mode_type)
    		m_data_tdata 	<=      	{map_doutb[0],map_doutb[1],map_doutb[2],map_doutb[3]};
    	else 
    		m_data_tdata 	<=      	map_doutb;
    	  
    always@(posedge clk)
    	if(~rst_n)
    		m_data_tvalid 	<=      	0;
    	else if(map_addrb > 0)
    		m_data_tvalid 	<=      	1;
    	else if(m_cnt == (Ncell -1))
    		m_data_tvalid 	<=      	0;
    	
    always@(posedge clk)
    	if(m_data_tvalid)
    		m_cnt 			<=      	m_cnt + 1'b1;
    	else
    		m_cnt 			<=      	0;  
    	  
    always@(posedge clk)
    	if(m_cnt == (Ncell-2))
    		m_data_tlast 	<=      	1'b1;
    	else
    		m_data_tlast 	<=      	1'b0;
    	  
    	  
    //====================================================================================
    // m_data_tready && s_data_tready
    //====================================================================================
    
    	
    always@(posedge clk)
    	s_data_tvalid_reg 	<=      	s_data_tvalid;
    
    always@(posedge clk)
    	if(rst_n == 1'b0)
    		data_ordy 		<=      	1'b0;
    	else if(s_config_tvalid == 1'b1)
    		data_ordy 		<=      	1'b1;
    	else if(start_data_invld == 1'b1)
    		data_ordy 		<=      	1'b0;
    	else if(m_data_tlast == 1'b1)
    		data_ordy 		<=      	1'b1;
    		 
    always@(posedge clk)
    	s_data_tready 		<=      	data_ordy && m_data_tready;
    	 
    
    map_ram map_ram(
    	.clka 				(clk				),    // input wire clka
    	.wea				(map_wea			),      // input wire [0 : 0] wea
    	.addra				(map_addra			),  // input wire [11 : 0] addra
    	.dina				(map_dina			),    // input wire [7 : 0] dina
    	.clkb				(clk				),    // input wire clkb
    	.addrb				(map_addrb			),  // input wire [12 : 0] addrb
    	.doutb				(map_doutb			)  // output wire [3 : 0] doutb
    );
    	 
    endmodule
    

    这部分代码也是主要参考了电子发烧友学院中的课程。代码非常简单,大家自己阅读学习即可,这里不再详细说明。

    FPGA的映射测试代码

    测试代码

    `timescale 1ns / 1ps
    
    
    module tb_tx_Mapper;
    
    // Inputs
    reg 		clk 				;
    reg 		rstn 				;
    reg 		s_config_tvalid 	;
    wire 		s_config_tdata 		;
    reg 		s_data_tvalid 		;
    reg 		s_data_tdata 		;
    reg 		s_data_tlast 		;
    reg 		m_data_tready 		;
    
    // Outputs
    wire 		s_data_tready 		;
    wire 		m_data_tvalid 		;
    wire [3:0] 	m_data_tdata 		;
    wire 		m_data_tlast 		;
    reg  		s_data_tvalid1 		;
    reg  		s_data_tlast1 		;
    reg  		mode_type 	= 	1	;
    
    assign s_config_tdata = mode_type;
    integer i;
    	initial begin
    		clk = 0;
    		rstn = 0;
    		s_config_tvalid = 0;
    		s_data_tvalid = 0;
    		m_data_tready = 1;
    
            repeat(10) @(posedge clk);#1;
            rstn = 1;
            repeat(5) @(posedge clk);#1;
            s_config_tvalid = 1;
            repeat(1) @(posedge clk);#1;
            s_config_tvalid = 0; 
    		
    	 for(i=1;i<=1;i=i+1) 
    	  	begin
    		repeat(1)@(posedge clk);#1;	//begin	
    		s_data_tvalid = 1;
    		s_data_tlast = 0;
    		repeat(16200*1-1)@(posedge clk);#1;	
    		s_data_tvalid = 1;                  
    		s_data_tlast =1;	
    		repeat(1)@(posedge clk);#1;	//end
    		s_data_tvalid = 0;
    		s_data_tlast = 0;			
    		repeat(5000*1)@(posedge clk);#1;	//IDLE
    	  end
    
    	end
     always #5 clk = ~clk;
    	
    //====================================================================================
    //  input 
    //====================================================================================	 
    	always@(posedge clk)
    	begin
    		s_data_tvalid1 <=`UD s_data_tvalid;
    		s_data_tlast1 <= `UD s_data_tlast;
    	end
    	
    	integer fid1;
    	
    	initial 
    	begin
    	fid1 = $fopen("mapper_in.txt","r");
    	end
    	
    	always@(posedge clk)
    	begin
    		if(s_data_tvalid)
    			$fscanf(fid1,"%d",s_data_tdata);
    	end	
    //====================================================================================
    //  output 
    //====================================================================================
    	integer fid2;
    	initial 
    	begin
    		fid2 = $fopen("ms_mapper_out.txt","w");	
    	end
    	
    	always@(posedge clk)
    	begin
    		if(m_data_tvalid)
    			$fwrite(fid2,"%d\n",m_data_tdata);
    	end
    
    
    tx_Mapper uut (
    	.clk 				(clk 				), 
    	.rst_n 				(rstn 				), 
    	.s_config_tvalid	(s_config_tvalid 	), 
    	.s_config_tdata 	(s_config_tdata 	), 
    	.s_data_tvalid 		(s_data_tvalid1 	), 
    	.s_data_tdata 		(s_data_tdata 		), 
    	.s_data_tready 		(s_data_tready 		), 
    	.s_data_tlast 		(s_data_tlast1 		), 
    	.m_data_tvalid 		(m_data_tvalid 		), 
    	.m_data_tdata 		(m_data_tdata 		), 
    	.m_data_tready 		(m_data_tready 		), 
    	.m_data_tlast 		(m_data_tlast 		)
    );
          
    endmodule
    
    
    

    这部分测试代码的编写没有难度,这里不再介绍。

    FPGA与MATLAB的交叉验证

    通过阅读MATLAB代码,可以知道我们最后会把映射之后的信息保存到相应的mat文件,然后再Modelsim仿真的时候会将映射之后的结果保存到txt文件,那么我们通过MATLAB代码很容易验证实现两块内容的交叉验证。MATLAB代码如下:

    clc;
    clear all;
    load DataOut.mat
    data_lab = DataOut;
       map_data_lab = [data_lab];
       
       fid1 = fopen('ms_mapper_out.txt','r');
       map_data_sim = fscanf(fid1,'%d');
    
       if(isempty(map_data_sim))
       map_data_result = 0;
       else
       map_data_result = sum(abs(map_data_lab - map_data_sim(1:length(map_data_lab))));
       end
      
      a = map_data_result;
    

    运行之后,发现如下结果:
    在这里插入图片描述
    从而验证了我们实验的正确性。

    小结

    相信大家在学习算法的FPGA实现的时候都掌握了上面的流程,就是先在MATLAB中实现,然后再在FPGA中实现,交互验证实现的正确性。

    参考文献

    [1]、电子发烧友学院

    总结

    创作不易,认为文章有帮助的同学们可以关注、点赞、转发支持。为行业贡献及其微小的一部分。或者对文章有什么看法或者需要更近一步交流的同学,可以加入下面的群:
    在这里插入图片描述

    展开全文
  • 自动调制识别属于分类问题,常见的方法有KNN、DT、SVM、CNN。为了提高自动调制识别的准确度,基于GNU Radio生成20种信噪比8种调制类型的IQ数据集,训练深度神经网络模型RESNET进行分类测试。实验结果显示自动调制...
  • 针对雷达信号脉内调制识别算法存在着准确率低的问题,提出一种新的雷达脉内...仿真实验中对8种常见的不同调制类型的雷达信号进行识别,提出的算法在信噪比为-2 dB时识别准确率可以达到90%以上,验证了该方法的有效性。
  • 而谐波失真(THD)、互调失真(IMD)等可产生新的频率成分,或各频率分量的调制产物,这些多余产物与原信号极不和谐,引起声音畸变,粗糙刺耳,这些失真属于非线性失真。在这里,我们分别对谐波失真、互调失真、瞬态...
  • 基于分形调制的良好性能,提出了一种新使用分形调制阵列、基于HVS视觉掩盖图像水印算法,该方法将水印信号进行分形调制得到含水印分形信号嵌入到图像子块DCT中频系数中去,然后进行视觉掩盖.通过大量实验仿真...
  • 基础调制方法 混合调制 混合调制举例 ????2.5信道极限容量 信号失真因素: ①码元传输速率 ②信号传输距离 ③噪声干扰 ④传输媒体质量 奈氏准则 香农公式 学习资料来源:湖科大 计算机网络 ...

    🌲2.4编码与调制

    在这里插入图片描述
    常见编码
    在这里插入图片描述
    基础调制方法
    在这里插入图片描述
    混合调制
    在这里插入图片描述
    在这里插入图片描述

    混合调制举例

    在这里插入图片描述
    🌲2.5信道的极限容量
    信号失真因素:
    ①码元传输速率
    ②信号传输距离
    ③噪声干扰
    ④传输媒体质量
    在这里插入图片描述
    奈氏准则
    在这里插入图片描述
    香农公式
    在这里插入图片描述

    学习资料来源:湖科大 计算机网络

    展开全文
  • 仿真结果表明,在0 dB时该方法对多种单个雷达信号的识别率高达92.7%,对混合雷达信号的识别率为89.7%,说明该方法在较低信噪比下对于常见的5种雷达调制信号及其相应混合而成的信号具有较高的识别率。
  • 根据波形调制方式又可分为方波逆变器、阶梯波逆变器、正弦波逆变器和组合式三相逆变器。对于用于并网系统逆变器,根据有无变压器又可分为变压器型逆变器和无变压器型逆变器。  光伏逆变器结构 ...
  • 此外,最常见的方法通常在生物学上不可行,并且依赖于单个神经元的突触以及瞬时奖励信号以外的局部信息。 当前的软件包是Matlab实施的使用延迟且稀疏的奖励信号的递归神经网络的生物学上可行的训练规则。 在个别试验...
  • 常见的生物电磁效应之一是利用EMF能量对生物物种进行深度加热。 尽管历史悠久,热疗却很少用于肿瘤治疗。 原因是其有争议的结果和复杂的控制。 解决方案之一是将电磁能纳米级地集中在恶性细胞的各个部分上,而不是...
  • 常见的数字调制方法如:ASK ——幅移键控调制,把二进制符号0和1分别用不同的幅度来表示。FSK ——频移键控调制,即用不同的频率来表示不同的符号。如2KHz表示0,3KHz表示1。GFSK——高斯频移键控,在调制之前通过一...
  • 一种用多个载波频率承载数字信息的调制类型。最常见的是用两个频率承载二进制1和0的双频FSK系统。由于FSK具有方法简单、易于实现、抗噪声和抗衰落性能较强等优点,因此在现代数字通信系统的低、中速数据传输中得到了...
  • 在深空激光通信中,脉冲位置调制(PPM)是一种常见的调制方式。而传统的多脉冲位置调制(MPPM)方式中每个信号块发送光脉冲的数目是固定的,随着深空探测技术的不断发展,对调制方式的要求也不断提高,需要对MPPM方式...
  • 调幅和检波电路 广播和无线电通信是利用调制技术把低频声音信号加到高频信号上发射出去的。在接收机中还原的过程叫...常见的连续调制方法有调幅和调频两种,对应的解调方法就叫检波和鉴频。  下面我们先介绍...
  • 本文汇总了GNU Radio中多种常见的调制解调方法及其参考文献链接,便于今后查看,供大家参考!
  • 编码和解码、调制与解调

    万次阅读 多人点赞 2015-04-15 22:46:21
    通信系统中为什么要进行编码和解码?常见的编码方式有哪些?通信系统中为什么要进行调制与解调?调制的分类方法有哪些?
  • 然而,使用闭眼休息状态数据来评估微状态参数时间动态的常见做法可能会导致与警觉性相关系统性混淆。研究人员研究了两个独立数据集中微状态参数动态变化,结果表明,微状态参数与通过脑电功率分析和fMRI全局...
  • 常见的基本拓扑结构■Buck降压■Boost升压■Buck-Boost降压-升压■Flyback反激■Forward正激■Two-Transistor Forward双晶体管正激■Push-Pull推挽■Half Bridge半桥■Full Bridge全桥■SEPIC■C’uk 基本的脉冲...
  • 根据IEEE802.11协议,工作站STA与接入点AP之间能够以不同的调制方式、速率(例如802.11b/g/n之间切换)进行通信,必然需要一种机制,可以协调出收发端彼此均可接受的数据率。速度协商对工作站而言尤其方便,工作站...
  • 常见的方法是使用m序列,不同的m序列分配给不同的用户,每个用户的频率由m序列的状态决定。因此请基于m序列设计跳频序列,并使用PSK方式调制,噪声为高斯白噪声。这里给定了输入的基带信号encode_out.mat。 l 参数...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 222
精华内容 88
关键字:

常见的调制方法