数字信号处理----数字上变频和下变频都FPGA实现

这篇具有很好参考价值的文章主要介绍了数字信号处理----数字上变频和下变频都FPGA实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 任务介绍

数字上变频器(DUC)和数字下变频器(DDC)广泛应用于通信系统,用于信号采样速率的转换。当信号从基带转换至中频( IF )带,需要使用数字上变频器。而数字下变频器是用于将信号从中频( IF )带转换为基带。DUC和DDC通常包括使用混频器进行频率转换,此外还有采样率转换。DUC或DDC的结构主要取决于所需要的转换率。例如,WiMAX (全球互通微波接入)系统典型的转换率为8—10阶。对于如此低的转换率,DUC和DDC只需采用FIR滤波器架构。如果需要更高的转换率,DDC / DUC结构中需要使用级联积分梳状(CIC)滤波器。

二、基本原理

2.1 数字上变频和数字下变频的基本原理

数字上变频,数字信号处理及单片机,fpga开发
数字上变频,数字信号处理及单片机,fpga开发
数字上变频,数字信号处理及单片机,fpga开发

2.2 数字上变频(Digital Up Conversion,DUC)

以余弦信号的上下变频为例,余弦信号经过正交变频后,将信号调制到一个高频部分:

第二部分图片来源:(https://blog.csdn.net/qq_41332806/article/details/108457397)

数字上变频,数字信号处理及单片机,fpga开发
数字上变频,数字信号处理及单片机,fpga开发

2.3 数字下变频(Direct Digital Controller,DDC)

DDC即在数字系统中对信号进行下变频,实现从射频(中频)信号到基带信号的转变。用一个严格同频同相的载波,得到一个高频分量和低频分量,用一个低通滤波器对信号进行滤波即可将信号解调出来。
数字上变频,数字信号处理及单片机,fpga开发
数字上变频,数字信号处理及单片机,fpga开发
DUC & DDC
数字上变频,数字信号处理及单片机,fpga开发

三、基于FPGA实现DUC&DDC

3.1数字上下变频部分

FPGA实现过程基于实数形式的信号流图,主要涉及到DDS产生两路正交本振,ROM存储待下变频信号,乘法模块,FIR滤波,时域抽取等,大部分有现成IP核可供调用。

本次Output Frequency使用 1MHz 与 5MHz。

3.1.1相关IP核配置(未出现的页面使用默认设置)

1.DDS Compiler(6.0)
数字上变频,数字信号处理及单片机,fpga开发
2.Multiplier(12.0)
根据输入进来的A & B 调整 Input Option,不同的输入调整不同的值。
数字上变频,数字信号处理及单片机,fpga开发
数字上变频,数字信号处理及单片机,fpga开发

3.Adder/Subtracter(12.0)
数字上变频,数字信号处理及单片机,fpga开发
在Control 页面 将 Clock Enable(CE) 取消勾选。
4.slice(1.0)
---------------截频
数字上变频,数字信号处理及单片机,fpga开发
5.FIR Compiler(7.2)
滤波部分
数字上变频,数字信号处理及单片机,fpga开发
选择 COE File,配置Coefficient File,其中.coe文件在代码区;打开Channels Specification 配置Input Sampling Frequency 和Clock Frequency 分别为 100 和 100,其他设置默认。

veirilog HDL 代码:

//Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2020.2 (win64) Build 3064766 Wed Nov 18 09:12:45 MST 2020
//Date        : Tue Mar  1 14:42:00 2022
//Host        : DESKTOP-CGJL7H3 running 64-bit major release  (build 9200)
//Command     : generate_target DDC_DUC_wrapper.bd
//Design      : DDC_DUC_wrapper
//Purpose     : IP block netlist
//--------------------------------------------------------------------------------
`timescale 1 ps / 1 ps

module DDC_DUC_wrapper
   (P_0,
    P_1,
    P_2,
    P_3,
    S_cos6MHz,
    aclk_0,
    cos_1MHz,
    cos_5MHz,
    fir_out_data,
    fir_out_data_1,
    s_axis_data_tvalid_0,
    s_axis_data_tvalid_1,
    sin_1MHz,
    sin_5MHz);
  output [31:0]P_0;
  output [31:0]P_1;
  output [47:0]P_2;
  output [47:0]P_3;
  output [31:0]S_cos6MHz;
  input aclk_0;
  output [15:0]cos_1MHz;
  output [15:0]cos_5MHz;
  output [39:0]fir_out_data;
  output [39:0]fir_out_data_1;
  input s_axis_data_tvalid_0;
  input s_axis_data_tvalid_1;
  output [15:0]sin_1MHz;
  output [15:0]sin_5MHz;

  wire [31:0]P_0;
  wire [31:0]P_1;
  wire [47:0]P_2;
  wire [47:0]P_3;
  wire [31:0]S_cos6MHz;
  wire aclk_0;
  wire [15:0]cos_1MHz;
  wire [15:0]cos_5MHz;
  wire [39:0]fir_out_data;
  wire [39:0]fir_out_data_1;
  wire s_axis_data_tvalid_0;
  wire s_axis_data_tvalid_1;
  wire [15:0]sin_1MHz;
  wire [15:0]sin_5MHz;

  DDC_DUC DDC_DUC_i
       (.P_0(P_0),
        .P_1(P_1),
        .P_2(P_2),
        .P_3(P_3),
        .S_cos6MHz(S_cos6MHz),
        .aclk_0(aclk_0),
        .cos_1MHz(cos_1MHz),
        .cos_5MHz(cos_5MHz),
        .fir_out_data(fir_out_data),
        .fir_out_data_1(fir_out_data_1),
        .s_axis_data_tvalid_0(s_axis_data_tvalid_0),
        .s_axis_data_tvalid_1(s_axis_data_tvalid_1),
        .sin_1MHz(sin_1MHz),
        .sin_5MHz(sin_5MHz));
endmodule

仿真:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/01 14:37:41
// Design Name:Born_toward 
// Module Name: dds2_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module dds_duc_2_tb();
  reg aclk_0;
  reg s_axis_data_tvalid_0;
  reg s_axis_data_tvalid_1;
  wire [15:0]cos_1MHz;
  wire [15:0]sin_1MHz;
  wire [15:0]cos_5MHz; 
  wire [15:0]sin_5MHz; 
  wire [31:0]P_0;       //cos1MHz*cos5MHz
  wire [31:0]P_1;       //sin1MHz*sin5MHz
  wire [31:0]S_cos6MHz; //cos(1+5) MHz
  wire [47:0]P_2;       //cos(1+5)MHz * cos5MHz
  wire [47:0]P_3;       //sin(1+5)MHz * sin5MHz
  wire [39:0]fir_out_data;      //滤波后的I路 -> cos(1+5)MHz * cos5MHz
  wire [39:0]fir_out_data_1;    //滤波后的Q路 -> sin(1+5)MHz * sin5MHz

initial begin
    aclk_0 = 0;
    s_axis_data_tvalid_0 = 1'b1;    // 此外为了方便接受数据,此处将准备接受数据标志位s_axis_data_tvalid一直置为1
    s_axis_data_tvalid_1 = 1'b1;    // 此外为了方便接受数据,此处将准备接受数据标志位s_axis_data_tvalid_1一直置为1
    
    #500000;
    $stop;
end

always #5 aclk_0 = ~aclk_0;     //10ns 周期 100MHz

DDC_DUC_wrapper DDC_DUC_wrapper_A
       (.P_0(P_0),
        .P_1(P_1),
        .P_2(P_2),
        .P_3(P_3),
        .S_cos6MHz(S_cos6MHz),
        .aclk_0(aclk_0),
        .cos_1MHz(cos_1MHz),
        .cos_5MHz(cos_5MHz),
        .fir_out_data(fir_out_data),
        .fir_out_data_1(fir_out_data_1),
        .s_axis_data_tvalid_0(s_axis_data_tvalid_0),
        .s_axis_data_tvalid_1(s_axis_data_tvalid_1),
        .sin_1MHz(sin_1MHz),
        .sin_5MHz(sin_5MHz));
endmodule

FIR_BPF_99_1_5M.coe 文件:

Radix=16;
Coefficient_Width=16;
CoefData=0000 0001 0003 0005 0008 0009 0006 fffe ffef ffd8 ffba ff98 ff76 ff5b ff4e ff57 ff7f ffcb 003e 00d5 0187 0244 02f7 0385 03cf 03b8 0325 0206 0056 fe21 fb87 f8ba f601 f3b0 f225 f1be f2d5 f5af fa7b 0144 09f2 1442 1fcc 2c06 384e 43f4 4e49 56aa 5c92 5f9f 5f9f 5c92 56aa 4e49 43f4 384e 2c06 1fcc 1442 09f2 0144 fa7b f5af f2d5 f1be f225 f3b0 f601 f8ba fb87 fe21 0056 0206 0325 03b8 03cf 0385 02f7 0244 0187 00d5 003e ffcb ff7f ff57 ff4e ff5b ff76 ff98 ffba ffd8 ffef fffe 0006 0009 0008 0005 0003 0001 0000;

3.2 FPGA仿真波形

基于vivado run simulation 仿真实现:
数字上变频,数字信号处理及单片机,fpga开发
数字上变频,数字信号处理及单片机,fpga开发
Block Design:
数字上变频,数字信号处理及单片机,fpga开发

四、参考文献

[1] 无线通信的MATLAB和FPGA实现 / 西瑞克斯(北京)通信设备有限公司编著.——北京:人民邮电出版社,2009.6
源工程文件已上传至
https://download.csdn.net/download/Born_toward/86512126?spm=1001.2014.3001.5501
文章来源地址https://www.toymoban.com/news/detail-793790.html

到了这里,关于数字信号处理----数字上变频和下变频都FPGA实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 《FPGA数字信号处理》基于FPGA的32点并行FFT/IFFT设计

    本人FPGA小白,只关注FPGA具体功能实现。如以下描述有误,望评论区指正!以下内容,纯手打,严禁未经过同意擅自转载,谢谢! 相比于基2算法,基4算法对本设计(32点FFT)运算的复杂度并没有显著的降低。 基2按时间抽取的FFT蝶形运算如下图所示: 可以发现输入端与输出端

    2024年04月23日
    浏览(48)
  • FPGA 的数字信号处理:重写 FIR 逻辑以满足时序要求

    在上一篇文章中(FPGA 的数字信号处理:Verilog 实现简单的 FIR 滤波器)演示了在 Verilog 中编写自定义 FIR 模块的初始demo。该项目在行为仿真中正常,但在布局和布线时未能满足时序要求。 所以今天的文章让我们来看看当设计不能满足时序要求时如何分析并解决它。 当在目标

    2024年02月09日
    浏览(44)
  • 【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(偏重滤波)

    目录 一、目标与任务 二、原理介绍 2.1 录音原理 2.2 滤波器的设计原理及设计方法 2.3 IIR 数字滤波器设计原理 2.4 双线性变换法 三、GUI界面设计与实现 四、基于MATLAB仿真 4.1实验过程 4.2 结果分析 五、总结 5.1 函数用法总结 5.2 心得体会 六、参考文献 这个项目在我的B站上有专

    2024年01月18日
    浏览(56)
  • 数字信号处理实验:IIR数字滤波器设计及软件实现

    目录 一、实验目的 二、实验原理 三、实验设备 四、实验内容及步骤 五、实验结果及分析 六、实验主程序框图及程序清单 七、实验总结 熟悉用双线性变换法设计IIR数字滤波器的原理与方法; 学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具FDATool)设

    2024年02月12日
    浏览(42)
  • 【数字化处理】仿生假体控制中肌电信号的数字化处理研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 文献

    2024年02月12日
    浏览(45)
  • 基于FPGA的信号处理算法,FFT法相差检测verilog实现

    基于FPGA的信号处理算法,FFT法相差检测verilog实现 。 1.硬件平台:altera芯片 2.软件平台:Quartusii 13.1 Verilog 3.实现功能:检测两路正弦波的相位差 基于FPGA的信号处理算法,FFT法相差检测verilog实现 引言 在现代通信系统中,信号处理算法在实时性和精度方面面临着巨大的挑战。

    2024年04月16日
    浏览(60)
  • 数字信号处理第四次试验:IIR数字滤波器设计及软件实现

    为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正! (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤

    2024年02月08日
    浏览(44)
  • 【FPGA数据采集测试系统】——基于FPGA的通用数据采集测试系统是当今数字电路领域最热门的研究课题之一。它不仅可以用于数字信号处理,而且也被广泛应用于音频、视...

    【FPGA数据采集测试系统】——基于FPGA的通用数据采集测试系统是当今数字电路领域最热门的研究课题之一。它不仅可以用于数字信号处理,而且也被广泛应用于音频、视频以及其他多媒体领域。 此外,基于FPGA的数据采集测试系统还可以用于传感器接口、机器视觉、自动控制

    2024年02月09日
    浏览(47)
  • 数字信号处理、语音信号处理、现代信号处理

    推荐他的博客: 手撕《数字信号处理》——通俗易懂的数字信号处理章节详解集合 手撕《语音信号处理》——通俗易懂的语音信号处理章节详解集合 手撕《现代信号处理》——通俗易懂的现代信号处理章节详解集合

    2024年02月08日
    浏览(68)
  • 【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调

    最近在做数字信号处理实验的大作业~发现很多变调不变速/变速不变调的文章都讲的没有很清楚,记录一下自己看了很多文章之后整理的思路。 最终大作业 【【科技】 MATLAB鬼畜之小狗唱歌 | |数字信号处理实验大作业-哔哩哔哩】 分帧: 设每一帧长度为 N N N 个点,总长度为

    2024年02月09日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包