99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

FPGA數(shù)字信號處理之verilog實現(xiàn)混頻器

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-12-09 10:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

混頻:兩個不同頻率之間的混合,得到第三個頻率。數(shù)字信號處理中用來完成頻譜搬移求和,是數(shù)字信號處理中的基本元件之一。例如通信中的混頻合路:ea69cb86-7761-11ed-8abf-dac502259ad0.png常見的數(shù)字混頻器結(jié)構(gòu)如下,由移頻模塊和求和模塊組成。比如信號A、B是輸入的兩個單音信號,B是上一節(jié)講到的NCO信號,使用復(fù)乘將A、B信號進行搬移,然后求和。ea7aa906-7761-11ed-8abf-dac502259ad0.png

頻譜搬移的過程如下,輸入信號Data_in,與NCO產(chǎn)生的單音信號進行復(fù)乘得到Data_out;

ea99f982-7761-11ed-8abf-dac502259ad0.png

將Data_in與Data_out的頻譜放到一起如下,可以看到頻譜搬移的過程。

eab480e0-7761-11ed-8abf-dac502259ad0.png

頻譜搬移在計算上就是復(fù)乘:(i+q*j)*(cos+sin*j)=(cos*i-sin*q)+(sin*i+cos*q)*j,用xilinx片子實現(xiàn)的話我們還是選擇DSP48,其結(jié)構(gòu)如下:

eae2ff42-7761-11ed-8abf-dac502259ad0.png

其中用到了dsp的級聯(lián),可以參考之前dsp48e1詳細講解的文章:FPGA的底層資源之DSP48E1和Xilinx DSP48E1仿真。這里不再詳細描述。

代碼實現(xiàn)如下:

首先的端口聲明:

// ============================================================
// File Name: cm_mix
// VERSION  : V1.0
// DATA     : 2022/11/6
// Author   : FPGA干貨分享
// ============================================================
// 功能:數(shù)字混頻器  (i+q*j)*(cos+sin*j) = (cos*i - sin*q) + (sin*i + cos*q)*j
// delay  
// ============================================================


`timescale 1ns/1ps
module cm_mix #(
        parameter           C_DATA_WITH     = 16 ) // 
    (
        input  wire                     I_sys_clk    , // 輸入時鐘
        input  wire                     I_rst_in     , // 輸入復(fù)位 高有效
        input  wire [6:0]               I_phase      , // 初始相位
        input  wire [7:0]               I_freq       , // 頻率,步進,1代表1M
        input  wire [C_DATA_WITH-1:0]   I_data_in_i  , // 輸入數(shù)據(jù) 實部I
        input  wire [C_DATA_WITH-1:0]   I_data_in_q  , // 輸入除數(shù) 虛部Q
        output reg  [C_DATA_WITH-1:0]   O_data_out_i , // 輸出數(shù)據(jù) 實部I
        output reg  [C_DATA_WITH-1:0]   O_data_out_q );// 輸出除數(shù) 虛部Q
        
// ============================================================
// 內(nèi)部參數(shù)
// ============================================================


// ============================================================
// 變量
// ============================================================
wire       [10:0]               S_sin_out       ;
wire       [10:0]               S_cos_out       ;
reg        [C_DATA_WITH-1:0]    S_data_in_q     ;
reg        [10:0]               S_sin_out_d     ;
reg        [10:0]               S_cos_out_d     ;


wire       [47:0]               S_pcout_cos_i   ;
wire       [47:0]               S_dsp_out_i     ;
wire       [47:0]               S_pcout_sin_i   ;
wire       [47:0]               S_dsp_out_q     ;

然后調(diào)用上一篇文章中的NCO模塊FPGA數(shù)字信號處理之verilog實現(xiàn)NCO(代碼及仿真):

cm_nco_100 cm_nco_100 (
    .I_sys_clk      (I_sys_clk     ) , /// 工作時鐘 100M
    .I_rst_n        (!I_rst_in     ) , /// 復(fù)位信號,用來清相位
    .I_phase        (I_phase       ) , /// 初始相位
    .I_freq         (I_freq        ) , /// 頻率,步進,1代表1M
    .O_sin_out      (S_sin_out     ) , /// 輸出正弦值
    .O_cos_out      (S_cos_out     )   /// 輸出余弦值
);

接著打拍并調(diào)用乘法器:


always @(posedge I_sys_clk )
    if(I_rst_in)
        begin
            S_data_in_q <= 'd0 ;
            S_sin_out_d <= 'd0 ;
            S_cos_out_d <= 'd0 ;
        end
    else
        begin
            S_data_in_q <= I_data_in_q ;
            S_sin_out_d <= S_sin_out   ;
            S_cos_out_d <= S_cos_out   ;
        end
    
// ============================================================
// (cos*i - sin*q)
// ============================================================
//cos*i
cm_dsp48e1 #(
    .C_DATA_WITH_A      (C_DATA_WITH     ),
    .C_DATA_WITH_B      (11              ),
    .C_DATA_WITH_C      (48              ),
    .C_DATA_WITH_D      (25              )
)
U0_cm_dsp48e1(
    .I_CLK              (I_sys_clk      ) , // clk
    .I_RST              (I_rst_in       ) , // RST
    .I_A                (I_data_in_i    ) , // [29:0] 
    .I_B                (S_cos_out      ) , // [17:0] 
    .I_C                (48'd0          ) , // [47:0] 
    .I_D                (25'd0          ) , // [24:0] 
    .I_PCIN             (48'd0          ) , // [47:0] 只能直連PCOUT
    .I_ALUMODE          (4'd0           ) , // [3:0] 
    .I_INMODE           (5'b00101       ) , // [4:0] 
    .I_OPMODE           (7'b0000101     ) , // [6:0] 
    .O_P                (               ) , // [47:0]
    .O_PCOUT            (S_pcout_cos_i  )   // [47:0] 只能直連PCIN
    );


//Pcin - sin*q
cm_dsp48e1 #(
    .C_DATA_WITH_A      (C_DATA_WITH     ),
    .C_DATA_WITH_B      (11              ),
    .C_DATA_WITH_C      (48              ),
    .C_DATA_WITH_D      (25              )
)
U1_cm_dsp48e1(
    .I_CLK              (I_sys_clk      ) , // clk
    .I_RST              (I_rst_in       ) , // RST
    .I_A                (S_data_in_q    ) , // [29:0] 
    .I_B                (S_sin_out_d    ) , // [17:0] 
    .I_C                (48'd0          ) , // [47:0] 
    .I_D                (25'd0          ) , // [24:0] 
    .I_PCIN             (S_pcout_cos_i  ) , // [47:0] 只能直連PCOUT
    .I_ALUMODE          (4'b0011        ) , // [3:0] 
    .I_INMODE           (5'b00101       ) , // [4:0] 
    .I_OPMODE           (7'b0010101     ) , // [6:0] 
    .O_P                (S_dsp_out_i    ) , // [47:0]
    .O_PCOUT            (               )   // [47:0] 只能直連PCIN
    );
    
    
// ============================================================
// (sin*i + cos*q)
// ============================================================
//sin*i
cm_dsp48e1 #(
    .C_DATA_WITH_A      (C_DATA_WITH     ),
    .C_DATA_WITH_B      (11              ),
    .C_DATA_WITH_C      (48              ),
    .C_DATA_WITH_D      (25              )
)
U2_cm_dsp48e1(
    .I_CLK              (I_sys_clk      ) , // clk
    .I_RST              (I_rst_in       ) , // RST
    .I_A                (I_data_in_i    ) , // [29:0] 
    .I_B                (S_sin_out      ) , // [17:0] 
    .I_C                (48'd0          ) , // [47:0] 
    .I_D                (25'd0          ) , // [24:0] 
    .I_PCIN             (48'd0          ) , // [47:0] 只能直連PCOUT
    .I_ALUMODE          (4'd0           ) , // [3:0] 
    .I_INMODE           (5'b00101       ) , // [4:0] 
    .I_OPMODE           (7'b0000101     ) , // [6:0] 
    .O_P                (               ) , // [47:0]
    .O_PCOUT            (S_pcout_sin_i  )   // [47:0] 只能直連PCIN
    );


//Pcin + cos*q
cm_dsp48e1 #(
    .C_DATA_WITH_A      (C_DATA_WITH     ),
    .C_DATA_WITH_B      (11              ),
    .C_DATA_WITH_C      (48              ),
    .C_DATA_WITH_D      (25              )
)
U3_cm_dsp48e1(
    .I_CLK              (I_sys_clk      ) , // clk
    .I_RST              (I_rst_in       ) , // RST
    .I_A                (S_data_in_q    ) , // [29:0] 
    .I_B                (S_cos_out_d    ) , // [17:0] 
    .I_C                (48'd0          ) , // [47:0] 
    .I_D                (25'd0          ) , // [24:0] 
    .I_PCIN             (S_pcout_sin_i  ) , // [47:0] 只能直連PCOUT
    .I_ALUMODE          (4'b0000        ) , // [3:0] 
    .I_INMODE           (5'b00101       ) , // [4:0] 
    .I_OPMODE           (7'b0010101     ) , // [6:0] 
    .O_P                (S_dsp_out_q    ) , // [47:0]
    .O_PCOUT            (               )   // [47:0] 只能直連PCIN
    );

最后四舍五入后輸出:

/// 四合五入輸出
always @(posedge I_sys_clk )
    if(I_rst_in)
        begin
            O_data_out_i <= 'd0;
            O_data_out_q <= 'd0;
        end
    else
        begin
            O_data_out_i <= S_dsp_out_i[10+:C_DATA_WITH] + S_dsp_out_i[9];
            O_data_out_q <= S_dsp_out_q[10+:C_DATA_WITH] + S_dsp_out_q[9];
        end


endmodule

對代碼的詳細講解參考B站視頻

【FPGA數(shù)字信號處理之verilog實現(xiàn)數(shù)字混頻器】 https://www.bilibili.com/video/BV1hg411B7Rb/?share_source=copy_web&vd_source=9736f43bc2eebc284f4fbbe5805247a7


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1645

    文章

    22046

    瀏覽量

    618280
  • 數(shù)字信號處理
    +關(guān)注

    關(guān)注

    16

    文章

    567

    瀏覽量

    46740
  • 混頻器
    +關(guān)注

    關(guān)注

    10

    文章

    844

    瀏覽量

    47047

原文標題:FPGA數(shù)字信號處理之verilog實現(xiàn)混頻器

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    數(shù)字信號處理的基本組成及其特點?

    的以數(shù)字信號處理器為核心部件的數(shù)字信號處理系統(tǒng)框圖,此系統(tǒng)既可處理數(shù)字信號,也可
    的頭像 發(fā)表于 06-18 09:02 ?288次閱讀
    <b class='flag-5'>數(shù)字信號</b><b class='flag-5'>處理</b>的基本組成及其特點?

    進群免費領(lǐng)FPGA學(xué)習(xí)資料!數(shù)字信號處理、傅里葉變換與FPGA開發(fā)等

    ~ 01、數(shù)字信號處理FPGA實現(xiàn) 旨在講解前端數(shù)字信號處理算法的高效
    發(fā)表于 04-07 16:41

    在DAC3482中,采用片內(nèi)混頻器實現(xiàn)上變頻功能需要保證兩路輸入信號的正交性嗎?

    在DAC3482中,采用片內(nèi)混頻器實現(xiàn)上變頻功能需要保證兩路輸入信號的正交性么?現(xiàn)在想用DAC3482將兩路不相關(guān)的基帶信號轉(zhuǎn)換成中頻信號
    發(fā)表于 02-13 06:28

    混頻器和調(diào)制的區(qū)別

    在電子通信領(lǐng)域中,混頻器和調(diào)制是兩種至關(guān)重要的設(shè)備,它們在信號處理、無線通信、雷達系統(tǒng)等多個方面發(fā)揮著關(guān)鍵作用。盡管兩者在電路形式和工作原理上有一定的相似性,但它們在功能、輸入/輸出
    的頭像 發(fā)表于 02-03 16:54 ?1015次閱讀

    射頻倍頻混頻器的區(qū)別

    射頻倍頻混頻器是兩種在射頻(RF)信號處理領(lǐng)域至關(guān)重要的電子元件,它們在信號轉(zhuǎn)換、頻率合成、無線通信等多個方面發(fā)揮著關(guān)鍵作用。盡管兩者都
    的頭像 發(fā)表于 02-03 16:12 ?699次閱讀

    數(shù)模轉(zhuǎn)換數(shù)字信號處理中的應(yīng)用

    在現(xiàn)代電子系統(tǒng)中,數(shù)字信號處理(DSP)技術(shù)扮演著至關(guān)重要的角色。數(shù)字信號處理涉及將模擬信號轉(zhuǎn)換為數(shù)字信
    的頭像 發(fā)表于 11-25 16:15 ?1599次閱讀

    adc與數(shù)字信號處理的關(guān)系

    在現(xiàn)代電子系統(tǒng)中,模擬信號數(shù)字信號之間的轉(zhuǎn)換是至關(guān)重要的。模數(shù)轉(zhuǎn)換(ADC)和數(shù)字信號處理(DSP)是
    的頭像 發(fā)表于 10-31 10:50 ?975次閱讀

    射頻混頻器有哪些類型

    射頻混頻器是射頻通信系統(tǒng)中的一種關(guān)鍵組件,它扮演著將不同頻率的信號進行混合或轉(zhuǎn)換的重要角色。本文將詳細探討射頻混頻器的定義、工作原理、類型、性能指標、應(yīng)用場景以及相關(guān)的技術(shù)挑戰(zhàn)和未來發(fā)展。
    的頭像 發(fā)表于 10-14 18:22 ?1401次閱讀

    什么是混頻器?

    混頻器是一種重要的射頻(RF)元件,廣泛應(yīng)用于無線通信、信號處理和雷達系統(tǒng)中。它的主要功能是將兩個不同頻率的信號混合,生成新的頻率成分。本文將詳細介紹
    的頭像 發(fā)表于 10-05 13:30 ?1945次閱讀

    RF混頻器的工作原理和性能參數(shù)

    RF混頻器,也稱為射頻混頻器,是無線通信系統(tǒng)中至關(guān)重要的一個組件,其核心功能是將兩個或多個信號合并為一個或多個復(fù)合輸出信號,實現(xiàn)
    的頭像 發(fā)表于 08-16 18:09 ?3545次閱讀

    混頻器常見的應(yīng)用場景有哪些

    混頻器作為一種關(guān)鍵的電子器件,在多個領(lǐng)域都有著廣泛的應(yīng)用。
    的頭像 發(fā)表于 08-16 18:08 ?3692次閱讀

    混頻器的基本概念和分類

    輸入信號的頻率、幅度或相位發(fā)生變化,進而產(chǎn)生包含原始頻率和它們之間某種組合(如和頻、差頻等)的新頻率信號。混頻器在無線通信、廣播、電視、雷達、音頻處理等多個領(lǐng)域扮演著至關(guān)重要的角色。
    的頭像 發(fā)表于 08-16 17:25 ?3030次閱讀

    數(shù)字信號是什么信號的組合

    離散的信號,它由一系列數(shù)字值組成,這些數(shù)字值在時間上是離散的。與模擬信號不同,數(shù)字信號在時間和幅度上都是離散的。
    的頭像 發(fā)表于 08-11 10:47 ?1901次閱讀

    數(shù)字信號處理與通信原理之間的關(guān)系

    數(shù)字信號處理(Digital Signal Processing,簡稱DSP)和通信原理是信息科學(xué)領(lǐng)域中兩個密切相關(guān)的領(lǐng)域。它們在理論和應(yīng)用層面都有很多相互聯(lián)系和相互依賴的地方。 在現(xiàn)代通信系統(tǒng)中
    的頭像 發(fā)表于 08-09 09:35 ?1822次閱讀

    ML-01-SC 6-18 GHz 高頻 SMA 射頻混頻器

    ML-01-SC 高頻混頻器 用于將高頻信號轉(zhuǎn)換為低頻信號或從低頻信號轉(zhuǎn)換為高頻信號,適用于各種高頻通信和
    的頭像 發(fā)表于 08-02 09:30 ?776次閱讀
    ML-01-SC  6-18 GHz 高頻 SMA 射頻<b class='flag-5'>混頻器</b>