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