7-9 How to Increase Pitch Resolution (�����ѪR�ת�����)

¥t¤@­Ó±`¸I¨ìªº°ÝÃD¡A¬O­µ°ª¸ÑªR«×ªº°ÝÃD¡C³q±`¤@­Ó¥b­µ®tµ¥©ó 100 ­Ó¡u­µ¤À¡v¡]Cents¡^¡A­Y§Æ±æ¯à±o¨ì°ª¸ÑªR«×ªº­µ°ª¡A§Ú­Ì¥i¥H½Õ°ª¨ú¼ËÀW²v¥H¼W¥[­µ°T¦b®É°ìªº¸ÑªR«×¡A³o¤]·|¨Ï ACF ©Î¬O AMDF ªº¸ÑªR«×ÀH¤§´£°ª¡A¶i¦Ó´£°ª­µ°ªªº¸ÑªR«×¡C±q¼Æ¾Ç¤W¨Ó»¡¡A­µ°ª©M°ò¥»ÀW²vªºÃö«Y¦p¤U¡G
p = 69 + 12*log2(f/440) = 69 + 12*log2((fs/L)/440)
¨ä¤¤ L ¬O°ò¥»¶g´ÁªºÂI¼Æ¡C·í L ¼W¥[ 1 ®É¡A­µ°ªªº§ïÅܶq¥i¥Hªí¥Ü¦p¤U¡G
DP = (69 + 12*log2((fs/L)/440)) - (69 + 12*log2((fs/(L+1))/440)) = -12*log2(1+1/L) = -12*log2(1+f/fs)
¨ä¤¤ f ¬O°ò¥»ÀW²v¡Afs «h¬O¨ú¼ËÀW²v¡ADP ÀH fs ªºÅܤƱ¡ªp¥i¥H¨Ï¥Î¤U¦C½d¨Ò¨Óµe¹Ï»¡©ú¡G

Example 1: pitchResolution01.m% Pitch resolution w.r.t. sampling rate and pitch fs=linspace(4000, 44100, 20)'; pitch=12*(1:7); deltaP=[]; for i=1:length(pitch) f=440*2^((pitch(i)-69)/12); deltaP=[deltaP, 12*log2(1+f./fs)]; end plot(fs, 100*deltaP, '.-'); axis tight; grid on xlabel('Samplinte rate (Hz)'); ylabel('\Delta p (Cents)'); title('\Delta p (Pitch resolution) w.r.t. fs and pitch'); % Display legends pitchStr={}; for i=1:length(pitch) pitchStr={pitchStr{:}, ['pitch = ', int2str(pitch(i))]}; end legend(pitchStr);

¥Ñ¥H¤W¹Ï§Î¥i¥H¬Ý¥X¡A·í¨ú¼ËÀW²v­°§C®É¡A©Î¬O°ò¥»ÀW²v´£°ª®É¡A­µ°ªªº»~®t´N·|Åܤj¡]¸ÑªR«×­°§C¡^¡C³q±`°ò¥»ÀW²v¤£¬O§Ú­Ì©Ò¯à±±¨îªº¡A¦]¦¹­Y­n´£°ª­µ°ªªº¸ÑªR«×¡A¹ï©ó¦b®É°ì¤Wªº­µ°ª°lÂܤèªk¡A§Ú­Ì¥i¥H´£°ª¨ú¼ËÀW²v¡A©Î¬O¹ïÁnªi¡]©Î¬O ACF¡BAMDF¡^¶i¦æ¦V¤W¨ú¼Ë¡]Up Sampling¡^©Î¬O¤º®t¡]Interpolation¡^¡C

¦P²z¡A­Y­n´£°ª­µ°ªªº¸ÑªR«×¡A¹ï©ó¦bÀW°ì¤Wªº­µ°ª°lÂܤèªk¡A§Ú­Ì¥i¥Hª½±µ¦b¨C­Ó­µ®Ø¶i¦æ¸É¹s¡]Zero Padding¡^¡A¦¹®É¦bÀWÃЪº¸ÑªR«×´N·|´£°ª¡A©Ò­pºâ¥X¨Óªº­µ°ª¸ÑªR«×¤]´N¸òµÛ´£°ª¤F¡C


Audio Signal Processing and Recognition (­µ°T³B²z»P¿ëÃÑ)