- 在线时间
- 0 小时
- 最后登录
- 2005-3-30
- 注册时间
- 2005-3-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 131 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 41
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 3
- 主题
- 3
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   37.89% 该用户从未签到
 |
本人目前正在开发一种新的音频编码器,在滤波器上遇到了问题,希望懂信号处理方面的大侠帮小弟一把。+ F1 m# g$ a! a3 x+ r( @
信号的图释% n" n5 t5 I% ^7 Z2 l" j/ m
http://www.piccube.de/uploads/d650f8f2d2.gif
2 @7 G: N" y7 D6 f3 S - J0 D6 E( T! t
http://www.piccube.de/uploads/cd0002d0e9.gif
' ]/ h# J# u4 u& Z {7 ~ " M" ^4 j* i! l8 p# r' v: W) U
信号频率范围(44100,10)HZ
+ M$ |% e, U! o! H* J2 P% g信号振幅(-32768,+32767)
5 F ]: R9 S- g( Q8 L7 P" y信号都是N个由未知振幅\频率\相位的正弦信号叠加而成的
! a# }" p W: H. o+ z2 P) u9 u5 fN是有限数量,也许是10个也许是50个也许是2个1 k @, O" s2 X6 p3 |# e6 f8 H
特别的是,信号的振幅不是固定不变的,也就是说在t1时刻是x1而在t2时刻是x2
7 U8 K5 o( I' i* ]2 E* W图中红色的是原始声音信号,白色的是经过算法处理后的信号。原始信号是完全没问题的,声音信号是从CD里面抓取的。
/ Y" c8 T# k' Q3 X: [红色原始信号经过了积分后变成白色信号,原本在0的位置上下震荡的信号漂移到了n的位置。现在要把信号矫正过来。绿色的线是0,有没有一种算法可以求出n。
0 }, {# u% K' M( g1 }% H: n% j相关的算法:
8 s) [' F/ W& M/ W3 S2 V滤波公式http://www.piccube.de/uploads/ef462128ea.gif
: @. N; p9 G! a& J1 n # A% c# M+ k. h8 l: P r$ x+ S) M0 y
double m_u_f=0;
5 }6 B- i9 x9 X5 ]7 ]for(x=0;x<size;x++)6 j( p0 B+ |3 \+ V8 a# V
{4 Z! h$ z: |( G: _1 G" z B% ]! |6 V$ r
m_u_f=pBuffer[x]+m_u_f;
) C" H" ?9 b$ Q1 P" k. l" y pBuffer[x]=m_u_f;
4 Y) D6 Z+ R" ~: K% \; s" C* T}2 b3 p/ P# n9 k! ~# E' L
算法很简单,就是对信号进行累加,但是实际上信号是经过了一个积分的过程。# ~# _6 R5 { @ q, [# V; ?, e- {; |
公式里面的X是时间,N是频率,a是初始时间。m_u_f里面的数值就是在x时刻等式右边的值。信号漂移的原因是N*cos(a/N)(就是画红圈的)这个在滤波过程中的定值所引起的。实际上只要求出这个定值就可以解决漂移的问题。但是N和a(a还包含了相位角的问题)在滤波之前是未知的,所以根本无发通过具体的参数来求出N*cos(a/n)。
2 |2 X& m! I( o. d8 Q/ B. b目前我可以想到的方法就是,对滤波后的信号(白色的)通过某种算法求出振荡中心位置。! ?/ j6 H9 Q5 H/ [; j4 c
有一点我要说明的,我的采样缓冲区长度不可能很长,只有1/10秒,就是4410个采样点。于是频率的范围是(10~22050)HZ。这是编码器的外在条件。 $ Y1 ?3 F! v" Z
若想联系本人请加QQ286726462,验证:声波的积分漂移 |
zan
|