11-2 Filter Design (���������������

¦b¤W¤@¸`¤¤¡A§Ú­Ì¤¶²Ð¤F´XºØ°ò¥»ªºÂoªi¾¹¡A¨Ã»¡©ú¨äÀ³¥Î¡C¥»¸`±N¤¶²Ð¦p¦ó¥H²³æªº MATLAB «ü¥O¨Ó³]­pÂoªi¾¹¡A¨ÃÅã¥Ü¨ä®ÄªG¡C

§Ú­Ì¥i¥H¨Ï¥Î butter «ü¥O¨Ó³]­p¤@­Ó Butterworth Âoªi¾¹¡A½d¨Ò¦p¤U¡G

Example 1: butter01.mfs=8000; % Sampling rate filterOrder=5; % Order of filter cutOffFreq=1000; % Cutoff frequency [b, a]=butter(filterOrder, cutOffFreq/(fs/2), 'low'); % === Plot frequency response [h, w]=freqz(b, a); plot(w/pi*fs/2, abs(h), '.-'); title('Magnitude frequency response'); grid on

¦b¤W­z½d¨Ò¤¤¡A§Ú­Ì¨Ï¥Î butter «ü¥O¨Ó³]­p¤@­Ó Butterworth §C³qÂoªi¾¹¡A¨ä®æ¦¡¦p¤U¡G
[b, a] = butter(order, Wn, function)
¹ï©ó¿é¤J°Ñ¼Æ¡A§Ú­Ì¥i¥H»¡©ú¦p¤U¡G ¤W­z½d¨Ò©Ò²£¥Íªº¥|­Ó¹Ï§Î¡A¨Æ¹ê¤W¬O¦P¤@­Ó¹Ï¡A¥u¬O¤À§O¦bx¶b©Îy¶b¨Ï¥Î¹ï¼Æ¨è«×¡A©Ò¥H³y¦¨¤£¦Pªº®ÄªG¡C³o¨Ç¹Ï³£ºÙ¬°Âoªi¾¹ªº¡uÀW²vÅTÀ³¡v¡]Frequency Response¡^¡AÅã¥Ü¤£¦PÀW²vªº°T¸¹¸g¹L¦¹Âoªi¾¹®É¡A©Ò­¼¤Wªº°I´î²v¡C¤W­z½d¨Ò¤¤¡A§Ú­Ì¬O­n³]­p¤@­ÓºI¤îÀW²v¬° 1000 Hz ªºÂoªi¾¹¡A¥ÑÀW²vÅTÀ³¥i¥H¬Ý¥X¡A³oªGµM¬O¤@­Ó§C³qÂoªi¾¹¡C

·íÂoªi¾¹ªº¶¥¼Æ¶V°ª®É¡A¡A¦]¬°Âoªi¾¹°Ñ¼Æ a ©M b ªºªø«×Åܪø¡AÂoªiªº®ÄªG¶V©úÅã¡A¦ý¬O­pºâ¶q¤]·|¸òµÛ´£°ª¡F¤Ï¤§¡A­Y¶¥¼Æ¶V§C¡AÂoªi¾¹°Ñ¼Æ a ©M b ªºªø«×Åܵu¡A­pºâ¶q­°§C¡A¦ý¬OÂoªiªº®ÄªG¤]·|ÅÜ®t¡A½Ð¨£¤U¦C½d¨Ò¡G

Example 2: butter02.mfs=8000; % Sampling rate cutOffFreq=1000; % Cutoff frequency allH=[]; for filterOrder=1:8; [b, a]=butter(filterOrder, cutOffFreq/(fs/2), 'low'); % === Plot frequency response [h, w]=freqz(b, a); allH=[allH, h]; end plot(w/pi*fs/2, abs(allH)); title('Frequency response of a low-pass utterworth filter'); legend('order=1', 'order=2', 'order=3', 'order=4', 'order=5', 'order=6', 'order=7', 'order=8');

¦b¤W­z½d¨Ò¤¤¡A¥i¥H«Ü©úÅã¦a¬Ý¥X¡A·í¶¥¼Æ¥Ñ 1 ºCºC¼W¤j¦¨ 8 ®É¡AÂoªi¾¹ªº®ÄªG¤]·|¶V¨Ó¶V©úÅã¡C

§Ú­Ì¥i¥H±N­µ°T³q¹LºI¤îÀW²v¬° 1000 Hz ªº§C³qÂoªi¾¹¡A¬Ý¬O§_¯à°÷§â¹LÂo°ª­µ¡A½d¨Ò¦p¤U¡G

Example 3: butter03.mcutOffFreq=1000; % Cutoff frequency filterOrder=5; % Order of filter au=myAudioRead('wubai_solicitude.wav'); [b, a]=butter(filterOrder, cutOffFreq/(au.fs/2), 'low'); au.signal=au.signal(60*au.fs:90*au.fs); % 30-second signal y=filter(b, a, au.signal); % ====== Plot the result time=(1:length(au.signal))/au.fs; subplot(2,1,1); plot(time, au.signal); subplot(2,1,2); plot(time, y); % ====== Save output files myAudioWrite(au, 'wubai_solicitude_orig.wav'); au.signal=y; myAudioWrite(au, sprintf('wubai_solicitude_%d.wav', cutOffFreq)); [Warning: Data clipped when writing file.] [> In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('audiowrite>clipInputData', 'E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m', 396)" style="font-weight:bold">audiowrite>clipInputData</a> (<a href="matlab: opentoline('E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m',396,0)">line 396</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('audiowrite', 'E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m', 176)" style="font-weight:bold">audiowrite</a> (<a href="matlab: opentoline('E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m',176,0)">line 176</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('myAudioWrite', 'd:\users\jang\matlab\toolbox\sap\myAudioWrite.m', 29)" style="font-weight:bold">myAudioWrite</a> (<a href="matlab: opentoline('d:\users\jang\matlab\toolbox\sap\myAudioWrite.m',29,0)">line 29</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('butter03', 'D:\users\jang\books\audioSignalProcessing\example\butter03.m', 16)" style="font-weight:bold">butter03</a> (<a href="matlab: opentoline('D:\users\jang\books\audioSignalProcessing\example\butter03.m',16,0)">line 16</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('goWriteOutputFile>dummyFunction', 'D:\users\jang\books\goWriteOutputFile.m', 85)" style="font-weight:bold">goWriteOutputFile>dummyFunction</a> (<a href="matlab: opentoline('D:\users\jang\books\goWriteOutputFile.m',85,0)">line 85</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('goWriteOutputFile', 'D:\users\jang\books\goWriteOutputFile.m', 55)" style="font-weight:bold">goWriteOutputFile</a> (<a href="matlab: opentoline('D:\users\jang\books\goWriteOutputFile.m',55,0)">line 55</a>)]

§Ú­Ì¥i¥HÅ¥¬Ý¬Ý­ì°T¸¹©MÂoªi¾¹¿é¥X°T¸¹ªº®t²§¡G ¥i¥H«Ü©úÅã¦aÅ¥¨ì¡A°ª­µ³¡¤À³£´X¥G³Q§R°£¤F¡C

¦pªG§Ú­Ì±NºI¤îÀW²v³]©w¦¨ 100 Hz¡A¦¹®ÉÂoªi¾¹ªº°T¸¹¡A´N´X¥G¥u¯àÅ¥¨ì§C­µ¹ªªºÁn­µ¡A½d¨Ò¦p¤U¡G

Example 4: butter04.mcutOffFreq=100; % Cutoff freq (ºI¤îÀW²v) filterOrder=5; % Order of filter (Âoªi¾¹ªº¶¥¼Æ) au=myAudioRead('wubai_solicitude.wav'); [b, a]=butter(filterOrder, cutOffFreq/(au.fs/2), 'low'); au.signal=au.signal(60*au.fs:90*au.fs); % 30 seconds of singing (30 ¬íºqÁn) y=filter(b, a, au.signal); % ====== Plotting (µe¹Ï) time=(1:length(au.signal))/au.fs; subplot(2,1,1); plot(time, au.signal); subplot(2,1,2); plot(time, y); % ====== Save wav files (¦sÀÉ) myAudioWrite(au, 'wubai_solicitude_orig.wav'); au.signal=y; myAudioWrite(au, sprintf('wubai_solicitude_%d.wav', cutOffFreq)); [Warning: Data clipped when writing file.] [> In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('audiowrite>clipInputData', 'E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m', 396)" style="font-weight:bold">audiowrite>clipInputData</a> (<a href="matlab: opentoline('E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m',396,0)">line 396</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('audiowrite', 'E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m', 176)" style="font-weight:bold">audiowrite</a> (<a href="matlab: opentoline('E:\MATLAB\R2015a\toolbox\matlab\audiovideo\audiowrite.m',176,0)">line 176</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('myAudioWrite', 'd:\users\jang\matlab\toolbox\sap\myAudioWrite.m', 29)" style="font-weight:bold">myAudioWrite</a> (<a href="matlab: opentoline('d:\users\jang\matlab\toolbox\sap\myAudioWrite.m',29,0)">line 29</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('butter04', 'D:\users\jang\books\audioSignalProcessing\example\butter04.m', 16)" style="font-weight:bold">butter04</a> (<a href="matlab: opentoline('D:\users\jang\books\audioSignalProcessing\example\butter04.m',16,0)">line 16</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('goWriteOutputFile>dummyFunction', 'D:\users\jang\books\goWriteOutputFile.m', 85)" style="font-weight:bold">goWriteOutputFile>dummyFunction</a> (<a href="matlab: opentoline('D:\users\jang\books\goWriteOutputFile.m',85,0)">line 85</a>) In <a href="matlab:matlab.internal.language.introspective.errorDocCallback('goWriteOutputFile', 'D:\users\jang\books\goWriteOutputFile.m', 55)" style="font-weight:bold">goWriteOutputFile</a> (<a href="matlab: opentoline('D:\users\jang\books\goWriteOutputFile.m',55,0)">line 55</a>)]

«Ü©úÅã¦a¡A¸g¹L¤FÂoªi¾¹ªº§@¥Î¡A¥u¯d¤U§C­µ¹ªªºÁn­µ¡A¦Ó¥B¥Ñ³o¨Ç³W«ß¥X²{ªº§C­µ¹ªÁn­µ¡A§Ú­Ì´N¥i¥H¶i¦æ¸`©ç°lÂÜ¡A§ä¥X³o¤@¬q­µ¼Öªº¸`©ç¡C¡]·íµM¡A³o¥u¬O¤@­Ó¶}©l¡A­Y­n¶i¦æ¸`©ç°lÂÜ¡AÁÙ¦³«Ü¦h²Ó¸`­n³B²z¡C¡^

¦pªG§AÁÙ¬OÅ¥¤£¥X¨Ó§C­µ¹ª¦b­ì¨Ó­µ¼Öªº¦ì¸m¡A¥i¥H¹Á¸Õ³v¦¸Å¥Å¥¤U¦CÀɮס]³Ì¦n¨Ï¥Î CoolEdit ¨ÓÅ¥¡A¥i¥H¦P¨BÅã¥Ü¼½©ñ¶i«×¡^¡A´NÀ³¸Ó¥i¥HºCºC§ì¨ì§C­µ¹ªªº¦ì¸m¡G


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