基于FPGA的sigma delta ADC软件无线电设计

这篇具有很好参考价值的文章主要介绍了基于FPGA的sigma delta ADC软件无线电设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

        Sigma-Delta ADC是一种目前使用最为普遍的高精度ADC结构,在精度达到20位以上的场合,Sigma-Delta是必选的结构。通过采用过采样、噪声整形以及数字滤波技术,降低对模拟电路的设计要求,实现了其他类型的ADC无法达到的高精度和低功耗。通常情形下,各种类型ADC的精度与速度关系如图1所示。

基于FPGA的sigma delta ADC软件无线电设计

         Sigma-Delta ADC的运作过程,就是把待测信号Vin与参考电压(±Vref)之间的差值进行不断的累积并通过反馈令这个差值趋于零。

实质上ADC就是除法器。

Dout=(Vin/Vref) * 2^n

       一个分辨率为n位的ADC完成了一个以Vref为除数的除法,并且把结果用n位二进制数来表达。

那么什么是Sigma-Delta ADC?

       Sigma-Delta最终实现的,与所有的ADC一样,就是完成除法。模拟集成电路中除法器是不可实现的,但是模拟电路可以非常好的实现加法和减法(用运放及模拟开关对电容进行充放电)。Sigma-Delta ADC正是用加法和减法去实现除法的一种方式。

基于FPGA的sigma delta ADC软件无线电设计

        具体来说,如图2所示,Delta-Sigma ADC的工作原理是由差动器、积分器和比较器构成调制器,它们一起构成一个反馈环路。调制器以大大高于模拟输入信号带宽的速率运行,以便提供过采样。模拟输入与反馈信号(误差信号)进行差动(delta)比较。该比较产生的差动输出馈送到积分器(sigma)中。然后将积分器的输出馈送到比较器中。比较器的输出同时将反馈信号(误差信号)传送到差动器,而自身被馈送到数字滤波器中。

系统分为两个部分,

第一部分是sigma delta ADC把接收天线接收的交流信号转化成数字信号。

      输入频域因为是AM信号,所以在5K~2M HZ之间,ADC的精度要求不限,能满足一般音频处理即可(满足演示要求,建议采样64MHZ上限,8位)此部分设计需要用到FPGA开发板上的2个LVDS输入端口。 此部分ADC分为两个部分modulator和decimator。

       第二部分输入为第一部分的数字输出信号,进行一般的软件无线电设计即可。按照一般收音机的设计,将硬件全部由软件(FPGA)来替代。收音机的挑台旋转按钮可用开发板上的开关来设计。

二、核心程序

`timescale 1 ns / 1 ns
module tops(
            i_clk,
				i_rst,
				i_ADC,
				i_sel,
				i_adjust1,
				i_adjust2,
			   o_ADCLK2,
            o_DACLK2,
            o_DAC
           );

input             i_clk;
input             i_rst;
input signed[9:0] i_ADC;
input             i_sel;
input             i_adjust1;					
input             i_adjust2;	
output            o_ADCLK2;
output 				o_DACLK2;					
output signed[9:0]o_DAC;				  
			  
 
			  
wire CLK2;
pllclk2	pllclk2_u(
	.areset (i_rst),
	.inclk0 (i_clk),
	.c0     (o_ADCLK2),
	.c1     (CLK2),
	.locked ()
	);
	
assign o_DACLK2 = ~CLK2;
					 
wire signed[7:0]tmps;					 
AMdemods AMdemods_u(
                .i_clk     (CLK2),
					 .i_rst     (i_rst),
					 .i_din     (i_ADC[9:2]),
					 .i_sel     (i_sel),
					 .i_adjust1 (i_adjust1),
					 .i_adjust2 (i_adjust2),
					 .o_am      (),
					 .o_dout    (tmps)
               );					 
					 
assign o_DAC = {tmps[7],tmps[7],tmps};					 
					 

endmodule 
A01-120
`timescale 1 ns / 1 ns

module am_signal(
                 i_clk,
					  i_rst,
					  o_dout
                );

parameter NN  = 22949673;
parameter NN2 = 22949673*20;
parameter AM  = 1;					 
input i_clk;
input i_rst;
output signed[7:0]o_dout;

wire signed[9:0]o_fsin;
wire signed[9:0]o_fcos;
nco_ip nco_ip_u1(
					.phi_inc_i (NN),
					.clk       (i_clk),
					.reset_n   (~i_rst),
					.clken     (1'b1),
					.fsin_o    (o_fsin),
					.fcos_o    (o_fcos),
					.out_valid ()
					);

					
wire signed[9:0]o_fsin2;
wire signed[9:0]o_fcos2;
nco_ip nco_ip_u2(
					.phi_inc_i (NN2),
					.clk       (i_clk),
					.reset_n   (~i_rst),
					.clken     (1'b1),
					.fsin_o    (o_fsin2),
					.fcos_o    (o_fcos2),
					.out_valid ()
					);					
					
					
reg signed[19:0]tmps;				
always @(posedge i_clk or posedge i_rst)
begin  
     if(i_rst)
	  begin
	  tmps <= 20'd0;
	  end
else begin
	  tmps <= o_fsin * o_fcos2;
     end	  
end   					
					
assign o_dout = tmps[18:11];






endmodule 
`timescale 1 ns / 1 ns
module AMdemods(
                i_clk,
					 i_rst,
					 i_din,
					 i_sel,
					 i_adjust1,
					 i_adjust2,
					 o_am,
					 o_dout
               );
					
parameter NN2 = 22949673*20;

input             i_clk;
input             i_rst;
input signed[7:0] i_din;
input             i_sel;
input             i_adjust1;					
input             i_adjust2;					
output signed[7:0]o_am;					
output signed[7:0]o_dout;	


reg signed[7:0]tmps;	
am_signal am_signal_u(
                 .i_clk (i_clk),
					  .i_rst (i_rst),
					  .o_dout(o_am)
                );
					
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  tmps <= 8'd0;
	  end
else begin
          if(i_sel == 1'b1)
			 tmps <= o_am;
	  else  
          tmps <= i_din; 	  
     end
end					
					

//AM demodulation
reg[31:0]PHASE;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  PHASE <= NN2;
	  end
else begin
          if(i_adjust1 == 1'b1)
			 PHASE <= NN2 + 32'd1;
	  else
	       PHASE <= PHASE;
			 
          if(i_adjust2 == 1'b1)
			 PHASE <= NN2 - 32'd1;
	  else	  
	       PHASE <= PHASE;
     end
end


wire signed[9:0]o_fsin;
wire signed[9:0]o_fcos;
nco_ip nco_ip_u(
					.phi_inc_i (PHASE),
					.clk       (i_clk),
					.reset_n   (~i_rst),
					.clken     (1'b1),
					.fsin_o    (o_fsin),
					.fcos_o    (o_fcos),
					.out_valid ()
					);		

reg signed[17:0]tmps2;				
always @(posedge i_clk or posedge i_rst)
begin  
     if(i_rst)
	  begin
	  tmps2 <= 18'd0;
	  end
else begin
	  tmps2 <= tmps * o_fcos;
     end	  
end
 
		
filter filter_u(
              .i_clk (i_clk),
				  .i_rst (i_rst),
				  .i_din (tmps2[16:9]),
				  .o_dout(o_dout)
             );
endmodule 

三、测试结果

首先使用MATLABAM收音机的基本功能进行验证

基于FPGA的sigma delta ADC软件无线电设计

下面我们主要介绍FPGA部分,FPGA部分分为三个部分:

    这里,我们主要基于DE0开发板进行设计,下面首先分析一下DE0开发板。

基于FPGA的sigma delta ADC软件无线电设计

整个系统的接口含义如下所示:

表一、顶层模块接口定义

名称

位宽

方向

描述

备注

I_clk

1

输入

时钟

上升沿有效,频率为开发板的晶振

I_rst

1

输入

复位

单周期低电平有效,下降沿有效

I_ADC

10

输入

A/D采样数据

有符号二进制

O_ADCLK2

1

输出

A/D采样时钟

O_DACLK2

1

输出

D/A采样时钟

O_DAC

12

输出

D/A采样数据

偏移二进制

管脚分配如下所示:

基于FPGA的sigma delta ADC软件无线电设计

基于FPGA的sigma delta ADC软件无线电设计文章来源地址https://www.toymoban.com/news/detail-454761.html

到了这里,关于基于FPGA的sigma delta ADC软件无线电设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件无线电通达杯比赛shuibi(上)

    以前没打过这种比赛,接到通知已经开始1个月了,而这软件无线电之前一点也没有做过,加入比赛群,基本上都是大三大四通信工程的人居多,而我只是一个菜鸡光电生,在线瑟瑟发抖。拉来了两个不靠谱的队友(基本上只是口头支持,到最后,基本上是我带低年级搞完的)

    2023年04月16日
    浏览(39)
  • 软件无线电安全之HackRF One初探

    HackRF是一款开源软件无线电(SDR)平台,由Great Scott Gadgets公司推出。它具有广泛的频率覆盖范围,从1 MHz到6 GHz,支持大部分常见的无线通信频段。采用软件定义无线电技术,HackRF提供了自定义和控制无线信号处理的能力,包括接收、发送、解码和干扰。配备高速ADC和DAC,它

    2024年04月25日
    浏览(42)
  • 开源ZYNQ AD9361软件无线电平台

    (1) XC7Z020-CLG400 (2) AD9363 (3) 单发单收,工作频率400MHz-2.7GHz (4) 发射带PA,最大输出功率约20dbm (5) 接收带LNA,低噪声系统 (6) 支持USB供电 (7) 1路千兆以太网RJ-45接口 (8) 板载UART/JTAG二合一接口 (9) 标准信用卡尺寸85mm*56mm 框图如下: 实物图如下: 原理图

    2024年02月14日
    浏览(48)
  • 通信算法之130:软件无线电-接收机架构

      1. 超外差式接收机    2.零中频接收机  3.数字中频接收机    

    2023年04月10日
    浏览(42)
  • 无中频软件无线电芯片AD9361的基本介绍

    AD9361在咱们产品中的很多,这也是一个很典型软件无线电芯片架构。我们在这里从软件角度简单介绍一下:   抛弃硬件细节,对于我们软件程序员来说面对的只有两个通路:数据通路和控制通路。 先说控制通路, 通过SPI读写AD9361的寄存器实现对芯片的控制,在实际实现时候

    2024年02月09日
    浏览(40)
  • USRP 简介,对于NI软件无线电你所需要了解的一切

    通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发,被研究实验室、大学和业余爱好者广泛使用。 大多数 USRP 通过以太网线连接到主机,基于主机的软件使用该链路来控制 USRP

    2024年02月09日
    浏览(38)
  • 软件无线电处理平台设计方案:330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡 图形图像硬件加速器

    一、板卡概述    本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,北京太速科技板卡支持PXIE标准协议,其中XJ3标准高速差分接口,支持PCIeX 2。软件具有windows,Linux驱动。 二、功能和技术指标: 三、

    2024年02月22日
    浏览(49)
  • sigma-delta ADC原理

    主要是想大致了解Sigma-delta ADC是怎么工作的,写了个乱七八糟的代码来简单看下。很粗略的解释,主要给自己参考。 successive approximation register adc,简单理解为一个采样开关和采样电容。采样开关定时闭合,忽略暂态,则采样电容上的电压等于采样开关闭合时刻的输入电压。

    2023年04月11日
    浏览(47)
  • 生活中离不开无线电,了解无线电管理常识

    一、无线电设备管理规定摘要 为维护空中电波秩序,防止有害干扰,确保无线电频率资源的有效利用保障用户合法权益,严厉打击走私活动,国家信息产业部无线电管理局信部无〔1999〕363号文《关于加强无线电发射设备管理的通告》中对如何加强无线电设备管理作出如下规

    2024年02月05日
    浏览(50)
  • 通过USRP B200软件无线电SDR方式解码无人机坐标飞手坐标,实现无人机探测侦测监控,继而实现反制压制

    环境 详情 电脑 联想 系统 Windows gnuradio gnuradio-3.7.5 uhd UHD-Mirror-release_003_009_002 USRP 型号 USRP-B200-mini          无人机的应用领域越来越广泛,但是其目前大范围广泛使用给安全、安保和隐私带来了许多风险。例如,攻击方可能会使用无人机进行监视、运输非法物品,或通过侵

    2024年02月09日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包