色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數字混頻原理及程序設計

FPGA設計論壇 ? 來源:CSDN技術社區 ? 作者:FPGADesigner ? 2022-04-21 10:59 ? 次閱讀

混頻原理

混頻就是把兩個不同的頻率信號混合,得到第三個頻率。在模擬電路中經常見到的就是把接收機接收到的高頻信號,經過混頻變成中頻信號,再進行中頻放大,以提高接收機的靈敏度。

數字電路中最簡單的混頻便是兩個信號做乘法,可以得到它們的和頻信號與差頻信號。數字混頻在通信的調制、解調、DUC(數字上變頻)、DDC(數字下變頻)等系統中應用廣泛。通常把其中一個信號稱為本振信號(local oscillator),另一個信號稱為混頻器的輸入信號。

程序設計

本文的程序設計參考自杜勇老師的書《數字濾波器MATLABFPGA實現-Altera/Verilog版》,對其中部分設計細節做了修改。杜勇老師的這個系列共有三本書,很推薦大家購買學習。不過可能由于篇幅有限,杜勇老師在書中對設計的一些細節和思想沒有做詳細介紹,博主在本文中和大家討論討論。

程序設計系統時鐘5MHz,625kHz的輸入信號與625kHz的本振信號做混頻,根據混頻原理會得到1.25MHz的和頻信號與0Hz(直流),將直流濾除掉得到1.25MHz的有效信號。

設計的頂層模塊接口如下所示:

module Mixer

(

input clk, //5MHz系統時鐘

input rst_n, //低電平有效復位信號

input [9:0] din, //輸入信號

output [9:0] s_oc, //本振信號,625kHz

output out_valid, //NCO輸出有效信號

output [19:0] dout //混頻輸出信號

);

程序中首先生成本振信號。Quartus和Vivado中都提供了類似功能的IP核:Vivado中叫DDS(Direct Digital Synthesizers)Compiler;Quartus中叫NCO(Numerically controlled oscillators)。下面以實例化NCO為例,具體的設計方法在下文講解。

wire [9:0] oc_sin;

oc oc

(

.phi_inc_i (16'd8192), //相位增量,對應625kHz

.clk (clk),

.reset_n (rst_n),

.clken (1'b1), //時鐘允許信號

.fsin_o (oc_sin), //本振正弦信號

.out_valid (out_valid) //輸出有效標志

);

接下來用乘法進行混頻。我們都知道計算機中有帶符號數signed和無符號數unsigned,還知道計算機經常以二進制補碼的形式的表示帶符號數。

在FPGA設計中,不管是Altera還是Xilinx,它們的IP核幾乎都是采用二進制補碼帶符號數,也有很多的ADC、DAC芯片的數據接口也采用的是二進制補碼。因此,在設計中,我們要清楚什么時候用什么數值表示法。

比如NCO的輸出為帶符號數二進制補碼,假設混頻的輸入信號也是帶符號數二進制補碼,則在整個混頻程序設計中都要保持這個數值表示方法,否則就會出錯。

在下面的方法1中,再定義一個帶符號的寄存器將輸入信號轉換為帶符號數是很有必要的:“wire signed [9:0] din_s = din;”。如果不這樣做,直接使用乘法運算符“*”,會被綜合為無符號數乘法,得到的就是錯誤的結果。

當然也可以用方法2,乘法器IP核可以選擇計算方式是“signed”還是“unsigned”,將乘法器設置為signed也可以完成正確的計算。

//----------------------------------------------------

// 乘法實現混頻,方法1,轉換為帶符號數后再相乘

//----------------------------------------------------

//reg signed [19:0] mult;

//wire signed [9:0] din_s = din;

//wire signed [9:0] oc_sin_s = oc_sin;

//

//always @(posedge clk or negedge rst_n)

// if (!rst_n) mult <= 20'd0;

// else mult <= din_s * oc_sin_s;

//----------------------------------------------------

// 乘法實現混頻,方法2,調用乘法器IP核,設置為signed

//----------------------------------------------------

wire signed [19:0] mult;

mult1 mult1_inst (

.clock ( clk ),

.dataa ( din ),

.datab ( oc_sin ),

.result ( mult )

);

接下來濾除混頻后的直流信號。由于乘法的運算結果為帶符號數,接下來的計算使用到的寄存器都應申明為signed。

需要強調的是,signed和unsigned的申明只是告訴設計的運算如何看待這個寄存器中的數,并不能改變寄存器的值。比如“11”這個值,如果申明為signed,運算將其視作-1,如果申明為unsigned,運算將其視作3。因為有符號數和無符號數的運算法則是不一樣的,所以錯誤的申明會導致結果計算錯誤。

reg signed [19:0] m1,m2,m3,m4,m5,m6,m7;

// 5MHz/625kHz=8; 緩存連續8個點的值

always @ (posedge clk or negedge rst_n)

if (!rst_n) begin

m1 <= 20'd0; m2 <= 20'd0; m3 <= 20'd0;

m4 <= 20'd0; m5 <= 20'd0; m6 <= 20'd0; m7 <= 20'd0;

end

else begin

m1 <= mult; m2 <= m1; m3 <= m2; m4 <= m3;?

m5 <= m4; m6 <= m5; m7 <= m6;

end

wire signed [22:0] madd = mult+m1+m2+m3+m4+m5+m6+m7; //一個周期

wire signed [19:0] mean = madd[22:3]; //舍掉低3bit,相當于除8,得到

wire signed [19:0] mt = mult - mean; //濾除直流分量

assign dout = mt;

assign s_oc = oc_sin;

endmodule

上面濾除直流分量的方法并不通用,由于5Mhz的系統時鐘是625kHz信號的8倍,所以連續8個點的平均值便是直流分量。不過程序設計思路還是可以學習,比如依次移位緩存數據、截高位做除法這些小技巧。

NCO IP核的使用

在Quartus中打開該IP核,配置界面如下。后面的Quartus版本中將IP核集成到了qsys中,配置界面略有不同,但設置的參數之類的基本一樣。

b8bf9420-c119-11ec-bce3-dac502259ad0.jpg

設定好相位累加器精度、角度分辨率、幅度精度、系統時鐘和輸出信號頻率,便可以得到一個相位增量值(phase increment value),在實例化NCO模塊時傳入的便是這個值。實際的輸出頻率和設定的頻率會存在一定誤差,下方便展示了輸出信號的頻域和時域圖形。總體來說設置比較簡單。

如果需要仿真,在生成IP核前一定要在“Set up simulation”中選中“Generate Simulation Model”和“Generate netlist”,如下圖所示。否則在導入ModelSim時會失敗,無法進行仿真。

b8f14290-c119-11ec-bce3-dac502259ad0.jpg

DDS Compiler IP核的使用

基本配置

在Vivado中打開DDS Compiler IP核,配置界面如下:

b9212956-c119-11ec-bce3-dac502259ad0.jpg

這個IP核的配置選項更豐富,提供的功能也更強大。我這里只介紹下本設計用到的功能,其余具體信息可以參考Xilinx官方文檔pg141。

同樣設定系統時鐘,Parameter Selection選擇“System Parameters”,這種設計方式可以直接設置無雜散動態范圍、頻率分辨率、輸出頻率等系統級的參數,和Quartus的NCO IP核很像。另外一種“Hardware Parameters”設計方式需要自己設定輸出數據和相移的位寬,輸出頻率、相位偏移等值需要自己計算對應的二進制數值。這兩種設計方式向不同需求的設計者提供。

pg141中給出了總線位寬與系統參數之間的轉換關系公式。

b937137e-c119-11ec-bce3-dac502259ad0.jpg

相位增量和相位偏移都可以設置為可編程的“Programmable”和“Streaming”方式,本設計只需要產生625kHz固定頻率的本振信號,設置為“Fixed”即可(所需資源少)。在“Summary”中可以看到整個DDS系統的詳細信息。

位寬問題

需要提醒的是系統最終的實際信號位寬和總線接口位寬并不一致。IP核的位寬只會是8的倍數,多余的位數會移符號為填充,如下圖所示。

b95fcefe-c119-11ec-bce3-dac502259ad0.jpg

更直觀的感受,看一個DDS Compiler IP核的仿真:

b973b6d0-c119-11ec-bce3-dac502259ad0.jpg

可以看到相移雖然有16bit的位寬,但是有效的只有低10bit,高位都是符號為。為了更好的觀察相位值,新建一個“virtual bus“,將低10bit加到bus中,如下圖所示:

b9a58674-c119-11ec-bce3-dac502259ad0.jpg

可以清楚的看到相位和幅度之間的關系。

產生sin與cos信號

很多系統中需要sin和cos信號(如解調系統中的本振信號),在DDS中設置為“Sine and Cosine”輸出時,sin和cos信號會共用數據總線,sin使用高字節,cos使用低字節,格式如下:

b9bc26ae-c119-11ec-bce3-dac502259ad0.jpg

產生帶有相位偏移的信號

如果需要生成帶有可調初始相位(也叫相位偏移Phase Offset)的信號,在DDS中將“Phase Offset Programmability”設置為“Streaming”,IP核端口會增加一個PHASE輸入通道,該通道數據總線的有效位寬與設置的頻率分辨率(Frequency Resolution)有關,可以在Summary界面中看到位寬(Phase Width)。該數據總線與360°相位之間線性對應。比如Phase Width為16Bits,則0對應0°,FFFF對應360°,7FFF對應180°,以此類推。

NCO和DDS是經常用到的IP核,在后面的“FPGA數字信號處理“系列介紹的其它系統中,也會經常出現,因此需要熟悉掌握這兩個IP核的使用。

原文標題:FPGA學習-數字信號處理數字混頻

文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21796

    瀏覽量

    605376
  • 程序設計
    +關注

    關注

    3

    文章

    261

    瀏覽量

    30444
  • 數字混頻
    +關注

    關注

    0

    文章

    4

    瀏覽量

    7481

原文標題:FPGA學習-數字信號處理數字混頻

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA數字信號處理--數字混頻

    以簡單的數字混頻為例,介紹在FPGA程序設計中很重要的二進制原碼、補碼;有符號數、無符號數的問題。本文不是像課本那樣介紹這些基礎概念,而是介紹很實際的設計方法。
    發表于 09-25 09:42

    介紹在FPGA程序設計中很重要的二進制原碼

    這是數字信號處理系列的第一篇,以簡單的數字混頻為例,介紹在FPGA程序設計中很重要的二進制原碼、補碼;有符號數、無符號數的問題。本文不是像課本那樣介紹這些基礎概念,而是介紹很實際的設計
    發表于 07-23 06:38

    C#程序設計與案例教程

    C#程序設計與案例教程全書共分九章,按C#知識的系統性,由淺入深安排內容,全面介紹了C# 語言基礎,面向對象程序設計,GUI程序設計,圖形、圖像與多媒體,數據庫程序設計
    發表于 10-22 11:05 ?158次下載
    C#<b class='flag-5'>程序設計</b>與案例教程

    JAVA程序設計之教程

    JAVA程序設計之教程
    發表于 04-10 14:46 ?0次下載
    JAVA<b class='flag-5'>程序設計</b>之教程

    DSP程序設計

    DSP程序設計:(1)DSP C語言程序設計(2)C語言與匯編語言混合編程(3)DSP程序燒寫13.1 DSP C語言程序設計DSP支持使用ANCI C進行
    發表于 10-27 14:11 ?67次下載

    Matlab使用方法和程序設計

    Matlab使用方法和程序設計 實驗一 Matlab使用方法和程序設計一、
    發表于 10-17 00:18 ?5412次閱讀
    Matlab使用方法和<b class='flag-5'>程序設計</b>

    數字電位器AD8402與8031的接口電路及程序設計

    數字電位器AD8402與8031的接口電路及程序設計 文介紹數字電位器AD8402與8031的接口電路及程序設計和使用注意事項。
    發表于 03-14 15:17 ?2158次閱讀
    <b class='flag-5'>數字</b>電位器AD8402與8031的接口電路及<b class='flag-5'>程序設計</b>

    最簡單的C程序設計_ 順序程序設計

    最簡單的c語言程序設計,提供ppt教程,簡單易懂
    發表于 12-02 09:37 ?0次下載

    音頻信號數字化光纖通信實驗系統的程序設計與實現

    音頻信號數字化光纖通信實驗系統的程序設計與實現
    發表于 01-04 17:13 ?22次下載

    msp430延時程序設計

    msp430延時程序設計msp430延時程序設計msp430延時程序設計
    發表于 04-29 14:40 ?0次下載

    Java并發程序設計教程

    Java并發程序設計教程
    發表于 03-19 11:23 ?2次下載

    面向對象的程序設計總結與過程化程序設計有什么區別?

    面向對象程序設計(簡稱OOP)技術最近幾年在計算機領域得到了迅猛發展,它是程序設計方法的一場革命。與傳統的結構化程序設計(面向過程程序設計)相比,它具有許多優點,其中最主要的是,面向對
    發表于 09-19 14:12 ?0次下載
    面向對象的<b class='flag-5'>程序設計</b>總結與過程化<b class='flag-5'>程序設計</b>有什么區別?

    簡單的C程序設計教程之順序程序設計的資料概述

    本文檔的主要內容詳細介紹的是簡單的C程序設計教程之順序程序設計的資料概述。
    發表于 11-16 16:17 ?4次下載
    簡單的C<b class='flag-5'>程序設計</b>教程之順序<b class='flag-5'>程序設計</b>的資料概述

    VB程序設計電子教程之圖形程序設計的詳細資料說明

    本文檔的詳細介紹的是VB程序設計電子教程之圖形程序設計的詳細資料說明主要內容包括了:1.圖形程序設計基礎,2.常用畫圖方法,3.動畫程序設計初步
    發表于 03-01 11:01 ?13次下載
    VB<b class='flag-5'>程序設計</b>電子教程之圖形<b class='flag-5'>程序設計</b>的詳細資料說明

    JAVA程序設計教程之JSP程序設計實驗

    本文檔的主要內容詳細介紹的是JAVA程序設計教程之JSP程序設計實驗。
    發表于 11-05 15:34 ?6次下載
    JAVA<b class='flag-5'>程序設計</b>教程之JSP<b class='flag-5'>程序設計</b>實驗
    主站蜘蛛池模板: 欧美熟妇互舔20p | 视频三区 国产盗摄 | 试看做受120秒免费午夜剧场 | 奇虎成人网 | 日本内射精品一区二区视频 | 我就去色色 | 成人性视频全过程 | 97色伦久久视频在观看 | 69日本人xxxx16—18 | 97caopeng | jizz日本黄色 | 小776 论坛| WWW国产精品内射熟女 | 黑人特黄AA完整性大片 | 国内精品日本久久久久影院 | 印度学生xxxxx性14一16 | 国产精品久久久久久久久免费下载 | 老色69久久九九精品高潮 | 国产精品JK白丝AV网站 | 一个人免费播放高清在线观看 | 一本到高清视频在线观看三区 | 日本男女动态图 | 四虎国产精品永久一区高清 | 久久66热在线视频精品 | 午夜天堂一区人妻 | 国产成人在线视频网站 | 成人免费一级毛片在线播放视频 | 甜涩性爱下载 | 香蕉eeww99国产精品 | 乌克兰内射私拍 | 又大又硬又爽免费视频 | 啊好大好厉害好爽真骚 | 亚洲片在线观看 | 99久久久无码国产精品不卡按摩 | 美女视频黄a视频全免费网站色窝 | 精品久久久噜噜噜久久久app | 久久爽狠狠添AV激情五月 | 我要色导航 | 99在线观看视频 | 国产午夜三区视频在线 | 亚洲乱亚洲乱妇在线观看 |