|  | 
 
| 工程师和各位发烧友大家好:我最近采购了创龙OMAPL138开发板用于音频信号处理,用了AIC3106+EDMA进行音频数据采集,然后处理(6748核心),在处理过程中碰到了一个问题,希望大家帮忙。问题如下: % [- M; Y5 a" i# B# ?" r我修改SlaveLinein这个例程中,从三缓冲换成两缓冲,通过EDMA3把数据保存在两个地方  6 E  k# I& [* `: I9 i- u
 data[0][] 储存左声道数据data[1][]储存右声道数据, 然后data[0][]的数据复制到Mem_Copy_float(ConvIn+SYNCLEN-1,&data[0][0],2*BUFF_SZ);7 s) j9 h3 C0 o/ V' o  f
 Convin数组里面,然后做本地信号localSync做卷积DSPF_sp_convol(ConvIn, LocalSync, ConvOut, SYNCLEN, CONVOUTLEN);' d3 \/ a1 k: p5 s; Q
 7 S6 u2 \' P* v$ U, t
 CacheInv((unsigned int) (rxBuf0),sizeof(rxBuf0));4 w0 W2 ~4 |8 ^( _' J$ w2 g4 h
 CacheInv((unsigned int) (rxBuf1),sizeof(rxBuf1));4 ~: `( A3 R$ l, ?; V% F1 W" p
 ; e' v1 e2 g7 @- y5 ?( m! r- k4 D
 #if (CHNUM==2)
 1 y+ c( }6 |- }0 A/ V6 Z; M                {. z! p" D! l0 N/ b" i+ W
 temp=((rxBuf1[4*i+1]<<8)+(rxBuf1[4*i]<<0)-OFFSET);                   //左声道         把8bit变成16bit- z' L  x5 k  V% G
 data[0][i+BUFF_SZ]=1.0f*temp/32768.0f;                                         //转换成浮点6 F# C4 B8 Z% X% R" e5 q
 recdata_ch1[cnt]=1.0f*temp/32768.0f;                                             //保存数据不处理2 P4 u6 B/ }8 s* X! o) R7 m& z
 temp=((rxBuf1[4*i+3]<<8)+(rxBuf1[4*i+2]<<0)-OFFSET);              //右声道/ P# k" ]  {& k7 k! h6 v
 data[1][i+BUFF_SZ]=1.0f*temp/32768.0f;. P! z8 j# t9 I1 C
 recdata_ch2[cnt]=1.0f*temp/32768.0f;, P. Z3 ~- t- J" F
 cnt++;+ q) \8 W" h; B& P& ^  I
 }
 ; Q# Y2 l) X9 d7 |4 @! r& X0 B
 9 t: |# x4 v$ N
 9 d( ]* t$ [/ h4 {! M
 . q1 D5 ?! C8 m4 @3 d8 J而recdata_ch1和recdata_ch2的数组很大,在48k采样率下可以保存25秒的数据,recdata_ch1和recdata_ch2不参与任何计算,只保存数据,用于观察数据是否正确。
 & E, X9 E4 k9 @0 o% yEDMA采样双缓冲模式,缓冲区长度160ms,每次缓冲满以后数据就复制到ConvIn,做一次卷积,做卷积的时间远远小于缓冲区的时间,这个保证数据不会丢失。/ g$ z0 C5 l* S3 @% Z
 出现的问题是,如下图所示,在信号空白信号中出现微小的噪声,而两个微小噪声的周期刚好就是一个buffer长度160ms! ~  q! Z! h8 V, ?. X; V
 
 : t( _7 Z0 D7 C8 _* \3 `$ n
 . N0 Z) A; H; ?- I2 p4 ~  L% |. k. x! @2 K7 Q% [) U
 当我把卷积处理去掉的时候,信号是正确的,如下图所示
 ' W5 d: A8 ~! K/ E& E- h3 v2 n- [- J
 
 ) G, D# [& e/ ]' o1 n0 k* y7 M1 U+ g( i" W3 E
 上述所有数据放在DDR2中,在main一开始启用cache
 $ {2 S( `! Q0 ^5 G2 J CacheEnableMAR((unsigned int)0xC0000000,(unsigned int)0x10000000);
 / S3 h! A: F' ~' y CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K | L2CFG_L2MODE_256K);0 k; S4 q4 m. t( K
 4 r4 y3 ^' F( Y. n4 @
 
 $ U% R* P; S8 M" M我估计是数据一致性的问题,但是,不知道要修改哪里,怎么修改,麻烦大神给一些提示或者指导。感激不尽。
 " [+ Y1 Q- `0 e& R2 q
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有帐号?立即注册 
  |