日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA数字信号处理(十)ASK调制技术

發布時間:2023/12/10 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA数字信号处理(十)ASK调制技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列的1~9篇介紹了數字信號處理系統的基礎概念以及FIR、IIR和FFT三種基本運算單元,從本文開始將介紹一些數字信號處理系統。本文將介紹數字通信系統中ASK調制技術的FPGA實現。


調制技術

在通信系統中,由于一般情況下信道不能直接傳輸基帶信號,因此必須用基帶信號對載波信號(通常是正弦波)的某些參量進行控制,使其隨著基帶信號的變化而變化,這個過程稱作調制,得到的信號稱作調制信號(已調信號)。

正弦波作為載波信號有三個參量可以攜帶信息:幅度(調幅AM)、頻率(調頻FM)和相位(調相PM)。在數字系統中,由于信號都是離散化的值,調制的參量也是一些離散的狀態,因此調制信號通常被稱作鍵控信號,三種調制方式也對應稱作振幅鍵控ASK頻移鍵控FSK相移鍵控PSK。


ASK調制

ASK可分為二進制振幅調制(2ASK)和多進制振幅調制(如4ASK),這里的“進制”指的是信號所攜帶的信息量。

2ASK調制系統中,數字信息只有0和1兩種,所調制的載波信號的幅度變化狀態也只需要兩種:無載波輸出時代表發送0;有載波輸出時代表發送1。4ASK調制系統中,數字信息就有00、01、10、11四種,需要載波信號幅度的4個電平狀態表示。顯然,進制越大,相同頻帶內可以傳輸的數據信息量也就越多,即頻帶利用率越高。

ASK調制系統的模型如下所示:

基帶信號m(n)可以看作一串由0、1組成的矩形脈沖信號,理論上其帶寬是無限的,與載波信號調制之后的鍵控信號s(n)帶寬也是無限的。工程中為了提高頻帶利用率,需要對信號帶寬做限制,通常只需要將在主瓣帶寬內包含90%能量的信號發送出去即可。

有兩種方法可以實現:(1).在輸出端加上帶通濾波器篩選主瓣帶寬;(2).在調制前先對基帶信號m(n)做成形濾波,濾除主瓣外的頻率成分。成形濾波通常都選擇升余弦滾降濾波器,本質上也是一種FIR濾波器。


MATLAB設計

在FPGA設計前通常都會使用MATLAB對系統進行建模與仿真。設計ASK調制系統時,選定系統參數:基帶信號的符號速率Rb、載波頻率Fc、采樣頻率Fs、升余弦濾波器的滾降因子α。

可以使用randi函數生成隨機的二進制序列作為基帶信號;rectpulse函數實現對基帶信號的采樣;rcosflt(老版本)或rcosdesign(新版本)函數實現成形濾波。主要代碼如下:

code_2ask = randi(2, 1, Len) - 1; %產生隨機分布的二進制數據 code_2ask_upsamp = rectpulse(code_2ask, Fs/Rb); %對基帶數據以Fs速率采樣 code_2ask_filter = rcosflt(code_2ask, 1, Fs/Rb); %對基帶數據進行成形濾波,同時進行Fs/Rb倍采樣 ASK2 = carrier .* code_2ask_upsamp; %產生未進行成形濾波的2ASK信號 ASK2_filter = carrier .* code_2ask_filter(1:LenData)'; %產生成形濾波后的2ASK信號

本系列主要是講述FPGA設計,不詳細討論上述函數的使用,具體情況可以的MATLAB的help中查詢。


FPGA設計

在Vivado開發環境下完成4ASK調制技術的設計并進行仿真(為了能更直觀地觀察調制效果,這里省略了成形濾波器及帶通濾波器)。模塊接口如下:

`timescale 1ns / 1ps //----------------------------------------------------------- // 4ASK調制 //----------------------------------------------------------- module ASKmodulation_liuqi (input rst,input clk, //系統時鐘8*Rb(采樣頻率)input [1:0] din, //基帶數據輸入(速率為Rb)output signed [13:0] dout //ASK調制信號輸出 );

采樣時鐘設置為基帶信號的碼元速率的8倍,輸出的ASK調制信號位寬由載波信號的位寬決定。
載波信號頻率設置為2MHz,由Vivado提供的DDS Compiler IP核產生(該IP核使用方法可參考https://blog.csdn.net/fpgadesigner/article/details/80512067)。DDS的參數設置將決定載波信號的位寬,進一步會決定ASK調制信號的位寬。本設計將DDS的無雜散動態范圍設置為80dB,對應的位寬為14bit。實例化代碼如下:

//----------------------------------------------------------- // DDS Compiler IP核生成本地載波信號(2Mhz) //----------------------------------------------------------- wire out_valid; wire [15:0] dds_data; wire [13:0] sin_data = dds_data[13:0];dds U0 (.aclk(clk),.m_axis_data_tvalid(out_valid),.m_axis_data_tdata(dds_data) );

設計中使用載波信號最大幅值的0、1/3、2/3、1倍來分別表示四進制基帶信號的00、01、10、11。調制部分的代碼如下:

//----------------------------------------------------------- // 調制,01/3、2/3、1代表四種數字信息 //----------------------------------------------------------- reg [13:0] ask_data;always @ (posedge clk or posedge rst)if (rst) ask_data <= 'd0;else case (din)//"00"--02'd0 : ask_data <= 'd0;//"01"--1/4+1/16+1/321/32'd1 : ask_data <= {{2{sin_data[13]}},sin_data[13:2]}+ {{4{sin_data[13]}},sin_data[13:4]}+{{5{sin_data[13]}},sin_data[13:5]};//"10"--1/2+1/8+1/162/32'd2 : ask_data <= {{2{sin_data[13]}},sin_data[13:2]}+ {{2{sin_data[13]}},sin_data[13:2]}+{{2{sin_data[13]}},sin_data[13:2]};//"11"--12'd3 : ask_data <= sin_data;default : ask_data <= 'd0;endcaseassign dout = ask_data;endmodule

在采樣時鐘的控制下,使用Verilog HDL的case語法對基帶信號數據din做判斷,從而決定ASK調制信號的輸出幅度。由于FPGA實現1/3、2/3這種除法運算很消耗資源,這里使用“移位相加”的組合方式代替除法,實現相同的效果。注意整個系統采用的都是帶符號數二進制補碼,因此移位時高位應該補符號位。

當然,調制毫無疑問也可以用乘法器實現,尤其是如果使用成形濾波器對基帶信號濾波后(位寬會擴展),只能使用乘法器調制,不能像上面一樣用case語句判斷。使用乘法器調制的代碼如下:

//----------------------------------------------------------- // 調制,0、1/3、2/3、1代表四種數字信息 //----------------------------------------------------------- wire signed [15:0] ask_data;mult_gen_0 U1 (.A (din),.B (sin_data),.P (ask_data) );assign dout = ask_data[15:2];endmodule

乘法器的A端口(對應基帶信號輸入)設置為無符號數,B端口(對應載波信號輸入)設置為帶符號數,輸出截位后作為ASK調制信號的輸出。整個工程的RTL視圖如下:

從圖中可以看出DDS輸出的載波信號和基帶信號送入乘法器,截尾后得到ASK調制信號輸出。


仿真與工程下載

編寫testbench,主要是基帶信號的產生。當然可以像前面仿真FIR、FFT時一樣,使用MATLAB生成一組隨機二進制數據存入txt中,在testbench中讀取txt文件作為基帶信號。

本設計采用一種簡單的基帶信號產生方式,設置一個5位計數器cnt,截取高兩位cnt[4:3]作為基帶信號。仿真效果如下圖所示(上文兩種調制方式的仿真結果一樣):

很明顯看到輸出的ASK調制信號dout有4種電平狀態,且與基帶信號的值之間一一對應。完整的Vivado工程(含testbench仿真)可以在這里下載:https://download.csdn.net/download/fpgadesigner/10481532 。

總結

以上是生活随笔為你收集整理的FPGA数字信号处理(十)ASK调制技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。