FPGA學習(二)——實現AM信號調製與解調
- 使用的軟體是Vivado 2016.4
- 實驗室板卡是Nexys Video
一、寫在前面
目前可模擬實現,VIO部分待有時間再補齊。。。。
1.本篇記錄的是如何進行AM信號的調製與解調,
其主要步驟包括:
- 分頻器(Frequency divider)的產生
- 載波信號(Carrier signal)的產生
- 調製信號(Modulated signal)的產生
- 含直流分量(DC component)的調製信號
- 已調信號(Modulated signal)的產生
- 相干解調(Coherent demodulation)
- 濾除直流分量(DC component)
- 中間還有截位操作
2.關於截位:
在FPGA中,隨著信號處理的層次加深,對信號進行乘、累加、濾波等運算後,可能輸入時僅為8位位寬的信號會擴展成幾十位位寬,位寬越寬,佔用的硬體資源就越多,但位寬超過一定範圍後,位寬的增寬並不會對處理精度帶來顯著的改善,這時就需要對信號進行截位。
3.關於濾波器設計
兩種方法:
一是相干解調時需要低通濾波器;
二是可採用對已調信號取絕對值的方式也需要低通濾波器。
二、對過程的要求:
(1)載波信號頻率範圍:1M-10MHz,解析度0.01MHz;
(2)調製信號為單頻正弦波信號,頻率範圍:1kHz-10kHz,解析度0.01kHz;
(3)調製深度0-1.0,步進0.1,精度優於5%;
(4)調製信號和解調信號位寬為___8___位,其他信號位寬自定義,解調誤差優於1%(可利用MATLAB對數據進行驗證);
三、原理分析
1.調製與解調原理
//已調信號輸出:AM_OUT=DC_signal_out*carrier_out
//含直流分量的調製信號:DC_signal_out=DC_out+12800(8位調製信號的幅值)
//可控的直流分量輸出:DC_out=signal_out*Ma (Ma/100為調製深度)
//載波信號輸出:DDS>>Carrier_DDS>>carrier_out>>頻率控制字c_fcw 16bits,輸出位寬8bits
//無直流分量的調製信號輸出:DDS>>Signal_DDS>>signal_out>>頻率控制字s_fcw 24bits,輸出位寬8bits
2.根據要求設計信號參數
(1)載波信號頻率範圍:1M-10MHz,解析度0.01MHz
DDS工作時鐘選擇20MHz,carrier_out:頻率控制字16位,輸出8位,原理見:
子木:FPGA學習(一)——產生頻率可控的正弦波(2)調製信號為單頻正弦波信號,頻率範圍:1kHz-10kHz,解析度0.01kHz
DDS工作時鐘選擇20MHz,signal_out:頻率控制字為24位,輸出8位
(3)調製深度0-1.0,步進0.1,精度優於5%;
ma定義就不多說了,這裡得到的方法是在已知調製信號輸出位寬的前提下(已調信號幅值絕對值為128):
其中Ma取值為10~100,之間的整十數。
(4)調製信號和解調信號位寬為___8___位,其他信號位寬自定義,解調誤差優於1%(可利用MATLAB對數據進行驗證);
使用截位的方法,使解調信號輸出8位。
四、分頻器(Frequency divider)設計
由於DDS工作時鐘選擇20MHz,將100MHz分為20MHz即可。詳見下面這篇中的分頻器設計部分:
子木:FPGA學習(一)——產生頻率可控的正弦波五、產生載波信號(Carrier signal)
1.實現方式:DDS IP核
2.變數名:
工作時鐘:clk_20M
載波頻率控制字:c_fcw(carrier_ frequency_control_word)
載波輸出信號:carrier_out
原理見上一篇!
六、產生無直流分量(DC component)調製信號(Modulated signal)
1.實現方式:DDS IP核
2.變數名:
工作時鐘:clk_20M
調製信號頻率控制字:s_fcw(signal_ frequency_control_word)
無直流分量的調製信號輸出:signal_out
原理見上一篇!
七、產生含直流分量的調製信號
1.由Ma控制調製信號,再加上固定的直流分量即可。
Ma signal_out+12800。
2.實現方式:乘法器 IP核:DC_Mul和加法器IP核:DC_signal_Add
3.變數名:
調製深度控制變數:Ma
Ma控制的調製信號輸出:DC_out
直流分量:12800
含直流分量的調製信號輸出:DC_signal_out
八、輸出已調信號(Modulated signal)
1.載波與含直流分量的調製信號相乘
2.實現方式:乘法器IP核:AM_Mul
3.變數名:
含直流分量的調製信號輸入:DC_signal_out
載波輸入信號:carrier_out
已調信號輸出:AM_out
九、相干解調(或去絕對值法)(Coherent demodulation)
1.相干解調:載波與已調信號相乘
2.實現方式:乘法器IP核:DM_Mul
3.變數名:
已調信號輸入:AM_out
載波輸入信號:carrier_out
解調信號輸出:DM_out
十、濾除高頻分量(High frequency component)
1.FIR低通濾波器:設置階數和輸入輸出信號位寬
2.實現方式:FIR IP核:DM_FIR
3.變數名:
濾波器輸信號:{7d0,DM_out} (由設置輸入信號位寬決定)
濾波器輸出信號:DM_out
十一、濾除直流
待更。。。
十二、模擬波形
下面是單獨ma=1時的輸出,截位還未來得及修改。
十三、所有代碼
待更。。。
1.主程序
2.模擬程序
3.約束文件
推薦閱讀:
TAG:Verilog | 現場可編輯邏輯門陣列FPGA | 電子工程EE |