免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

基于MATLAB與VC混合編程的數(shù)字均衡器設(shè)計

 yanjunfeng 2010-11-09
1.概述
隨著數(shù)字化技術(shù)的快速、深入發(fā)展,人們對數(shù)字化電子產(chǎn)品所產(chǎn)生的圖像、圖形以及聲音等質(zhì)量的要求越來越高。在實時數(shù)字處理過程中,與D/A和A/D轉(zhuǎn)換相關(guān)的模擬信號重構(gòu)過程是決定數(shù)字系統(tǒng)輸出質(zhì)量的關(guān)鍵[1]。在聲音的拾取過程及通過音響設(shè)備的傳送過程中,由于設(shè)備或器件的原因,其幅度對頻率的響應(yīng)往往不一致,這樣就達(dá)不到原來的聽覺效果,而均衡器就是一個改變放大器頻率響應(yīng)的設(shè)備。一個好的均衡器能起到以下幾個方面的作用:
(1) 能校正音頻設(shè)備所產(chǎn)生的頻率失真;
(2) 校正由于建筑學(xué)共振性的不均勻所帶來的傳輸增益的頻率失真;
(3) 調(diào)整某些易反饋的頻率成分,抑制聲反饋,提高會場增益;
(4) 在藝術(shù)創(chuàng)作中,利用它來刻畫演員和樂器的音色修改,提高藝術(shù)效果。
現(xiàn)有的許多播放器都具有均衡器的功能,如Winamp(如圖 1所示)等。
圖 1 Winamp的均衡器
MATLAB是一個數(shù)據(jù)分析和處理功能十分強(qiáng)大的工程實用軟件,他的濾波器設(shè)計工具箱為實現(xiàn)聲音信號的數(shù)字濾波提供了十分方便的函數(shù)和命令,但MATLAB的計算速度慢。Visual C++是Windows平臺下主要的應(yīng)用程序開發(fā)環(huán)境之一,它能方便實現(xiàn)軟件開發(fā),開發(fā)的系統(tǒng)具有執(zhí)行速度快等優(yōu)點,故MATLAB與VC的混合編程正好結(jié)合了MATLAB強(qiáng)大的工具箱與VC很快的執(zhí)行速度。本文將給出基于MATLAB與VC混合編程的數(shù)字均衡器的設(shè)計方法,功能包括:
(1).WAV聲音信號獲取,即從文件(*.wav,*.au等)讀取音頻信息;
(2).八段數(shù)字均衡器設(shè)定,具體按照表 1中的頻段,其中前兩個頻段合并在一起;
(3).濾波,包括生成低通、高通、帶通、帶阻的巴特沃斯、切比雪夫濾波器,并顯示濾波器的頻率特征曲線;
(4).保存,保存濾波后的音頻信息到文件;
(5).播放,播放濾后音頻信號并實時顯示波形及頻譜特性。
表 1頻率的音感特征
30~60Hz
 沉悶
 如沒有相當(dāng)大的響度,人耳很難感覺。
 
60~100Hz
 沉重
 80Hz附近能產(chǎn)生極強(qiáng)的“重感”效果,響度很高也不會給人舒服的感覺,可給人以強(qiáng)烈的刺激作用。
 
100~200Hz
 豐滿
 
 
200~500Hz
 力度
 易引起嗡嗡聲的煩悶心理。
 
500~1KHz
 明朗
 800Hz附近如提升10dB,會明顯產(chǎn)生一種嘈雜感,狹窄感。
 
1K~2KHz
 透亮
 2800Kz附近明亮感關(guān)系最大。
 
2K~4Kz
 尖銳
 6800Hz形成尖嘯,銳利的感覺。
 
4K~8Kz
 清脆
 3400Hz易引起聽覺疲勞。
 
8K~16Kz
 纖細(xì)
 >7.5KHz音感清徹纖細(xì)。
 
30~60Hz
 沉悶
 如沒有相當(dāng)大的響度,人耳很難感覺。
 
 
 

2.設(shè)計原理
2.1數(shù)字濾波器
2.1.1 數(shù)字濾波器的原理簡介
數(shù)字濾波器的功能是把輸入序列通過一定的運(yùn)算,變換成輸出序列。數(shù)字濾波器一般可用兩種方法實現(xiàn):一種是根據(jù)描述數(shù)字濾波器的數(shù)學(xué)模型或信號流程圖,用數(shù)字硬件構(gòu)成專用的數(shù)字信號處理機(jī),即硬件方式;另一種是編寫濾波器運(yùn)算程序,在計算機(jī)上運(yùn)行,即軟件方式。考慮到軟件的靈活性及易于實現(xiàn),本文采用軟件方式實現(xiàn)數(shù)字濾波器。
數(shù)字濾波器有無限沖激響應(yīng)(IIR)和有限沖激響應(yīng)(FIR)兩種。下面分別介紹:
(1) IIR濾波器
IIR濾波器的特點是:單位沖激響應(yīng)h(n)是無限長的;系統(tǒng)函數(shù)H(z)在有限長Z平面(0<|Z|<∞)有極點存在;結(jié)構(gòu)上存在輸出到輸入的反饋,也即結(jié)構(gòu)上是遞歸型的;因果穩(wěn)定的IIR濾波器其全部極點一定在單位圓內(nèi)。其系統(tǒng)函數(shù)為
                                                                     (1)
 
 
 
計算機(jī)上實現(xiàn)時則需要用到差分方程的形式,如下
                                                         (2)
 
IIR濾波器有四種基本的網(wǎng)絡(luò)結(jié)構(gòu)(具體參看文獻(xiàn)[3]),直接I型、直接II型、級聯(lián)型與并聯(lián)型。其中直接I型需要2N個延遲單元,而直接II型只需要N個延遲單元。因此,用軟件實現(xiàn)時,直接II型少占用存儲單元。級聯(lián)型則是將N階IIR系統(tǒng)函數(shù)分解成二階因式連乘積,并聯(lián)型則是將系統(tǒng)函數(shù)化成部分分式之和,則可得到IIR數(shù)字濾波器的并聯(lián)結(jié)構(gòu)。
(2) FIR濾波器
IIR濾波器的特點是:系統(tǒng)的單位沖激響應(yīng)h(n)是個有限長序列;系統(tǒng)函數(shù)|H(z)|在|z|>0處收斂,極點全部在z=0處(即FIR一定為穩(wěn)定系統(tǒng));結(jié)構(gòu)上主要是非遞歸結(jié)構(gòu),沒有輸出到輸入反饋。但有些結(jié)構(gòu)中(例如頻率抽樣結(jié)構(gòu))也包含有反饋的遞歸部分。其系統(tǒng)函數(shù)的一般形式為
                                                                                   (3)
 
對應(yīng)的差分方程為
                                                                             (4)
 
FIR系統(tǒng)的基本結(jié)構(gòu)有直接型、級聯(lián)型、快速卷積型、頻率取樣型等。
2.1.2 FIR與IIR濾波器的比較與選擇
IIR濾波器可以用比FIR濾波器少的階數(shù)來滿足相同的技術(shù)指標(biāo),這樣,IIR濾波器所用的存儲單元和所用的運(yùn)算次數(shù)都比FIR濾波器少。FIR濾波器可得到嚴(yán)格的相位,而IIR濾波器不能得到。事實上,IIR濾波器的選頻特性越好,它的相位的非線性就越嚴(yán)重。因此在需要嚴(yán)格線性相位的情況下應(yīng)該選擇FIR濾波器。IIR濾波器可利用模擬濾波器現(xiàn)成的設(shè)計公式、數(shù)據(jù)和表格,因而計算工作量較小,對計算工具要求不高。FIR濾波器沒有現(xiàn)在的設(shè)計公式,對計算工具要求較高,需要借助計算機(jī)來設(shè)計。另外,IIR濾波器主要是設(shè)計規(guī)格化的、頻率特性為分段常數(shù)的標(biāo)準(zhǔn)低通、高通、帶通、帶阻和全通濾波器,而FIR濾波器可設(shè)計出理想正交變換器、理想微分器、線性調(diào)頻器等各種網(wǎng)絡(luò),適應(yīng)性較廣。
總之,IIR和FIR這兩種濾波器各有特點,在實際應(yīng)用中空間選擇中哪種濾波器,就從多方面的因素來考慮。例如用于語音通信的濾波器,對相位要求不是主要的,因此選用IIR濾波器較為合適,可以充分發(fā)揮其經(jīng)濟(jì)和高效的特點。而圖像信號處理和數(shù)據(jù)傳輸?shù)纫圆ㄐ螖y帶信息的系統(tǒng),對相位的線性要求較高,因此采用FIR濾波器較好。
對于數(shù)字均衡器,一方面是用于處理語言信號,另一方面需要用到頻率特性分段的帶通濾波器,因此應(yīng)該IIR濾波器。下面介紹IIR濾波器的設(shè)計方法。
2.1.3 IIR數(shù)字濾波器的設(shè)計方法
實際中的數(shù)字濾波器都是用有限精度算法實現(xiàn)的線性非移變離散系統(tǒng),設(shè)計IIR數(shù)字濾波器的方法主要有兩種:一種是利用模擬濾波器的理論來設(shè)計,另一種是計算機(jī)輔助設(shè)計,即使用最優(yōu)化技術(shù)設(shè)計。利用模擬濾波器的設(shè)計理論來設(shè)計IIR濾波器,就是首先根據(jù)實際要求設(shè)計一個模擬濾波器,然后再將這個模擬濾波器轉(zhuǎn)換成數(shù)字濾波器。由于模擬網(wǎng)絡(luò)綜合理論已經(jīng)發(fā)展得很成熟,故許多常用的模擬濾波器不僅有了簡單而嚴(yán)格的設(shè)計分式,而且設(shè)計參數(shù)已經(jīng)表格化,所以設(shè)計起來很方便。因此本文采用第一種方法。
設(shè)計步驟大致分以下三步:
(1) 設(shè)計模擬濾波器。根據(jù)實際需要確定濾波器的參數(shù),利用的濾波器的設(shè)計公式設(shè)計出模擬濾波器并得到其傳遞函數(shù)H(s),常用的濾波器有巴特沃斯濾波器、橢圓濾波器和切比雪夫濾波器;
(2) 將模擬濾波器轉(zhuǎn)換成數(shù)字濾波器。利用沖激響應(yīng)不變法或雙線性變法將H(s)轉(zhuǎn)換成H(z),不同的設(shè)計方法對應(yīng)于不同的s平面到z平面的映射公式;
(3) 頻率變換。上述方法得到的是低通濾波器,為了得到高通、帶通、帶阻濾波器,還需要用利用變換公式作頻率變換。
以上各步驟都有成熟的理論與公式,具體可參看文獻(xiàn)[3]。
2.2均衡器的原理
2.2.1 均衡器總體設(shè)計
均衡器的基本功能是調(diào)節(jié)各頻段的信號強(qiáng)弱,為了滿足該功能,本文采用如下的方法:
Step1:設(shè)計出對應(yīng)八個頻段的八個帶通濾波器;
Step2:對原始信號分八路用八個帶通濾波器進(jìn)行濾波;
Step3:將八個濾波器的濾波結(jié)果加權(quán)求和,權(quán)值的設(shè)計與均衡器的調(diào)節(jié)要求一致。
這樣最終得到的結(jié)果便是所需要的均衡結(jié)果。其中第2步中各帶通濾波器的輸入信號均為原始信號,而不是“串聯(lián)”地濾波。設(shè)原始輸入信號為x(n),第i路的輸出信號為,第i路的權(quán)值為,均衡器的輸出信號為y(n),則有
                                                                                      (5)
                          (6)
式中,、為濾波器的參數(shù),可由2.1.3節(jié)的方法得到,N為濾波器的階數(shù)。
具體應(yīng)用中,式(6)有兩個問題,下節(jié)將介紹這兩個問題并給出解決方法。
2.2.2 濾波計算的兩個問題
(1) 數(shù)組越界問題
即當(dāng)n<N時,如5階濾波器處理第一個x時(n=1,N=5),則式(6)中的與會出現(xiàn)數(shù)組下標(biāo)小于0。
對于聲音信號,人的聽覺不會感覺出很短時間的異常。因此,可以簡單地將數(shù)組越界的情況用0代替,即n<N時,規(guī)定。這樣只有前N個數(shù)字信號不準(zhǔn)確,從而前N/Fs秒聲音信號不準(zhǔn)確,N一般不超過10,而Fs一般為44100,從而N/Fs很小,人的聽覺根本不會感覺到。
(2) 溢出問題
定點加法運(yùn)算有可能發(fā)生溢出。但是,在采用補(bǔ)碼進(jìn)行運(yùn)算時,即使中間計算結(jié)果發(fā)生了溢出,但只要最終累加值的絕對值小于1,就能保證最后得到的總和是正確數(shù)值。因此,為防止數(shù)字濾波器定點運(yùn)算產(chǎn)生溢出, y(n)絕對值小于1就夠了。
一種解決方式是針對輸入x。對于IIR濾波器,有
                                                 (7)
由不溢出的條件得
                                                                                        (8)
 
   
 
 
 
即,當(dāng)(8)式不滿足時,需要對輸入信號x(n)乘以一個小于1的比例因子,使得(8)式恰好滿足。比例因子的計算式易由(8)式推出。
為簡單起見,本文采用針對輸出的解決方式,即如果y(n)絕對值超過1,則對其賦值為1或,符號選擇取決于原值的符號。
2.3 軟件設(shè)計
2.3.1 數(shù)據(jù)流圖
數(shù)據(jù)流圖(DFD)是一種圖形化技術(shù),它描繪信息流和數(shù)據(jù)從輸入移動到輸出的過程中所經(jīng)受的變換。在數(shù)據(jù)流圖中沒有任何具體的物理元素,它只是描繪信息在軟件中流動和被處理的情況。設(shè)計數(shù)據(jù)流圖時只需考慮系統(tǒng)必須完成的基本邏輯功能,而不用考慮具體實現(xiàn),因而它是進(jìn)行軟件設(shè)計很好的出發(fā)點。
面向數(shù)據(jù)流的設(shè)計方法的目標(biāo)是給出設(shè)計軟件結(jié)構(gòu)的一個系統(tǒng)化的途徑。結(jié)合上一節(jié)的內(nèi)容,可以得出軟件的數(shù)據(jù)流圖如圖 2所示。
 
圖 2 均衡器的數(shù)據(jù)流圖
2.3.2 模塊劃分
模塊化就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶需求。根據(jù)人類解決一般問題的經(jīng)驗,如果一個問題由兩個問題組合而成,那么它的復(fù)雜程度大于分別考慮每個問題時的復(fù)雜程度之和,也就是說把復(fù)雜的問題分解成許多容易解決的小問題,原來的問題也就容易解決了。這就是模塊化的根據(jù)。
在模塊劃分時應(yīng)遵循如下規(guī)則[4]:改進(jìn)軟件結(jié)構(gòu)提高模塊獨立性;模塊規(guī)模應(yīng)該適中;深度、寬度、扇出和扇入都應(yīng)適當(dāng);模塊的作用域應(yīng)該在控制域之內(nèi);力爭降低模塊接口的復(fù)雜程度;設(shè)計單入口單出口的模塊;模塊功能應(yīng)該可以預(yù)測。
本著上述的啟發(fā)式規(guī)則,對軟件進(jìn)行如圖 3所示的模塊劃分。
 
圖 3數(shù)字均衡器的模塊劃分
 

3.軟件實現(xiàn)
3.1界面設(shè)計
MATLAB是Mathworks公司推出的數(shù)學(xué)軟件,它將數(shù)值分析、矩陣計算、信號處理和圖形顯示結(jié)合在一起,為眾多學(xué)科領(lǐng)域提供了一種簡潔、高效的編程工具。它提供的GUIDE工具為可視化編程工具,使得軟件的界面設(shè)計像VB一樣方便。故本文采用MATLAB作為主要編程語言實現(xiàn)數(shù)字均衡器。
為了實現(xiàn)預(yù)期的功能,設(shè)計如圖 4所示的界面。
 
圖 4 頻譜分析儀的界面設(shè)計
左邊最上面的部分為標(biāo)題區(qū),用于顯示軟件標(biāo)題等信息,不具人機(jī)交互功能。
再往下是信號輸入/輸出區(qū),包含3種輸入方式。界面應(yīng)該具有:只有當(dāng)每個單選框被選中時才允許使用對應(yīng)的輸入框、按鈕等。支持WAV和AU兩種格式的音頻文件。“原聲播放”用于播放輸入的原信頻信號,區(qū)別于濾波后的信號,用于對比濾波前后的信號。
再往下是均衡器區(qū)。八個滾動條對應(yīng)八個帶通濾波器的權(quán)值,在中間時為1,最下為0,最上為10。“類型”單選框用于選擇巴特沃斯、切比雪夫等各種類型IIR濾波器。“重置”用于將各輸入恢復(fù)默認(rèn)。
“濾波”后才能“播放”,這是考慮到MATLAB對多線程機(jī)制支持得不好,不宜使用一邊濾波一邊播放的方法。由于濾波時間較長,故添加了進(jìn)度顯示的功能。條形圖是許多音頻軟件使用的頻譜輸出方式。
右邊的上面是濾波器,可以指定各種類型與參數(shù)。“生成濾波器”可以產(chǎn)生一個符合條件的濾波器,并在下面的圖中顯示濾波器的頻率特征曲線。“濾波”用于對輸入的音頻信號用生成的濾波器濾波。
再往下則分別是時域波形與頻譜分析的圖形顯示,均為實時顯示。
在界面設(shè)計時為避免錯誤的操作,在某些按鈕不能使用時必須將其設(shè)置為不可用,而它們能夠使用時立即設(shè)置為可用。例如,沒有打開音頻文件時“濾波”按鈕不可用,打開后“濾波”按鈕可用;點擊“濾波”前,“播放”不可用,點擊“濾波”并完成濾波后,“播放”則變?yōu)榭捎谩?/div>
3.2均衡器模塊的實現(xiàn)
均衡器模塊功能是生成帶通濾波器并對原信號濾波。為了便于程序的擴(kuò)充與修改,將表 1中的頻段數(shù)據(jù)獨立出來,如下
handles.fband=[20 100 200 500 1000 2000 4000 8000 16000];
均衡器的功能主要在“濾波”按鈕的回調(diào)函數(shù)中實現(xiàn),下面具體介紹
開始需要得到濾波器的參數(shù):頻帶與階數(shù),如下
order=str2double(get(handles.order,'String'));
num=8;%8 filters totally
fband=handles.fband;        
接著就是產(chǎn)生濾波器并濾波了,每次濾波后產(chǎn)生的yi(n)如果都存到一個變量中,則需要8個這樣的變量,對于輸入信號量很大時將需要大量的內(nèi)存空間,為此,本文采用累加的方式,這樣只用一個變量去存儲濾波結(jié)果。
nn=length(handles.y);
handles.yy=zeros(size(handles.y));
for i=1:num
    if get(handles.butterworth,'Value')==1
        [b a]=butter(order,2*fband(i:i+1)/handles.Fs);
    elseif get(handles.cheby1,'Value')==1
        [b a]=cheby1(order,0.5,2*fband(i:i+1)/handles.Fs);
    elseif get(handles.cheby2,'Value')==1
        [b a]=cheby2(order,20,2*fband(i:i+1)/handles.Fs);
    elseif get(handles.ellip,'Value')==1
        [b a]=ellip(order,0.5,20,2*fband(i:i+1)/handles.Fs);
    else
        errordlg('No filter type chosen or filter type error!');
    end
    eval(sprintf('k=get(handles.band%d,''Value'');',i));
    y=(9^k-1)/8*qfilter(b,a,handles.y);
    handles.yy=handles.yy+y;
end
guidata(hObject,handles);
在程序中有一句y=(9^k-1)/8*qfilter(b,a,handles.y),作用是加權(quán)以便下一句的求和,其中k是從滾動條中得到的參數(shù),從0到2,但需要的權(quán)值是從0到10,令w為需要的權(quán),即,由于實際需要w為指數(shù)變化,故設(shè)
                                                                                            (9)
代入w=0, k=0; w=1, k=1; w=10, k=2解得a=1/8,b=9,,從而有上述代碼。
3.3 混合編程實現(xiàn)filter函數(shù)
MATLAB中提供的filter函數(shù),但有兩個問題,一個是運(yùn)行速度較慢,另一個是不能解決2.2.2節(jié)的溢出問題。由于filter函數(shù)的執(zhí)行速度是整個軟件速度的瓶頸,故需要提高其速度。故這里采用VC實現(xiàn)filter函數(shù),具體通過MATLAB與VC的混合編程來實現(xiàn)。這樣能夠較好解決那兩個問題。
具體步驟為:
(1) MATLAB中運(yùn)行mex –setup將VC選作編譯器
(2) 在VC中新建一個DLL工程,添加如下代碼
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{   double *a,*b,*x,*y;
    int M,n,i,j;
    b=mxGetPr(prhs[0]); //獲得指向矩陣的指針
    a=mxGetPr(prhs[1]);
    x=mxGetPr(prhs[2]);
    M=mxGetM(prhs[2]); //獲得矩陣的行數(shù)
    plhs[0]=mxCreateDoubleMatrix(M,1,mxREAL);
    y=mxGetPr(plhs[0]);
    n=mxGetN(prhs[0]);
    for(i=0;i<n;i++)
    {   y[i]=b[0]*x[i];
        for(j=1;j<i+1;j++)
            y[i]+=b[j]*x[i-j]-a[j]*y[i-j];
        if(y[i]>1)y[i]=1;else if(y[i]<-1)y[i]=-1;
    }
    for(;i<M;i++)
    {   y[i]=b[0]*x[i];
        for(j=1;j<n;j++)
            y[i]+=b[j]*x[i-j]-a[j]*y[i-j];
        if(y[i]>1)y[i]=1;else if(y[i]<-1)y[i]=-1;
    }
}
(3) 保存為qfilter.cpp,放在MATLAB工作目錄,在MATLAB中運(yùn)行mex qfilter.cpp生成qfilter.dll。
這樣,只需調(diào)用qfilter函數(shù)即能實現(xiàn)濾波。
3.4 實時顯示的實現(xiàn)
軟件的功能要求實時顯示波形與頻譜分析結(jié)果,這里采用分批處理的方法。即先取一批信號,將其播放出來,同時進(jìn)行FFT,并繪出時域波形與頻譜分析結(jié)果,然后取下一批信號……由于各批信號間的時間間隔很小,從而感覺像連續(xù)播放,而時域波形與頻譜則是實時地變化。
該功能主要在“播放”按鈕的回調(diào)函數(shù)中實現(xiàn)
N=length(handles.yy);
n=4096;
step=n/handles.Fs;
from=1;
to=n;
ymax=max(handles.y);
ymin=min(handles.y);
f=linspace(0,handles.Fs/2,n/2);
fband=handles.fband;
num=length(fband)-1;
tic
while to<=N;
    y=handles.yy(from:to,:);
    pause(step-toc*0.99);
    wavplay(y,handles.Fs,'async');
    tic
    P=fft(y,n);
    Pyy =2*abs(P)/n;
    loglog(handles.axes1,f,Pyy(1:n/2));
    axis(handles.axes1,[fband(1) fband(num+1) 1e-3 ymax]);
    plot(handles.axes2,y);
    ylim(handles.axes2,[ymin ymax]);
    from=from+n;
    to=to+n;
end
采用異步播放方式可以使得播放不占用主線程,從而使得播放效果不會很卡。為了使得播放流暢,需要與pause的使用結(jié)合,具體方法為用tic和toc計算出其它代碼運(yùn)行時間,然后用播放時間減去其它代碼運(yùn)行時間,從而得到需要暫停運(yùn)行的時間。
4.運(yùn)行實例與誤差分析
4.1運(yùn)行實例
圖 5是程序的運(yùn)行的一個實例,可以看到,基本上可以實現(xiàn)各個頻段的均衡與調(diào)結(jié)。但是并不能完全濾掉某個頻段的信號。
另外,為了比較MATLAB的filter函數(shù)與VC寫的qfilter的執(zhí)行速度,軟件中提供了選擇濾波程序的界面,圖 5中的運(yùn)行結(jié)果為qfilter的運(yùn)行時間,為0.031秒,而相同情況下,MATLAB的filter的運(yùn)行時間為0.157秒,如圖 6所示。從而混合編程的方式大大提高了軟件的運(yùn)行效率。所以在均衡器功能上直接采用qfilter。
4.2 誤差分析
理想的濾波器是不存在的,實際中只能盡量地接近理想濾波器,所以只能盡量地去接近理想的濾波器。對于IIR數(shù)字濾波器,階數(shù)越高,則濾波器的精度越高,即越接近于理想的情況,但計算機(jī)運(yùn)行速度就越慢了,所以實際中應(yīng)該權(quán)衡運(yùn)行速度與濾波器的精度。另外,計算機(jī)本身也有誤差(如截斷誤差),但相對于濾波器的設(shè)計誤差,計算機(jī)的計算誤差可以怱略不計。故提高精度關(guān)鍵在于提高濾波器的設(shè)計精度。
 
圖 5 運(yùn)行結(jié)果實例
 
 
圖 6 MATLAB的filter的運(yùn)行時間
另外,每個帶通濾波器之間的過渡也有設(shè)計誤差,理論上帶通濾波器間的過濾應(yīng)該滿足各濾波器的頻率響應(yīng)曲線疊加起來為一條值為1的水平線,但實際中只能盡量去接近理論的情況。
5.總結(jié)與展望
5.1總結(jié)
本文首先對數(shù)字濾波器的原理進(jìn)行了分析,并選擇了一種實現(xiàn)數(shù)字均衡器的方案,在軟件的設(shè)計上采用軟件工程的理論,使用面向數(shù)據(jù)流的設(shè)計方法進(jìn)行軟件設(shè)計,并且采用了模塊劃分的方法。在實現(xiàn)的時候采用MATLAB與VC混合編程的方式,這樣不僅利用了MATLAB的強(qiáng)大工具箱,而且使得開發(fā)的軟件有著運(yùn)行速度快的特點。界面上采用MATLAB提供的GUIDE工具進(jìn)行設(shè)計,使得軟件開發(fā)效率較高。對于均衡器所要求的功能,已經(jīng)全部實現(xiàn),但限于篇幅,本文只給出了部分功能的實現(xiàn)方法。最后給出了軟件的運(yùn)行結(jié)果,并對軟件進(jìn)行了誤差分析。
5.2展望
該軟件在播放前需要點濾波按鈕,這使得操作變得麻煩,所以可以將濾波功能加到播放中,這就意味著需要加快程序的運(yùn)行速度可者采用多線程機(jī)制。帶通濾波器頻率交界處的誤差可以通過優(yōu)化設(shè)計的方法來將其減小,即各帶通濾波器不完全以給定的頻帶為自己的生成參數(shù),而是以附近的某個頻率值作為其生成參數(shù),這樣就需要用到優(yōu)化的理論。其實可以將軟件的主體用VC進(jìn)行開發(fā),部分難以實現(xiàn)但運(yùn)行次數(shù)不多的函數(shù)則借用MATLAB,實現(xiàn)以VC的主體的混合編程,這樣可以實現(xiàn)多線程,并且運(yùn)行速度會進(jìn)一步加快,但這種開發(fā)方式的開發(fā)時間相對較長。
 
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/sbtdkj1017/archive/2008/03/21/2202003.aspx

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多