藍牙基帶調制(GFSK:Gauss frequency Shift Keying )
- 前言
- 一、高斯濾波器
- 二、高斯濾波
- 三、相位積分
- 四、TX設定和信號波形
- 總結
前言
藍牙發展到現在已經是5.2版本,包含經典藍牙(BT)和低功耗藍牙(BLE),盡管經過多次迭代,其基帶調制解調方式還是GFSK和DPSK,下面介紹的就是用的較多的GFSK調制,對比FSK調制,都知道FSK是二選一的頻率鍵控調制,其調制解調也是極為簡單,通信原理可能就有很詳細的介紹,其中非相干最佳接識訓結構尤為經典,而GFSK的關鍵是在高斯濾波器的應用,因為高斯濾波器的存在,GFSK的帶外泄露或者說功率譜旁瓣擴展很小,
一、高斯濾波器
其中高斯濾波器的公式可以寫作:
g
(
n
)
=
1
4
N
[
e
r
f
(
π
K
B
T
2
l
n
2
(
n
N
+
1
2
)
)
?
e
r
f
(
π
K
B
T
2
l
n
2
(
n
N
?
1
2
)
)
]
g(n) = \frac{1}{4N}\left[erf\left(\pi K_{BT}\sqrt{\frac{2}{ln2}}\left(\frac{n}{N}+\frac{1}{2}\right)\right)-erf\left(\pi K_{BT}\sqrt{\frac{2}{ln2}}\left(\frac{n}{N}-\frac{1}{2}\right)\right)\right]
g(n)=4N1?[erf(πKBT?ln22?
?(Nn?+21?))?erf(πKBT?ln22?
?(Nn??21?))]
這里采用的時誤差函式形式,有的用的也是Q函式形式,但是根據誤碼率和大部分trans文章的分析,采用誤差函式的方式應該是正確的,
對應的matlab代碼如下:
函式的輸入:
B
B
B :表示帶寬,這里設定為500KHz;
symb_rate :表示GFKS的符號速率這里設定為1MHz;
ts :表示采樣時間,這里設定為
1
12
e
6
\frac{1}{12e^6}
12e61?;
delay :2*delay表示高斯濾波器覆寫的符號數目,這里設定為1.5;
function [Gaussian_filter_q,Gaussian_filter_e] = Gaussian_filter(B,symb_rate,delay,ts)
symb_T = 1/symb_rate;
Gau_t = -delay*symb_T:ts:delay*symb_T;
K = 2*pi*B/sqrt(log(2));
Gau_det = K*(Gau_t-symb_T/2);
Gau_sum = K*(Gau_t+symb_T/2);
Gaussian_filter_q = 1/4/symb_T*(qfunc(2*pi*B*symb_T*Gau_det)-qfunc(2*pi*B*symb_T*Gau_sum));
Gaussian_filter_e = 1/4/symb_T*(erfc(Gau_det/sqrt(2))-erfc(Gau_sum/sqrt(2)));
end
二、高斯濾波
GFSK與FSK的區別在于多了一個高斯濾波器濾波和相位連續,高斯濾波的程序就是現將bit資料轉換為NRZ碼,然后上采樣再經過高斯濾波,也就是卷積高斯濾波器,
w
[
n
]
=
2
π
h
∑
k
=
?
∞
∞
p
[
k
]
g
[
n
?
k
N
]
w[n]=2\pi h\sum_{k=-\infty}^{\infty}p[k]g[n-kN]
w[n]=2πhk=?∞∑∞?p[k]g[n?kN]
代碼如下:
[~,Gaus_fil]= Gaussian_filter(TX.B,TX.symb_rate,TX.Gau_del,TX.samp_time);
TX_dat = 2*TX_bits - 1;
dat_len = length(TX_dat);
TX_dat_samp = upsample(TX_dat,TX.Oversample);
TX_Gaus_fil = 2*pi*TX.h*conv(Gaus_fil,TX_dat_samp);
三、相位積分
GFSK相位連續就是因為相位積分而來,也是因為相位連續而不會出現相位的突然跳變,看功率譜可知,相位的突然可能引起諧波分量,
θ
[
n
]
=
∑
v
=
?
∞
n
w
[
v
]
\theta[n] = \sum_{v=-\infty}^{n}w[v]
θ[n]=v=?∞∑n?w[v]
代碼如下:
TX_phase = TX.samp_time*cumsum(TX_freq(13:end));
四、TX設定和信號波形
當得到信號的相位以后就可以IQ調制GFSK信號:
s
[
n
]
=
e
j
θ
[
n
]
=
e
x
p
{
j
∑
v
=
?
∞
n
w
[
v
]
}
s[n]=e^{j\theta [n]}=exp\left\{ j \sum_{v=-\infty}^{n}w[v]\right\}
s[n]=ejθ[n]=exp{jv=?∞∑n?w[v]}
代碼如下:
TX_cos = cos(TX_phase);
TX_sin = sin(TX_phase);
TX_GFSK1 = complex(TX_cos,TX_sin);
TX的引數設定為:
function TX = TXSetting()
TX.h = 0.32; %mod index
TX.Fs = 12e6; %sample rate
TX.samp_time = 1/12e6;
TX.symb_rate = 1e6;
TX.Oversample = TX.Fs/TX.symb_rate;
TX.Packet_len = 1000;
TX.Gau_del = 1.5;
TX.B = 0.5*TX.symb_rate;
TX.ac_code = [1 1 1 1 1 0 0 1 1 0 1 0 1];
TX.Packet_num = 100;
TX.SNR = 0:2:16;
end
總結
調制好后的基帶波形如下圖

對比GFSK和FSK信號的功率譜就只到兩者明顯的區別:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236660.html
標籤:其他
