Ну что-же в данном длинном посте я постараюсь изложить свои соображения по поводу ких фильтра Гаусса для GMSK.
Поскольку в разных источниках этот фильтр описан немного по-разному необходимо дать пояснения. Я буду опираться на матлаб и на собственную реализацию фильтра Гаусса, которые немного отличаются, я поясню в дальнейшем в чем именно. В матлабе фильтр Гаусса задается функцией gaussfir, в хелпе на нее написано следующее:
Код: Выделить всё
GAUSSFIR Gaussian FIR Pulse-Shaping Filter Design.
H=GAUSSFIR(BT) designs a low pass FIR gaussian pulse-shaping filter.
BT is the 3-dB bandwidth-symbol time product where B is the two-sided
bandwidth in Hertz and T is in seconds.
H=GAUSSFIR(BT,NT) NT is the number of symbol periods between the start
of the filter impulse response and its peak. If NT is not specified,
NT = 3 is used.
H=GAUSSFIR(BT,NT,OF) OF is the oversampling factor, that is, the number
of samples per symbol. If OF is not specified, OF = 2 is used.
The length of the impulse response of the filter is given by 2*OF*NT+1.
Also, the coefficients H are normalized so that the nominal passband
gain is always equal to one.
% EXAMPLE: Design a Gaussian filter to be used in a GSM GMSK scheme.
BT = .3; % 3-dB bandwidth-symbol time
OF = 8; % Oversampling factor (i.e., number of samples per symbol)
NT = 2; % 2 symbol periods to the filters peak.
h = gaussfir(BT,NT,OF);
hfvt = fvtool(h,'impulse');
итак есть 3 параметра:
BT - ширина полосы фильтра по уровню -3 дБ умноженная на длительность импульса, причем идет пояснение:
т.е. B -
двусторонняя полоса в Герцах. Это очень важно, поскольку в
статье про GMSK в выражении (1) параметр
задается произведением
односторонней полосы
на длительность одного символа.
Второй параметр NT задает сколько символов надо учесть при фильтрации
Третий параметр OF задает количество отсчетов в одном символе.
Порядок фильтра определяется как 2*NT*OF+1, т.е. NT символов слева и NT символов справа каждый символ по OF отсчетов, плюс центральный отсчет.
Если мы откроем исходный код фильтра Гаусса в матлабе то увидим формулу по которой идет расчет:
Код: Выделить всё
% Convert to t in which to compute the filter coefficients
t= convert2t(OF,NT);
% Equation 5.53 of [1]
alpha = sqrt(2*log(2))/(BT);
% Equation 5.54 of [1]
h = (sqrt(pi)/alpha)*exp(-(pi^2/alpha^2)*t.^2);
% Normalize coefficients
h = h./sum(h);
Можно переписать это к более удобочитаемому виду:
где
Параметр
это BT в интерпретации матлаба
Если мы подставим
то получим выражение для фильтра Гаусса в интерпретации матлаба вида:
Заметим что в
статье про GMSK выражение (1) при
перепишется к виду:
Оба выражения верны, разница лишь в том, что при вычислении параметра
( BT в интерпретации матлаба) использовалась двусторонняя полоса, а в статье односторонняя, соответственно можно сказать, что
и если сделать такую подстановку, то получим что выражение для ИХ в интерпретации матлаба соответствует статье.
Зачем я это все так рассказываю? Затем, что я программировал свой фильтр гаусса и получал с матлабом различные результаты, пока не разобрался с этими односторонними и двусторонними полосами. Моя реализация фильтра Гаусса такая (функция на си):
Код: Выделить всё
int filterGaussian(double* g, int Lg, double BT, int bc){
if((!g) || (Lg<=1) || (BT < 0.0))
return 0;
double dt = (double)bc * 2.0/(double)(Lg-1);
double t;
double beta = 28.477658649975010867721351422732 * BT * BT;
t = -(double)bc-dt;
double sg = 0.0;
for(int i = 0; i<Lg; i++){
t += dt;
g[i] = exp(-beta*t*t);
sg+=g[i];
}
for(int i = 0; i<Lg; i++){
g[i] /= sg;
}
return 1;
}
она имеет несколько параметров:
double* g, - указатель на массив куда положить отсчеты ИХ
int Lg, - длина фильтра (размер массива g)
double BT, - BT (в интерпретации статьи)
int bc - задает сколько символов надо учесть при фильтрации (аналог матлабовского NT)
константа 28.477658649975010867721351422732 ничто иное как
В таблице ниже представлены ИХ рассчитанные моей функцией и функцией матлаба
для фильтра Lg = 25 порядка (NT = bc = 3, OF = 4,
в интерпретации статьи и
в интерпретации матлаба)
00_____________0.000000000_____________ 0.0004
01_____________0.000000001_____________ 0.0009
02_____________0.000000025_____________ 0.0021
03_____________0.000000523_____________ 0.0044
04_____________0.000007968_____________ 0.0087
05_____________0.000088083_____________ 0.0159
06_____________0.000706775_____________ 0.0267
07_____________0.004116537_____________ 0.0415
08_____________0.017403891_____________ 0.0595
09_____________0.053410195_____________ 0.0788
10_____________0.118977665_____________ 0.0962
11_____________0.192384558_____________ 0.1085
12_____________0.225807554_____________ 0.1129
13_____________0.192384558_____________ 0.1085
14_____________0.118977665_____________ 0.0962
15_____________0.053410195_____________ 0.0788
16_____________0.017403891_____________ 0.0595
17_____________0.004116537_____________ 0.0415
18_____________0.000706775_____________ 0.0267
19_____________0.000088083_____________ 0.0159
20_____________0.000007968_____________ 0.0087
21_____________0.000000523_____________ 0.0044
22_____________0.000000025_____________ 0.0021
23_____________0.000000001_____________ 0.0009
24_____________0.000000000_____________ 0.0004
Вполне очевидно, что значения различны ввиду различной интерпретации BT. Но если мы учтем что
и построим таблицу при следующих параметрах: Lg = 25 порядка (NT = bc = 3, OF = 4,
в интерпретации статьи и
в интерпретации матлаба), то получим таблицу:
00_____________0.000000000_____________0.0000
01_____________0.000000001_____________0.0000
02_____________0.000000025_____________0.0000
03_____________0.000000523_____________0.0000
04_____________0.000007968_____________0.0000
05_____________0.000088083_____________0.0001
06_____________0.000706775_____________0.0007
07_____________0.004116537_____________0.0041
08_____________0.017403891_____________0.0174
09_____________0.053410195_____________0.0534
10_____________0.118977665_____________0.1190
11_____________0.192384558_____________0.1924
12_____________0.225807554_____________0.2258
13_____________0.192384558_____________0.1924
14_____________0.118977665_____________0.1190
15_____________0.053410195_____________0.0534
16_____________0.017403891_____________0.0174
17_____________0.004116537_____________0.0041
18_____________0.000706775_____________0.0007
19_____________0.000088083_____________0.0001
20_____________0.000007968_____________0.0000
21_____________0.000000523_____________0.0000
22_____________0.000000025_____________0.0000
23_____________0.000000001_____________0.0000
24_____________0.000000000_____________0.0000
Теперь результаты полностью совпадают.
Остается вопрос какая же интерпретация верная? графики в статье были построены при BT в интерпретации статьи. Вроде бы они согласуются с графиками приведенными в различных спецификациях на GSM.