rf-tools/src/broadcast_fm/fir_filters/FM_Baseband_Filter.c

684 lines
17 KiB
C

#include "FM_Baseband_Filter.h"
static double filter_taps[FM_BASEBAND_FILTER_TAP_NUM] = {
-0.006276773743368246,
-0.002906124689895695,
-0.0034810491402275856,
-0.004053348584904465,
-0.004602917018038953,
-0.00510864933708306,
-0.005549178890478986,
-0.005903803434753803,
-0.006153352756740714,
-0.0062810419368997195,
-0.006273284055978816,
-0.0061205500978807606,
-0.005817832832522139,
-0.005365157561460779,
-0.00476798650929006,
-0.00403722847791321,
-0.003188871268023831,
-0.0022438395226593234,
-0.0012271560122908633,
-0.00016698144545659763,
0.0009061942378719186,
0.0019610873421838713,
0.0029665219630286475,
0.003892678282644405,
0.0047125166256176704,
0.005402338389433701,
0.005943231522926785,
0.006321383314346843,
0.00652916985473517,
0.006565317350605899,
0.006435200226996191,
0.006150572165634373,
0.005729115424630075,
0.0051935953163101374,
0.004570706217926675,
0.0038898729887556515,
0.003181825807588361,
0.002477679601003533,
0.001807325109970609,
0.001198808101593799,
0.000676466760403685,
0.00026038278850552165,
-0.00003519485538394603,
-0.0002024986474888905,
-0.00024019085124103728,
-0.00015331390959515178,
0.00004791480114281375,
0.00034866017633577485,
0.0007296960675978035,
0.001167933929422274,
0.001636917920572586,
0.0021085978153374337,
0.0025562644079397566,
0.0029568799307201055,
0.003291074349553435,
0.0035414284335566213,
0.0036920509207547503,
0.00373312207850841,
0.003666696471321502,
0.003502213813807159,
0.00324212650920447,
0.0028914904576434483,
0.0024934237802220847,
0.002043603816320018,
0.0015808468393586463,
0.001122598250955268,
0.0006936436970225945,
0.00031496346957593816,
0.000004837984574109052,
-0.00022232703032059695,
-0.0003566665079835044,
-0.00039339019608776595,
-0.000333110808989004,
-0.00018159497394687693,
0.00005048775593523694,
0.0003481061116814,
0.0006927997977343629,
0.0010638765819667507,
0.0014393167512730105,
0.0017971738401020903,
0.0021166520909361806,
0.0023791019266531147,
0.0025693090410960793,
0.002675931198702369,
0.0026923543124503487,
0.0026171805325111786,
0.002454031118912115,
0.0022116895646837804,
0.0019030267726684862,
0.0015446566595713781,
0.0011557133218574656,
0.0007570502661148399,
0.00037004878160910566,
0.00001556164895794005,
-0.0002873259421258282,
-0.0005225020827002275,
-0.0006778152785331262,
-0.0007458291450652108,
-0.0007237724027604178,
-0.0006139467826508875,
-0.0004230530550807403,
-0.0001628354231637733,
0.00015129060306465846,
0.0005003479818101034,
0.0008636162701018116,
0.0012200029156715312,
0.001548740624466772,
0.0018306821451188385,
0.0020487233738411786,
0.0021891204599193454,
0.002243244512808436,
0.0022077928016267247,
0.002084143087394179,
0.0018778523547873093,
0.0015991122050812935,
0.0012633901100129934,
0.0008900089027853051,
0.0004988789779988034,
0.00011015896725885363,
-0.0002535400937416474,
-0.0005702276065943115,
-0.0008248106197065263,
-0.0010037105425627479,
-0.0010922057096824714,
-0.0010918347055704724,
-0.0009972609130431105,
-0.0008171434769424912,
-0.0005602703726361708,
-0.00024184631248718984,
0.00011989306001557591,
0.0005039966417534989,
0.0008882139336450031,
0.001250150108424033,
0.0015684774729692547,
0.001824332418711941,
0.0020022457010850096,
0.0020909788043975276,
0.002084241239549793,
0.0019812511669580956,
0.001786670875323066,
0.0015105823732014887,
0.0011676956517593336,
0.0007765672753843151,
0.00035878897793891384,
-0.00006253548108123283,
-0.0004637552851828441,
-0.0008220930819068703,
-0.0011170665364279842,
-0.001331475322813246,
-0.001452868444758477,
-0.0014738073952633322,
-0.0013925554944245599,
-0.001212981144562626,
-0.000944644997827479,
-0.0006023329394979184,
-0.0002053053709292688,
0.00022392080409527296,
0.0006609144606176251,
0.0010805902221096093,
0.0014587022318349155,
0.0017727389893637477,
0.0020038657435381257,
0.0021373573333903907,
0.0021647196370404324,
0.0020828998261889996,
0.0018952302758044716,
0.0016108477670202955,
0.001244407904014974,
0.0008161029752255834,
0.00034959201045762735,
-0.00012940307877066482,
-0.0005940260022155878,
-0.0010176577556310668,
-0.0013754156241168216,
-0.0016462249002119438,
-0.0018142393477275655,
-0.0018687427312488538,
-0.0018046936739308204,
-0.0016246736311703472,
-0.001338448595903364,
-0.0009605147153735846,
-0.0005108126444730755,
-0.00001565838520828236,
0.0004975083602194651,
0.0010006023914098225,
0.001462016316333705,
0.001857288190223437,
0.0021606030300284607,
0.002354435255283183,
0.0024253663999272922,
0.0023675334058277852,
0.002182089414459102,
0.0018776951564996795,
0.0014698815939004595,
0.0009802099743280804,
0.00043530470972525385,
-0.0001346731858706825,
-0.0006976628796186629,
-0.0012215159916327684,
-0.0016757415624847984,
-0.002033429226170653,
-0.0022726649592763708,
-0.002378134377120082,
-0.002341854284500264,
-0.0021636093678711237,
-0.00185139126645343,
-0.0014208790055546586,
-0.000894944574293136,
-0.0003023080541089114,
0.00032421742432794986,
0.0009492104739322405,
0.001536916169711772,
0.0020528749242516003,
0.0024661761828563313,
0.002751173465403013,
0.0028891772783515117,
0.0028695579254982137,
0.002690486553108668,
0.002359106318284556,
0.0018913307558827979,
0.0013113627449627718,
0.0006501370380893174,
-0.00005591634751310549,
-0.0007677972770164452,
-0.001444647221437417,
-0.00204746257956741,
-0.0025398901810068483,
-0.002891736526827703,
-0.0030803898442519225,
-0.003091468726777203,
-0.0029207038921516223,
-0.0025741254950366896,
-0.002067973931355495,
-0.0014280157557714668,
-0.0006877721381443566,
0.0001126863109365815,
0.0009284005715601569,
0.0017128970482479869,
0.0024209880361363485,
0.003010137740662827,
0.0034433436111773724,
0.0036925735900344213,
0.0037392776355320164,
0.0035750549963301497,
0.003204686888263029,
0.002644455073483638,
0.0019206891969597553,
0.0010720437886563461,
0.00014236365066494383,
-0.0008162193794978551,
-0.001750205816244383,
-0.00260524888853366,
-0.003330448634355011,
-0.0038806885762527085,
-0.0042197018719619,
-0.004322310610781536,
-0.004175978670258643,
-0.003781919171806373,
-0.0031554249088873213,
-0.0023255577897850145,
-0.0013338142329436104,
-0.0002321551782802385,
0.000919847567321573,
0.002057758110308816,
0.0031159521593161162,
0.004031228465119642,
0.004746373230231019,
0.005213833074755009,
0.005398368179397916,
0.005279622770016463,
0.0048537340045996654,
0.004133945043852994,
0.003150792733934946,
0.0019506897625897466,
0.0005941555193940558,
-0.0008472848222071792,
-0.002294579340030699,
-0.0036652622277313592,
-0.004877798689965437,
-0.00585630529385358,
-0.006535021981369312,
-0.006862209393606202,
-0.006803716425690461,
-0.0063451726267535384,
-0.005494638978117847,
-0.004281728798042104,
-0.0027587324158575986,
-0.0009964288997051905,
0.0009165389378955883,
0.002878840922760619,
0.00478156331351961,
0.0065128972068082235,
0.00796484714665623,
0.009038598083889997,
0.009650143724551814,
0.009736399158760185,
0.009259146172550439,
0.008207929636538491,
0.006603125277341979,
0.004496736872907695,
0.0019706087511477417,
-0.0008653143095612088,
-0.0038758915334291878,
-0.006906924032827862,
-0.00979143836062656,
-0.012355548332571993,
-0.014427563844913744,
-0.015845425534902112,
-0.016463427343763833,
-0.016162193538925198,
-0.014851592429837827,
-0.012479356514209913,
-0.009032813295982706,
-0.00454241087129261,
0.0009187305291106804,
0.007235761344299075,
0.014255324035897835,
0.021790491494704824,
0.029627294762135707,
0.03753261929369517,
0.04526278875865766,
0.05257290583779067,
0.05922632186497995,
0.06500420017090862,
0.06971390965779961,
0.07319701890747447,
0.07533548531500543,
0.07605647784784841,
0.07533548531500543,
0.07319701890747447,
0.06971390965779961,
0.06500420017090862,
0.05922632186497995,
0.05257290583779067,
0.04526278875865766,
0.03753261929369517,
0.029627294762135707,
0.021790491494704824,
0.014255324035897835,
0.007235761344299075,
0.0009187305291106804,
-0.00454241087129261,
-0.009032813295982706,
-0.012479356514209913,
-0.014851592429837827,
-0.016162193538925198,
-0.016463427343763833,
-0.015845425534902112,
-0.014427563844913744,
-0.012355548332571993,
-0.00979143836062656,
-0.006906924032827862,
-0.0038758915334291878,
-0.0008653143095612088,
0.0019706087511477417,
0.004496736872907695,
0.006603125277341979,
0.008207929636538491,
0.009259146172550439,
0.009736399158760185,
0.009650143724551814,
0.009038598083889997,
0.00796484714665623,
0.0065128972068082235,
0.00478156331351961,
0.002878840922760619,
0.0009165389378955883,
-0.0009964288997051905,
-0.0027587324158575986,
-0.004281728798042104,
-0.005494638978117847,
-0.0063451726267535384,
-0.006803716425690461,
-0.006862209393606202,
-0.006535021981369312,
-0.00585630529385358,
-0.004877798689965437,
-0.0036652622277313592,
-0.002294579340030699,
-0.0008472848222071792,
0.0005941555193940558,
0.0019506897625897466,
0.003150792733934946,
0.004133945043852994,
0.0048537340045996654,
0.005279622770016463,
0.005398368179397916,
0.005213833074755009,
0.004746373230231019,
0.004031228465119642,
0.0031159521593161162,
0.002057758110308816,
0.000919847567321573,
-0.0002321551782802385,
-0.0013338142329436104,
-0.0023255577897850145,
-0.0031554249088873213,
-0.003781919171806373,
-0.004175978670258643,
-0.004322310610781536,
-0.0042197018719619,
-0.0038806885762527085,
-0.003330448634355011,
-0.00260524888853366,
-0.001750205816244383,
-0.0008162193794978551,
0.00014236365066494383,
0.0010720437886563461,
0.0019206891969597553,
0.002644455073483638,
0.003204686888263029,
0.0035750549963301497,
0.0037392776355320164,
0.0036925735900344213,
0.0034433436111773724,
0.003010137740662827,
0.0024209880361363485,
0.0017128970482479869,
0.0009284005715601569,
0.0001126863109365815,
-0.0006877721381443566,
-0.0014280157557714668,
-0.002067973931355495,
-0.0025741254950366896,
-0.0029207038921516223,
-0.003091468726777203,
-0.0030803898442519225,
-0.002891736526827703,
-0.0025398901810068483,
-0.00204746257956741,
-0.001444647221437417,
-0.0007677972770164452,
-0.00005591634751310549,
0.0006501370380893174,
0.0013113627449627718,
0.0018913307558827979,
0.002359106318284556,
0.002690486553108668,
0.0028695579254982137,
0.0028891772783515117,
0.002751173465403013,
0.0024661761828563313,
0.0020528749242516003,
0.001536916169711772,
0.0009492104739322405,
0.00032421742432794986,
-0.0003023080541089114,
-0.000894944574293136,
-0.0014208790055546586,
-0.00185139126645343,
-0.0021636093678711237,
-0.002341854284500264,
-0.002378134377120082,
-0.0022726649592763708,
-0.002033429226170653,
-0.0016757415624847984,
-0.0012215159916327684,
-0.0006976628796186629,
-0.0001346731858706825,
0.00043530470972525385,
0.0009802099743280804,
0.0014698815939004595,
0.0018776951564996795,
0.002182089414459102,
0.0023675334058277852,
0.0024253663999272922,
0.002354435255283183,
0.0021606030300284607,
0.001857288190223437,
0.001462016316333705,
0.0010006023914098225,
0.0004975083602194651,
-0.00001565838520828236,
-0.0005108126444730755,
-0.0009605147153735846,
-0.001338448595903364,
-0.0016246736311703472,
-0.0018046936739308204,
-0.0018687427312488538,
-0.0018142393477275655,
-0.0016462249002119438,
-0.0013754156241168216,
-0.0010176577556310668,
-0.0005940260022155878,
-0.00012940307877066482,
0.00034959201045762735,
0.0008161029752255834,
0.001244407904014974,
0.0016108477670202955,
0.0018952302758044716,
0.0020828998261889996,
0.0021647196370404324,
0.0021373573333903907,
0.0020038657435381257,
0.0017727389893637477,
0.0014587022318349155,
0.0010805902221096093,
0.0006609144606176251,
0.00022392080409527296,
-0.0002053053709292688,
-0.0006023329394979184,
-0.000944644997827479,
-0.001212981144562626,
-0.0013925554944245599,
-0.0014738073952633322,
-0.001452868444758477,
-0.001331475322813246,
-0.0011170665364279842,
-0.0008220930819068703,
-0.0004637552851828441,
-0.00006253548108123283,
0.00035878897793891384,
0.0007765672753843151,
0.0011676956517593336,
0.0015105823732014887,
0.001786670875323066,
0.0019812511669580956,
0.002084241239549793,
0.0020909788043975276,
0.0020022457010850096,
0.001824332418711941,
0.0015684774729692547,
0.001250150108424033,
0.0008882139336450031,
0.0005039966417534989,
0.00011989306001557591,
-0.00024184631248718984,
-0.0005602703726361708,
-0.0008171434769424912,
-0.0009972609130431105,
-0.0010918347055704724,
-0.0010922057096824714,
-0.0010037105425627479,
-0.0008248106197065263,
-0.0005702276065943115,
-0.0002535400937416474,
0.00011015896725885363,
0.0004988789779988034,
0.0008900089027853051,
0.0012633901100129934,
0.0015991122050812935,
0.0018778523547873093,
0.002084143087394179,
0.0022077928016267247,
0.002243244512808436,
0.0021891204599193454,
0.0020487233738411786,
0.0018306821451188385,
0.001548740624466772,
0.0012200029156715312,
0.0008636162701018116,
0.0005003479818101034,
0.00015129060306465846,
-0.0001628354231637733,
-0.0004230530550807403,
-0.0006139467826508875,
-0.0007237724027604178,
-0.0007458291450652108,
-0.0006778152785331262,
-0.0005225020827002275,
-0.0002873259421258282,
0.00001556164895794005,
0.00037004878160910566,
0.0007570502661148399,
0.0011557133218574656,
0.0015446566595713781,
0.0019030267726684862,
0.0022116895646837804,
0.002454031118912115,
0.0026171805325111786,
0.0026923543124503487,
0.002675931198702369,
0.0025693090410960793,
0.0023791019266531147,
0.0021166520909361806,
0.0017971738401020903,
0.0014393167512730105,
0.0010638765819667507,
0.0006927997977343629,
0.0003481061116814,
0.00005048775593523694,
-0.00018159497394687693,
-0.000333110808989004,
-0.00039339019608776595,
-0.0003566665079835044,
-0.00022232703032059695,
0.000004837984574109052,
0.00031496346957593816,
0.0006936436970225945,
0.001122598250955268,
0.0015808468393586463,
0.002043603816320018,
0.0024934237802220847,
0.0028914904576434483,
0.00324212650920447,
0.003502213813807159,
0.003666696471321502,
0.00373312207850841,
0.0036920509207547503,
0.0035414284335566213,
0.003291074349553435,
0.0029568799307201055,
0.0025562644079397566,
0.0021085978153374337,
0.001636917920572586,
0.001167933929422274,
0.0007296960675978035,
0.00034866017633577485,
0.00004791480114281375,
-0.00015331390959515178,
-0.00024019085124103728,
-0.0002024986474888905,
-0.00003519485538394603,
0.00026038278850552165,
0.000676466760403685,
0.001198808101593799,
0.001807325109970609,
0.002477679601003533,
0.003181825807588361,
0.0038898729887556515,
0.004570706217926675,
0.0051935953163101374,
0.005729115424630075,
0.006150572165634373,
0.006435200226996191,
0.006565317350605899,
0.00652916985473517,
0.006321383314346843,
0.005943231522926785,
0.005402338389433701,
0.0047125166256176704,
0.003892678282644405,
0.0029665219630286475,
0.0019610873421838713,
0.0009061942378719186,
-0.00016698144545659763,
-0.0012271560122908633,
-0.0022438395226593234,
-0.003188871268023831,
-0.00403722847791321,
-0.00476798650929006,
-0.005365157561460779,
-0.005817832832522139,
-0.0061205500978807606,
-0.006273284055978816,
-0.0062810419368997195,
-0.006153352756740714,
-0.005903803434753803,
-0.005549178890478986,
-0.00510864933708306,
-0.004602917018038953,
-0.004053348584904465,
-0.0034810491402275856,
-0.002906124689895695,
-0.006276773743368246
};
void FM_Baseband_Filter_init(FM_Baseband_Filter* f) {
int i;
for(i = 0; i < FM_BASEBAND_FILTER_TAP_NUM; ++i)
f->history[i] = 0;
f->last_index = 0;
}
void FM_Baseband_Filter_put(FM_Baseband_Filter* f, double input) {
f->history[f->last_index++] = input;
if(f->last_index == FM_BASEBAND_FILTER_TAP_NUM)
f->last_index = 0;
}
double FM_Baseband_Filter_get(FM_Baseband_Filter* f) {
double acc = 0;
int index = f->last_index, i;
for(i = 0; i < FM_BASEBAND_FILTER_TAP_NUM; ++i) {
index = index != 0 ? index-1 : FM_BASEBAND_FILTER_TAP_NUM-1;
acc += f->history[index] * filter_taps[i];
};
return acc;
}