POPPUR爱换

标题: 讨论观点:整数倍提高采样率可以在不失真的前提下改善听感 [打印本页]

作者: 归德居士    时间: 2010-4-1 21:53
标题: 讨论观点:整数倍提高采样率可以在不失真的前提下改善听感
本帖最后由 归德居士 于 2010-4-1 21:56 编辑
' [! ?: P/ v# x1 g8 _- x: w# F1 O" T! I' Y. ?3 M, E- m8 I3 \! |
和大家讨论个观点啊,我分析认为整数倍重采样提高采样率可以在不失真的前提下改善听感。$ H6 T: L9 r/ @/ t! G% F3 g
8 ]0 V/ i% `* U+ u
因为我想,整数倍提高重采样不需要破坏原来的采样点,仅仅是在原来的采样点每两个之间增加几个采样点来过渡。
  B, w8 S' H/ N% d; E5 v" X/ f% g  {7 d: ~7 A% A4 _9 L
比如第一个采样点数值为a,第二个数值为b,如果把采样率提高整数倍,就只需要在两个采样点之间增加一个数值在前后两个采样点之间的采样点作为过渡,比如说采用直线算法升频两倍,就只需要在两个采样点之间的中间点增加一个数值为 二分之一(a+b)的采样点,升频三倍,只需在两个采样点之间的三分之一处和三分之二处各增加一个采样点,共增加两个采样点,数值分别为 三分之二a+三分之一b 和 三分之一a+三分之二b。. x& m3 m; x! N# e' b6 ^6 ^

0 F" t2 _+ F% y0 b/ m! z这样,原来的采样点都没有失真,新增加的过渡采样点使声音更细腻,原来是从一个采样点猛跳到另一个,现在是在中间加几个,逐步过渡过去。& _) @" {/ J# I, q# g7 U
  U! r/ M" P5 v8 F1 w- W# M
鄙人才学疏浅,经验匮乏,还请大家多多指教和批评。
作者: 深水的鱼    时间: 2010-4-2 00:31
整数倍转换是可以改善听感的,但非整数倍转换不行,如图
3 w. @: J1 V/ G/ y5 p3 u9 ][attach]1250028[/attach]
作者: chenxy    时间: 2010-4-2 00:52
讨论下假如40Hz采样率提高到60Hz会怎么样还比较有意思。
作者: bull    时间: 2010-4-2 01:26
你的结论正确,但是原理不对
作者: sd-iori    时间: 2010-4-2 13:21
N久前,,就流行88Khz采样率去播放的啦,,,
! B& @$ Y8 [* n: S也确实感觉好一些,,,
( j8 c/ z/ U6 X: l: E* |' [不过原理,,不懂,,,
作者: caileili    时间: 2010-4-2 13:29
本帖最后由 caileili 于 2010-4-2 13:31 编辑
% l2 B7 M; {! n
/ t  Y; d: @+ ?) ~$ L6 D# h7 c" v单纯的整数倍提高采样率,然后中间采用简单的线性插值算法填充的话,只能说可以减少失真,但对提升音质意义不大!
( A2 T  l1 M# ~: d$ B- K如果能配合扰动算法,按音频信号曲线或趋向计算插值,这样可使波形接近采样前的原始声音,从而一定程度上提高音质!' Q( ~! W. F/ K- V0 J
但这个毕竟类似于把低像素的照片放大,最先进的放大算法画质也提升不了多少的,所以没什么人钻这个牛角尖!
作者: bull    时间: 2010-4-2 19:59
简单说一下,这个做法意义很大。1 a5 [7 M( L/ F) }
因为可以大幅度提高SNR4 x6 x, A! X4 w: s
大到了示波器上都能看出区别来
作者: Timme    时间: 2010-4-2 21:26
在PC上软件实现这个转换没有任何意义& H4 ]' t4 S+ _. b7 C

. \8 ?6 z; Z$ }# E4 {# @对于固定的DAC,采样率越低非线性失真越小(就是频率范围满足的前提下采样率越低越好)
作者: bull    时间: 2010-4-2 23:11
在PC上软件实现这个转换没有任何意义
0 [3 ^, X, k0 M' c% a/ w- l
, {) [" l+ J$ H/ J. E对于固定的DAC,采样率越低非线性失真越小(就是频率范围满足的前提 ...+ y. Y( x! I- S2 l* V% C# Z
Timme 发表于 2010-4-2 21:26
' M0 M" ?! _5 ?) {
抱歉,并不是越低越好
9 U/ t$ {9 h1 W: [/ Q# B  Y1 D' S就现在的声卡 2倍频是个很好的选择
作者: Leading    时间: 2010-4-3 00:33
支持6楼         。。。
作者: Metaverse    时间: 2010-4-3 10:29
如果能配合扰动算法,按音频信号曲线或趋向计算插值,这样可使波形接近采样前的原始声音,从而一定程度上提高音质!+ i  {' P, v$ Y6 p8 t ...% u$ ^( l, G, v
caileili 发表于 2010-4-2 13:29
0 s: n! s7 K- F, I* Y; K
$ R7 a1 b; _6 X( j: j3 [. _
FOOBAR有没有这样功能的插件?
作者: Timme    时间: 2010-4-3 11:03
本帖最后由 Timme 于 2010-4-3 11:11 编辑
; ^9 L; m$ p* v" L2 Y4 b
* |$ e6 u! I* \9 n无论整数倍还是非整数倍,算法都是一样的。2楼的图中波形没有经过低通,这种图在N年前就被我批过了
8 _8 r9 ?" c0 g
. g: ]- A7 t! q( p引用我自己设计的一个SRC算法(只是自己独立想出来的而已,不敢说第一个发明啊。后来我好像看到IEEE 70年代就有人发表这种算法了)8 N/ P5 e1 |; O0 F' x

  M% _9 b# U9 u0 P" |* f: c(1)采样频率2n->4n的算法,整数倍
- ?0 U, Z! Z# y" j- w
, j1 }9 j6 R" p/ ]  m$ e" I原始数据:a,b,c,d...
, ]2 L$ F& J/ j% R* P6 W先机械填充为a,a,b,b,c,c,d,d...(同样时间采样点数目翻倍,多出来的采样点数值复制原采样点)
9 B7 F5 k8 C5 z7 I& p' ~4 l通过一个低通,变成a0,a1,b0,b1,c0,c1,d0,d1...! c1 `( _8 t* a; @2 Q
SRC计算完成。同样时间内,4个采样点变成了8个采样点。
9 ^" ~- P# r# V) Z* ?  J(当低通性能足够好并且相差接近零时,有 a约等于a0,b约等于b0...)- h. V+ J9 m4 c8 n' p
6 Y- a& m5 a; e  h" J& r. n
(2)采样频率2n->3n的算法,非整数倍. k6 `3 \: s2 L: a: M6 ^4 ?$ a

, ?* j& D" p0 ]5 k  x1 `" \原始数据:a,b,c,d...
% d2 t9 J8 h: I  k8 m1 F& j8 u& o4 r先机械填充为2,3的最小公倍数的采样率:6,即a,a,a,b,b,b,c,c,c,d,d,d...! }6 j( O* \# [' R# v; r
通过一个低通,变成a0,a1,a2,b0,b1,b2,c0,c1,c2,d0,d1,d2...
  {4 l* M' l- s4 [$ I3 \我们跳一个取数:a0,a2,b1,c0,c2,d1.../ Y. l; q! I/ f7 l, E4 y
SRC完成。同样时间内,4个采样点变成了6个采样点。9 m. U  t/ s1 }7 p' s9 [

( t4 T! [( ]3 e- [, Q**************************************************  t+ O. w1 e7 S3 D' s) y
6 L/ ]; b+ b+ ^/ B% G
你看到整数倍SRC和非整数倍有什么不同吗?没有的。其实非整数倍升频 = 整数倍升频 + 整数倍降频 而已,而且降频时还根本不需要计算,直接跳着取数就可以了。
作者: Timme    时间: 2010-4-3 11:21
另外bull,所谓硬件升频提高SNR是DAC内部电路而已,但如果你把DAC工作模式从48k改为96k,那输出频段24k-48k这范围的噪音DAC内部就不过滤了,SNR反而低了。也可以理解为外部选择的采样频率越高,DAC内部升频的倍数就越低。如果说96k比48k好,我唯一能想到的就是低通在拐点附近性能劣化而已,但这个点离听觉极限已经有几khz的余量我觉得足够了。1 \3 D% R8 s; h) t8 h
  c7 w; W8 k* H4 X8 `
我觉得这是个很简单的问题,不知我有没有理解错
作者: bull    时间: 2010-4-3 14:55
另外bull,所谓硬件升频提高SNR是DAC内部电路而已,但如果你把DAC工作模式从48k改为96k,那输出频段24k-48k ...
/ @5 y6 ~4 V3 V3 N3 H: BTimme 发表于 2010-4-3 11:21
% x( W3 @0 t! x) H% Q+ F1 \! D6 K: L
你对现在的DAC芯片怎么工作的并不清楚。
作者: Timme    时间: 2010-4-3 16:10
比教科书上写的Multibit + OverSampling + Noise Shaping还多了啥?
作者: caileili    时间: 2010-4-3 22:36
本帖最后由 caileili 于 2010-4-4 02:05 编辑
' i: q3 W" L4 i# U* w# f  g6 ~
(2)采样频率2n->3n的算法,非整数倍…………
* B1 i* Y. I' P0 W( [2 ^9 Q( [1 K整数倍SRC和非整数倍有什么不同吗?没有的。其实非整数倍升频 = 整数倍升频 + 整数倍降频 而已,而且降频时还根本不需要计算,直接跳着取数就可以了。
0 k$ ~% h3 R) Y3 S5 S
" C6 `. d4 ~5 Q$ i; u- d4 A1 J引用 ...5 c$ Z. a2 S: i
Timme 发表于 2010-4-3 11:03

- c) {  j" h0 S
- M: Z2 \6 y9 ~: y4 N0 `5 s8 R# L5 p) k5 N( q
. R: _  {; T6 `) H# a
那就按这位兄台的高见对图例中非整数倍取样重新进行演算:(没时间画图,大家看步骤理解吧!)2 j% j- ^: M/ A) r4 t/ e1 w+ T
原始:0,1,0,-1,0,  0,1,0 ……8 E6 z1 L3 w! `: i3 Q. ]
整数倍升频:[0,0,0],[1,1,1],[0,0,0],[-1-1,-1],[0,0,0],  [0,0,0],[1,1,1],[0,0,0] ……
* u$ q% e7 s5 R$ b低通(简单):[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] ……5 M, \; y, C' ]: C7 g1 f2 R7 B
整数倍降频:[0,0.33],[1],[0.33,-0.33],[-1],[-0.33,0],  [0],[0.66,0.66],[0] ……
& Z. j& O* ~, P1 |5 V输出:0,0.33,1,0.33,-0.33,-1,-0.33,0,  0,0.66,0.66,0 ……/ u3 L. X4 s* a+ x! k
# v4 G; U% S/ U: q
原始的第二三四取样点之间是条直线波形[1,0,-1],经非整数倍取样后输出波形变成了[1,0.33,-0.33,-1]仍是条直线,此时没有失真;
7 p+ P* ^2 m" R$ F+ o原始的第四五取样点之间是条直线波形[-1,0],经非整数倍取样后输出波形变成了[-1,-0.33,0]是条折线,即对原始波形间存在变形/失真
! |& \# I5 A. }/ ~) m* r. q3 [原始的第六七八取样点之间是条上三角波形[0,1,0],经非整数倍取样后输出波形变成了[0,0.66,0.66,0]是个被削波的梯形,即对原始波形间存在较大变形/失真6 }- M' s4 C9 |5 k+ \
看来这种非整数倍SRC算法的失真确实是存在的(演示图片描述是恰当的),而且可以看到是在整数倍降频(直接跳着取数)过程中产生了失真,在输出时的时间位移上也会产生失真,这些不是改进低通平滑算法能解决的,所以不能说是我演示时低通算法的问题哦!
: ]3 I/ [) J" k6 v" y% e
# R& E# J' Z# U! w  c) R换个角度来说吧,如果这种简单的非整数倍SRC算法不存在失真,那AC97的SRC问题也就不会出现了,很多声卡也不会搞双晶振了,Foobar里面也不会开发这么多重采样插件了……!; N! f5 u0 \- c) X
Foobar里的SSRC X重采样插件的保真度挺高,所需CPU运算也挺高的,所以它的算法原理应该相当复杂的,不然也不会达到这么高的转换音质了!
作者: Timme    时间: 2010-4-3 23:20
无语,低通这一步直接无视了么。。。
作者: bull    时间: 2010-4-3 23:36
无语,低通这一步直接无视了么。。。% d1 c& x+ C1 f' K( Q# _$ ]" {0 D
Timme 发表于 2010-4-3 23:20

, e2 p7 q; v2 B6 N% i哈哈哈,一句话直接击中要害
作者: Timme    时间: 2010-4-4 01:10
本帖最后由 Timme 于 2010-4-4 01:23 编辑
) H/ ^/ m0 s1 |) t' f7 `
5 B% u2 L8 C8 |5 T* D6 o在此给出一个例子,是用我楼上的算法把6khz采样率升为8khz采样率。  y1 D, X  S# e# E6 h! U

5 R& F! m* J7 n8 I  Y4 X# I! R对6khz的原始数据,我们取12个数,循环:“0 1w 2w 3w 2w 1w 1w 0 -2w -3w -3w -2w”3 Q9 T0 `0 p6 C. ~1 \
/ ]) m! z9 W0 T  I9 C6 \
【设计原始数据是个技术活,你不能产生边界频率分量(在此是3khz),此外不要有直流分量。】
0 a6 ?% |- X+ f* S* X. R* i$ w2 P0 q' L
简单扩展为24khz:“0 0 0 0 1w 1w 1w 1w 2w 2w 2w 2w 3w 3w 3w 3w 2w 2w 2w 2w 1w 1w 1w 1w 1w 1w 1w 1w 0 0 0 0 -2w -2w -2w -2w -3w -3w -3w -3w -3w -3w -3w -3w -2w -2w -2w -2w”/ S9 j# Q$ G, T3 U4 E; `2 w9 z
- r% D& W* X) M, A
低通后,取一个数跳两个数,得“1402 9151 15496 24899 28865 21793 12681 9932 9094 1594 -12561 -24898 -30031 -30037 -24944 -12433”
6 U# G& z/ m3 s8 p6 s/ v( w
( B/ \$ G& y7 \8 x5 ^4 J至此SRC计算完成。
. m0 j4 G: |7 G( ^
! `% {' e( K; P  B附SRC前后波形,自己看看有没有改变吧。另外附上每个过程产生的WAV文件供下载,可以拿去慢慢研究,看频谱,等等。。。
6 |' @- P6 A- @+ {+ Y- y8 c
8 d# a0 ^" |# A: ?8 M  ~6khz下的:+ A2 E3 b& }6 l5 ]$ R3 B# x( Q6 W4 _
1 b5 |& r( I; C
[attach]1251881[/attach]# v* u# q* [3 C& B2 w5 B: k6 t! w
3 C4 f4 b$ c- y3 p! k/ v' n  H. K
! w- g% ^6 Q  A, _" q, u
24khz 低通后的:
* V' b& y1 O+ p2 g4 e7 V8 F1 q% @# I6 z- M
[attach]1251884[/attach]
' C+ q' a% o" z0 l; _8khz下的:" C& @# y4 Y+ f7 y

/ P+ K+ a2 B2 w* N9 u" T& k[attach]1251882[/attach]
+ s' F/ C* l! O' L; l' e. @5 m# u% [  n
2 |/ U" [+ f/ p& t( r" s为什么24khz-lowpass.wav频谱那么好看,而8khz.wav多了一些很小的谐波,这是因为由于低通不理想,低通后的波形并不是严格的以48个采样点为循环的。而我只对其中48个采样点进行了采样并拿来当做降频的循环初始数,所以降频后的波形。。。“欠Dither”
3 L8 Y* Q. _' K9 L) b
+ D9 _! |( C8 p[attach]1251883[/attach]




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4