7 b0 r5 [' h( O% {1 c2 j0 ^ int myfuck; ~3 B1 j8 a6 [/ \6 E+ {, B+ O double yiDuanShuJu_mean; " o T! `. h, ? double yiDuanShuJu_LowMean[1000];# {% I, ~2 p' u
int ixstart; ) P4 i! j4 o- z6 @" ?1 k double dv0[1000];* M. z. @: o) i H
comm_AGC pAGC; 7 U* |7 k7 w& \) j& b8 w8 a comm_CarrierSynchronizer pFineFreqCompensator;2 ?6 Q. u, v8 L8 a
dspcodegen_FIRDecimator pRxFilter;& p% I7 V0 Z. M# S/ ~
comm_SymbolSynchronizer pTimingRec; ) ^# ~% j4 W( ?4 Q; V7 f7 ]5 M comm_PreambleDetector pPrbDet; 5 p0 X3 o: G% ]- H FrameSynchronizer pFrameSync;9 D! `' S' k) s2 I1 \) ^% Q
QPSKDataDecoder pDataDecod;) O* N! F H4 N2 l$ n
static double usable_left_filtfilt[81000]; * k) Y, I @' `6 p static double youXiaoShuJu_QuZhiLiu[81000]; ( r( z; E# U+ H3 D8 j8 m double mtmp; 5 @: g! M' n8 M) Q; U int ix;! A6 r; I8 z3 Z( U, F+ p3 E V# x
boolean_T exitg2; & C, [: r: f; \ boolean_T exitg1; 8 R5 k- [# H( K5 z double YiZhenShuJu[800]; . E& h: z4 Q( w( Y' ?3 `4 Z' r7 w double dv1[800]; 0 v/ e& E" B* _% Z7 G9 q3 W4 }. J' h' G
, C" B% t" f- S
double b_YiZhenShuJu[800];/ ~" m% O1 f( \. K! o& Q
double I_filtfilt[800];# ^$ E1 c7 @4 y3 U& s3 ^
double Q_filtfilt[800]; ! q4 r; k! P4 V creal_T b_I_filtfilt[800]; ) ]7 W$ V" w* ~! V9 | creal_T b[800];- p: Z" ~1 ?% d! o+ m( B& @- P
creal_T RCRxSignal[50]; : Q: C1 e9 {1 S% o% N8 j creal_T fineCompSignal[50];+ G) S1 r: S5 t( S3 Y/ |8 ~, `! @
double phError[50];; |) D7 r9 n8 G
creal_T timingRecSignal_data[28]; 3 N9 o2 v3 W$ B3 l# [' F J int timingRecSignal_size[1];$ F% x" L1 c S% S2 D) g
double prbIdx_data[28];0 n3 [4 U" ]& G) z$ A N& p
int prbIdx_size[1];3 R( }8 L1 n' X. |
double dtMt_data[28]; . d5 `/ D! ]4 }$ {1 }' K/ W9 e) S int dtMt_size[1]; ! W7 ?8 K, Q1 Q+ a# v+ u creal_T symFrame[25];) E E' u0 f. D/ M, J9 k
boolean_T isFrameValid; : c+ w9 P4 ~! i; b) V, f double unusedU0[3]; ) g g4 ]0 M9 _; n/ u' b % F. n [$ m' V6 N: p8 q, Z5 v //调试过程中的变量' m3 [7 q8 M8 G, G& E2 D: C
int enough_data; 8 u. {2 c* {7 O, ~! S0 m0 p+ M7 h3 Y
int enoughDataFlag;) d9 p5 r7 t h5 n2 L
int yiDuanShuJu_mean_int;( n; H* m( U$ @- M% ?+ k
int int_sum_dv0; 5 F5 \1 K' E: Q4 P) y int oo;8 _" E) b4 u: e
int ii; + b1 ^0 O! b* C0 q myfuck=10;( N% V$ k H3 Q' v
/* 模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */" k5 I" [, {- C; m L0 d1 X1 t" L
/* 考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */7 X' A/ ^: H) Y+ x$ A+ W
3 G. ^/ n9 ^; i2 _! s8 s" c3 s
yiDuanShuJu_mean = mean(data1000); % N; p* V8 `8 m5 q. ~# e2 t 6 v! k9 `$ _( V' r% o5 G yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;4 r4 c" _* q% h+ c+ g6 N3 ?5 N
UARTPutc('A'); 0 l* ]- o2 w; n; Y3 _ UARTPutNum(yiDuanShuJu_mean_int); : S* B8 b" D/ {' t UARTPutc('\r');, w' r$ a5 Z5 G
UARTPutc('\n'); 9 @2 B6 }& S9 y4 _1 A! m3 M ! {( ^. r; {6 U+ `" L! [1 m6 K8 h for (ixstart = 0; ixstart < 1000; ixstart++) { i) u% c% f/ S5 `
yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean; 4 R+ d8 A" I; k# }- s; E } " u; T$ w$ \. C$ H! o- v. v. F t$ p( t; I# q0 [: ?
power(yiDuanShuJu_LowMean, dv0); 1 Q& v& n' s8 J' j+ C& X 7 A0 I2 }0 `2 |. Q& i( E8 D4 S2 M int_sum_dv0 = (int) sum(dv0); + P' [9 ]1 f5 b1 w% u+ ?& [/ N6 D$ q `4 Q
UARTPutc('B'); $ {5 o. [+ ~6 G6 E* [ UARTPutNum(int_sum_dv0); + f2 y' ~& T& v0 Y1 [ UARTPutc('\r'); ; V! s/ n% o" Z5 i* y% v5 t UARTPutc('\n');6 D( K- Y) w5 \- ?2 c0 L+ V* P' V0 p
+ b/ n: f- S) c8 J9 b// int compareFlag = int_sum_dv0 > 1.0E+8; ; N0 k! ?9 g% _2 ^' `5 \& D' {# b- ]$ u z: U! K
if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗? : z+ b! a& {* l! y \. E UARTPutc('C');9 v' T( r, U* u% N, \
/* 比较信号能量 */. \6 w- h/ S$ m/ v) Z& D
/* fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */ ; H0 ^* O; _$ p# ]2 p% c// yiDuanShuJu_mean = 1000.0 * youxiao_k; * ]4 H% Y0 [; j1 K, ]) z// for (ixstart = 0; ixstart < 1000; ixstart++) {6 H0 f! E0 x, K' K2 | I
// save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =3 ^6 F3 W* p; u$ b$ k) B: c
// yiDuanShuJu_LowMean[ixstart];( j' ^* g. Z/ v
// }) {, k: [" L4 N& i; }8 h
//% `, U+ D7 @& g; n+ B
// youxiao_k++;- C8 J g$ T& Z. e4 h
// if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 B3 n( ~+ z0 s+ [0 Q5 h% q
// /* 感觉要取21个数,即0-20, */ $ s9 T# S: X$ d. K// enough_data = 10;//有效是10,无效是0- J/ _" p! s! W1 I( B3 J+ z" _4 c
// } . }, j! ^7 A$ ] } 2 k% i" J0 ]- g! S ' S3 y& d# v7 n1 n5 c5 g, ~4 O. F4 R* W
enoughDataFlag = 100; 4 J3 S }( u/ c5 j1 y; m; ^1 J enoughDataFlag = 1000;* s0 c. u2 V* E& A% C
enoughDataFlag = 0x02;+ k4 w0 `+ J. F* h
enoughDataFlag = 200;+ V$ {8 c9 S0 Q* t C, N
& [" ?0 `( T" |( T' t
int myfuvk1;7 b4 t* }, v2 j7 o, u
myfuvk1 =11; & g) \' Y. P- f) W# Q" Z+ g 1 H) I# H8 z) q- t8 { D* g. F9 q# w! h7 S
enough_data = 0; $ q, }! {/ P Z+ n; F* q0 \/ {# ] + ?0 W! d; Z% M/ {' T3 \// if(enough_data>50){ ! u A' b: h6 c" q1 u7 g// enoughDataFlag=0x01;2 @ v( q" l, T
// }else if(enough_data<50){3 ~: V% O- ]) E% w( \
// enoughDataFlag=0x00;//0x00还是不行6 e3 z( d. H, q( {. A5 u
// }% H4 J( K) d" B" Y0 k
/ G4 h5 M/ B- K) b) F. C! C* t8 c, r, S* K! i8 U
oo=10; 4 f3 e7 e2 K3 b. _ oo = oo < 5; ) ?/ B8 y8 j9 k+ B H& { if(oo){* J7 \1 `9 }7 J. f. A
ii=0;: q( K8 V. J. `0 s
} 8 m( r2 X# c3 s5 s9 m/ e3 i y if(oo < 5){9 G7 r; h _. e7 o. a% E
ii=0;9 D8 [: |3 x/ w- q9 P: X3 B
}( z9 v& Y' J0 P$ I; s4 ]% u0 T
if(oo > 5){6 l. I% ^! x. R. ]# L S
ii=0; 0 m7 F, ?+ G) b1 u( n2 h }# x8 ?; z7 F2 m9 B
4 S- m7 s, F- k) j1 N5 h
/* save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */ ; v: n; [, k, z' T /* 如果数据足够才执行主程序 */& b9 V* ]3 T5 d( n. P* u4 ^6 M
oo = oo < 5;+ ^9 S9 A; l3 k4 o) Q' T+ F
enoughDataFlag = enoughDataFlag < 5;8 {2 ]; w3 t u* t- U; N: w" `
if (enoughDataFlag < 5) { % x; A! e: j5 ^/ a& @// if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0 1 d) r% j& V. L; ` AGC_AGC(&pAGC);+ o: P5 b9 H+ s; \% ?
% o1 U w' v1 j/ p- r/ k X c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator); 1 g0 k/ b& c1 x d1 h" M FIRDecimator_FIRDecimator(&pRxFilter);( I$ e2 t5 r+ `- G
7 d# Z2 ?+ J( E% p& j- _ /* Downsampling */ O- R: u$ m9 O- V6 S8 @" f c_SymbolSynchronizer_SymbolSync(&pTimingRec); 4 Y) C7 n" A/ J7 ] + ~& K* I- l( N- t( `/ ? c_PreambleDetector_PreambleDete(&pPrbDet); / ~( F1 B0 f; j x& [% k+ P& H. W 8 ^1 F0 _% B9 j! T$ ~ /* 'Threshold', 8);空气信道情况下,把阈值从8改成7 */; i: {! u1 p( Q: D
/* %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */- c2 K5 X' Z' R- V/ I) Y
/* %帧数量=100 */ 2 c7 f+ G) k8 P! Y& F pFrameSync.isInitialized = 0; ! ?% j4 D* d3 @, s) _% F6 J$ n6 i
/* [EOF] */5 e- D M/ d& G3 b# u
/* 前导码长度是13 */ 3 J/ y5 ~ B0 z8 [, G3 E2 L /* %qpsk */- i0 L& K4 m$ {* D# U
pDataDecod.isInitialized = 0; . V; \3 P8 O. A* T1 T$ L9 ?" H3 q. z# \% d: u: m
/* end */& J3 g* _, V) n$ d' a
/* %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */ 1 O7 B. [& U- t% b, g /* Convert 3-dB frequency */ . r0 x1 R# b. j( [ /* Convert 3-dB frequency */$ r# p- l% c4 w3 ? W
filtfilt(save_buffer, usable_left_filtfilt);5 [, ]* {2 U- K3 S
for (ixstart = 0; ixstart < 81000; ixstart++) {; F' a$ \! n' I# `' [8 G
usable_left_filtfilt[ixstart] *= 2.0; + g5 x t6 J% F3 b- I }' C2 S2 T% V5 i. W6 E1 S* n
F6 K9 i# O6 a o( h
/* 注意乘2,处理幅度 */ $ T( @. r7 O3 q1 [: ]2 ^# e9 B /* %% 我发现带通之后其实就均值为0了,不用这一步了 */8 Z- s5 |: v0 p6 W4 }9 G- K7 p
/* %% 行列转换 */ ' F! I% S( a1 m0 n yiDuanShuJu_mean = b_mean(usable_left_filtfilt); 9 o% K" e+ {) U$ B for (ixstart = 0; ixstart < 81000; ixstart++) { + {) Z: N O6 e* H; P$ `$ h youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]0 w) [( Q, A3 R
- yiDuanShuJu_mean; 5 W! d$ L7 x: s" Y3 l$ W }" G# c! J" K J
7 n) r+ m2 b; @! c) v$ k
/* %% 应该对数据归一化,但是这一步放在哪比较好 */ + y/ N4 _$ q, N7 j, g7 s ixstart = 1;# L! z/ j) l4 G3 v5 r4 `/ k
mtmp = youXiaoShuJu_QuZhiLiu[0];2 K& w) o% s+ S* L
if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) { |; g ^! b% F! a; f ix = 2; ' `7 ]9 t+ e; O& g: n+ |3 c exitg2 = false; + L% L; [) Z$ L2 s% z. Q while ((!exitg2) && (ix < 81001)) {2 i8 e$ H% h$ `! ?: a
ixstart = ix;" ^* g( h2 H7 ^9 r5 G' ^9 V9 O) X
if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) { " A' r5 I) y" h1 Q% I, Z5 Y, G U0 o mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];5 |2 O0 J8 W# ]0 M" c5 Z% J
exitg2 = true; ! b6 V* r6 C! _! O) G: H } else { 8 M4 T& l) t) x- G+ U0 g6 T k9 i ix++;. V' Q4 n5 v6 ]
} " ~3 p6 f( L" i* @3 \ } ) `$ Z! f/ J# T7 b; ?% f3 f/ @ } * f+ @# e2 O. a, U5 N8 ]! M/ m+ Q1 a. K
if (ixstart < 81000) {+ H- `, A% {6 m& R: K$ [" X0 k
while (ixstart + 1 < 81001) {- L1 q5 g8 [) p# t! _. f4 }" u
if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {& `) R9 t, P4 g/ U+ O' ] W
mtmp = youXiaoShuJu_QuZhiLiu[ixstart]; 2 N% d6 e/ m# p# D! l8 k } - T+ O/ z3 Q/ c: C 0 n; Z7 q: f7 P, o4 X2 K% t ixstart++; $ `7 T$ U5 U. S4 [ } 3 ` t! k" a& n$ K$ t0 m0 d } . X% }7 z3 t) Y8 o+ l9 s* I4 j & {/ u+ D9 N% B* f4 N1 u9 k, A ixstart = 1;% K8 A! p; k- Q( W# D" K( q6 Z
yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];. F0 q9 ]. e9 L& _5 ^
if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) { ) S* t2 z: l( E6 E9 T$ [- z7 t ix = 2;& y( x: q( C8 W! Z! u% E* X( m1 Z
exitg1 = false; / K1 U6 e0 u! S1 ^+ y* J* i9 k while ((!exitg1) && (ix < 81001)) { / m" l7 Z" c) E- e9 K$ | ixstart = ix; 5 K6 v `9 I- D1 J( [ if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 a2 k: U2 D2 W$ ]3 Y
yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];, A4 t7 l y- V" c
exitg1 = true;. f9 X, |* ]- t4 a9 c& m
} else { / y) r+ Q3 I4 I( ] ix++;- ]8 N7 u: u* H: c( R8 _/ _ \& n+ ~
}, `. w5 m2 \2 i9 @1 r4 W
}: ]8 G# m z: V
}* T. t T9 P6 g( U
* q0 J3 X- T0 F# b ]8 ~( F
if (ixstart < 81000) {7 @! j8 _4 }' B2 v5 h
while (ixstart + 1 < 81001) { 0 Z( H* G. Q5 T# | if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {( s& ^2 e! T, k$ C) d
yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];% m# Z* y$ I; E) _* W) C5 R
} 7 `/ D/ v3 m6 \' K. r0 s" L8 {8 D( h$ f( D i1 U; h
ixstart++; 0 d/ t( N) ^3 B4 ?6 t3 M2 g* u } ' ]. O( A9 o4 X; q; h- `. k* f }- J- H8 f' ]- `" l% B, N
; n6 F0 M3 s. S2 h- [! i
yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);2 w2 W1 A' o9 z; z) p4 S y4 C; q
if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) { ) n# q/ }2 S" a7 K yiDuanShuJu_mean = mtmp; # g. k, H* r( U) n$ b }1 `0 c" I: u" }, |3 [1 U) f
, I& I* \5 Z; F2 y0 m, B. U$ q /* 找出极值 */ 7 y3 o4 w. A& q3 @7 w% o for (ixstart = 0; ixstart < 81000; ixstart++) {6 A7 ^; z7 ]& U% S( l% S
youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;" Z i/ Y. @5 e5 z4 I
}. q& |, h2 p9 g* g$ M
3 U0 b) X/ M" W* @6 r% M/ m% H
--------------帖子字数限制------------------5 x5 {' t3 ?* A, ]; i% }; p
} 2 w% q3 N) B6 \$ e0 i, J+ Y0 U# u0 k6 \9 Y / v" N8 ]" g, {' N4 w3 C3 F 3 [; b3 T/ ^+ }作者: tenny 时间: 2017-6-8 16:37
会不会有其它并行的线程修改到了它