FSK調制
FSK是利用載波的頻率表示基帶信息,比如在2FSK系統(tǒng)中,采用單頻信號f1表示信息0、單頻信號f2表示信息1。根據碼元轉換時載波的相位是否連續(xù),分為非連續(xù)相位FSK和連續(xù)相位FSK,如下圖所示:
第三幅圖為連續(xù)相位FSK調制,也稱作CPFSK,可視作振蕩頻率隨基帶信號線性變化;第四幅圖為非連續(xù)相位FSK,在碼元轉換時有一個相位的跳變,可視作兩個ASK調制信號的疊加。
FSK的一個重要參數是頻移指數h=(f2-f1)*T,T為碼元周期。該參數影響著兩個單頻信號之間的相關系數ρ。ρ越小,越容易將兩個信號區(qū)分開,即解調系統(tǒng)的解調性能越好。h的幾個特殊取值如下:
當h=0.715時,ρ可以取到最小值-2π/3;
當h=kπ(k≥1)時,ρ為0,即兩信號正交;
當h=N(整數)時,FSK總是會體現出連續(xù)相位特性。
調制信號的頻譜與相位變化息息相關,如果存在相位突變,信號頻譜寬度會擴展(產生旁瓣)。CPFSK是一種恒包絡調制技術,在碼元速率和h相同時,CPFSK比非連續(xù)相位的FSK主瓣寬度更窄,且旁瓣分量更小,通過限帶濾波后信號包絡起伏小,適合應用于非線性信道。
MATLAB設計
MATLAB中可以按照FSK原理完成FSK調制,但是只能產生非連續(xù)相位的FSK調制信號(除非h=1)。如果想要產生連續(xù)相位的FSK調制信號,必須使用MATLAB提供的fskmod函數,示例代碼如下:
上面將代表0和1兩個頻率之間的間隔直接設置為8,也可以根據頻移指數h的計算公式來設定。fskmod最后還可以增加一個參數,默認值為’cont’表示連續(xù)相位;’discont’表示非連續(xù)相位。
需要注意的是,老版本的MATLAB可能會用到randint函數產生隨機序列;而2017以后的版本只能使用randi函數。
FSK的FPGA設計
在Vivado開發(fā)環(huán)境下完成2FSK(非連續(xù)相位)調制技術的設計并進行仿真,系統(tǒng)時鐘32Mhz,碼元速率1Mhz,載波頻率6Mhz,頻移指數h=3.5。模塊接口如下:
配置兩個DDS產生兩個代表1和0的單頻信號。f2-f1=h/T=3.5/1ns=3.5Mhz,則在6Mhz載波頻率的基礎上選擇4.25Mhz和7.75MHz。DDS Compiler IP核使用方法可參考https://blog.csdn.net/fpgadesigner/article/details/80512067。本設計將DDS的無雜散動態(tài)范圍設置為95dB,對應的位寬為16bit。實例化代碼如下:
FSK調制信號的產生有兩種方法。第一種方法將FSK視作兩路ASK信號的合成(一路ASK有載波代表1,一路ASK無載波代表1),代碼如下:
采用此方法的系統(tǒng)原理圖如下:
可以看到一路ASK信號為din與f1的乘法,另一路信號為din取反后與f2的乘法,兩路加起來便得到FSK調制信號。另一種方法直接使用多路選擇器對輸入的基帶數據進行判決輸出:
采用此方法的系統(tǒng)原理圖如下:
RTL_MUX即為多路選擇器,明顯第二種方法更加節(jié)省資源。
CPFSK的FPGA設計
連續(xù)相位的FSK調制信號產生可以借助DDS的特性,DDS的實現原理就使其輸出信號具有連續(xù)相位特性,即使頻率突然改變。配置一個DDS,Implementation->Phase Increment Programmability設置為Streaming,可以通過S_AXIS_PHASE接口動態(tài)配置DDS的輸出頻率。完整代碼如下:
DDS的頻率分辨率設置為976.5625Hz,正好對應相位位寬為15Bits(Fs/2^B=32MHz/2^15=976.5625Hz)。因此f1=4.25MHz對應的頻率控制字為4351(f1/976.5625-1=4351);f2=7.75MHz對應的頻率控制字為7935(f2/976.5625-1=7935)。
代碼中根據輸入基帶的情況設定對應的頻率控制字。可見CPFSK只需要使用一個DDS Compiler IP核即可,比FSK要節(jié)省不少資源。
仿真測試
編寫testbench,產生一個周期信號模擬二進制基帶數據。首先仿真非連續(xù)相位的FSK:
可以明顯看到在碼元的跳變時刻FSK信號的相位有明顯的突變。再仿真CPFSK:
看到碼元跳變時刻FSK信號的相位仍保持連續(xù)變化。注意由于DDS有一定的Latency,導致上圖FSK信號相比基帶數據有一定的延遲。
Quartus環(huán)境下實現
Quartus中對應的IP核為NCO,在產生FSK信號時與DDS用法基本相同;但在產生CPFSK信號時,NCO IP核有獨特的配置方式。
NCO的輸出頻率由phi_inc_i接口控制。需要使用FSK調制功能時,在Implementation標簽下選中“Frequency Modulation Input”:
IP核會多出一個freq_mod_i接口,該接口的作用時在phi_inc_i輸出頻率的基礎上進行調整。比如:頻率控制字位寬為25Bits,phi_inc_i輸出頻率6Mhz,系統(tǒng)時鐘32MHz,需要輸出f1=4.25Mhz,則freq_mod_i對應的控制字為(4.25Mhz-6MHz)/(32Mhz/2^25)=-1835008。
根據基帶數據改變freq_mod_i接口的控制字即可實現CPFSK信號的產生。
原文標題:FPGA學習-FSK調制技術
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603419 -
matlab
+關注
關注
185文章
2976瀏覽量
230483 -
FSK調制
+關注
關注
0文章
7瀏覽量
7834
原文標題:FPGA學習-FSK調制技術
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論