|
|
本帖最后由 caileili 于 2010-4-4 02:05 编辑 + R8 L+ G# V: p7 h& }
(2)采样频率2n->3n的算法,非整数倍…………
/ G% Y" `* ^& Z" Y4 p6 T# W整数倍SRC和非整数倍有什么不同吗?没有的。其实非整数倍升频 = 整数倍升频 + 整数倍降频 而已,而且降频时还根本不需要计算,直接跳着取数就可以了。
W* x( r s7 M6 N- s( I
2 p% a8 X: I; v2 Y2 d# ]/ e! H引用 ...3 g7 V* r, n+ s7 u4 E: [
Timme 发表于 2010-4-3 11:03 ![]()
' S( X5 x. l8 G* G6 X: |5 J r3 D+ D
6 P: Q8 K' o% Q. _
6 }& Q2 L( ~( h
那就按这位兄台的高见对图例中非整数倍取样重新进行演算:(没时间画图,大家看步骤理解吧!)
! Y+ y$ g. p/ e7 B0 }: l原始:0,1,0,-1,0, 0,1,0 ……
& t( }& n+ ?8 g$ G4 G9 B' t4 F整数倍升频:[0,0,0],[1,1,1],[0,0,0],[-1-1,-1],[0,0,0], [0,0,0],[1,1,1],[0,0,0] ……7 }; P/ C5 k3 i, R
低通(简单):[0,0,0.33],[0.66,1,0.66],[0.33,0,-0.33],[-0.66,-1,-0.66],[-0.33,0,0], [0,0,0.33],[0.66,1,0.66],[0.33,0,0] ……
& x, I- d( i5 x1 p# @, K3 @& x整数倍降频:[0,0.33],[1],[0.33,-0.33],[-1],[-0.33,0], [0],[0.66,0.66],[0] ……
$ ^% R4 s5 h) Z" f: R输出:0,0.33,1,0.33,-0.33,-1,-0.33,0, 0,0.66,0.66,0 ……) h. A5 ~" Z3 z1 x
- s: S$ R) G) ~& Z* x$ q原始的第二三四取样点之间是条直线波形[1,0,-1],经非整数倍取样后输出波形变成了[1,0.33,-0.33,-1]仍是条直线,此时没有失真;! X8 q5 Q3 r, v. g8 O% K' I
原始的第四五取样点之间是条直线波形[-1,0],经非整数倍取样后输出波形变成了[-1,-0.33,0]是条折线,即对原始波形间存在变形/失真
/ Z* y1 l& Z9 e+ L9 f6 E2 E原始的第六七八取样点之间是条上三角波形[0,1,0],经非整数倍取样后输出波形变成了[0,0.66,0.66,0]是个被削波的梯形,即对原始波形间存在较大变形/失真# j2 J( I+ R% s3 _7 l
看来这种非整数倍SRC算法的失真确实是存在的(演示图片描述是恰当的),而且可以看到是在整数倍降频(直接跳着取数)过程中产生了失真,在输出时的时间位移上也会产生失真,这些不是改进低通平滑算法能解决的,所以不能说是我演示时低通算法的问题哦!
! U V0 k( \' [# W. |' ~) C( E+ a/ i) H9 H3 J# X
换个角度来说吧,如果这种简单的非整数倍SRC算法不存在失真,那AC97的SRC问题也就不会出现了,很多声卡也不会搞双晶振了,Foobar里面也不会开发这么多重采样插件了……!0 }3 X0 I1 u( |, h5 L
Foobar里的SSRC X重采样插件的保真度挺高,所需CPU运算也挺高的,所以它的算法原理应该相当复杂的,不然也不会达到这么高的转换音质了! |
|