MATLAB語(yǔ)言簡(jiǎn)介
MATLAB是美國(guó)MathWorks公司開(kāi)發(fā)的大型數(shù)學(xué)計(jì)算應(yīng)用軟件系統(tǒng),它提供了強(qiáng)大的矩陣處理和繪圖功能,簡(jiǎn)單易用,可信度高,靈活性好,因而在世界范圍內(nèi)被科學(xué)工作者、工程師以及大學(xué)生和研究生廣泛使用,目前已經(jīng)成為國(guó)際市場(chǎng)上科學(xué)研究和工程應(yīng)用方面的主導(dǎo)軟件。掌握MATLAB并借助它解決理論與應(yīng)用問(wèn)題已經(jīng)成為每一個(gè)從事科學(xué)研究和工程技術(shù)人員應(yīng)該具備的技能。
MATLAB是Matrix Laboratory(矩陣實(shí)驗(yàn)室)的縮寫(xiě),是當(dāng)前最流行、功能強(qiáng)大的科技應(yīng)用軟件和編程語(yǔ)言之一。MATLAB語(yǔ)言有以下特點(diǎn):
1、功能強(qiáng)大:數(shù)值計(jì)算和符號(hào)計(jì)算,計(jì)算和編程可視化,數(shù)字和文字的統(tǒng)一處理,離線和在線計(jì)算;
2、界面友好,語(yǔ)言簡(jiǎn)明:以復(fù)數(shù)矩陣為計(jì)算單元,指令表達(dá)與數(shù)學(xué)表達(dá)式相近,是一種演算式語(yǔ)言;
3、開(kāi)放性強(qiáng):具有70余個(gè)功能強(qiáng)大的工具箱,覆蓋面極廣,可以完成數(shù)字圖像處理、系統(tǒng)仿真、系統(tǒng)辨識(shí)、模糊控制、神經(jīng)網(wǎng)絡(luò)建模、信號(hào)處理、魯棒控制、非線性控制、優(yōu)化理論、統(tǒng)計(jì)分析等。
MATLAB成為應(yīng)用學(xué)科計(jì)算機(jī)輔助分析、設(shè)計(jì)、仿真、教學(xué)必不可少的基礎(chǔ)軟件。工具箱函數(shù)為各個(gè)領(lǐng)域的研究和工程應(yīng)用提供了有力的手段。
MATLAB系統(tǒng)的基本函數(shù)庫(kù)具有初等函數(shù)、初等矩陣和矩陣變換、包括性代數(shù)方程組和矩陣特征值問(wèn)題等數(shù)值線性代數(shù)、多項(xiàng)式運(yùn)算和求根、數(shù)據(jù)析和傅立葉變換以及某些特殊的矩陣函數(shù)和數(shù)學(xué)函數(shù)等眾多內(nèi)容。
MATLAB還包括一系列被稱作工具箱(TOOLBOX)的專業(yè)求解工具。工具箱實(shí)際上是MATLAB針對(duì)不同學(xué)科、不同專業(yè)所開(kāi)發(fā)的專用函數(shù)庫(kù),用來(lái)求解各個(gè)領(lǐng)域的數(shù)值計(jì)算問(wèn)題,包括數(shù)據(jù)采集工具箱、信號(hào)處理工具箱、圖像處理工具箱、小波分析工具箱、控制工具箱等。隨著MATLAB的不斷升級(jí),所含工具箱的功能越來(lái)越豐富,規(guī)模越來(lái)越龐大,因此,應(yīng)用也越來(lái)越廣泛,成為各種專業(yè)科研人員和工程技術(shù)人員的得力工具。
一個(gè)圖形界面的完成,最終是通過(guò)圖形界面的各種控件對(duì)象的操作來(lái)完成,而這些操作必定是通過(guò)Matlab 中函數(shù)代碼的執(zhí)行來(lái)完成的。函數(shù)代碼的編制可以通過(guò)編寫(xiě)回調(diào)函數(shù)完成,而編寫(xiě)時(shí)當(dāng)所要求執(zhí)行的指令比較簡(jiǎn)單時(shí),可以把該控件的代碼直接寫(xiě)在“CallBack“屬性中;當(dāng)所要求執(zhí)行的指令比較長(zhǎng)時(shí)可以把函數(shù)代碼放在一個(gè)自定義的M 文件中,在“CallBack”中直接將其文件名寫(xiě)上,也可以在主控文件中直接編寫(xiě),當(dāng)操作該控件時(shí)系統(tǒng)會(huì)自動(dòng)執(zhí)行“CallBack”中所要求執(zhí)行的內(nèi)容。
在本設(shè)計(jì)中,采用的是在主控文件中直接編寫(xiě)的方法,在GUI 界面單擊當(dāng)前需要編寫(xiě)程序的控件,然后右擊將出現(xiàn)一個(gè)右鍵菜單,然后選擇Callback 選項(xiàng),即可直接進(jìn)入主控M 文件,并且系統(tǒng)會(huì)自動(dòng)生成語(yǔ)句。
目前的MATLAB已經(jīng)成為國(guó)際上最為流行的軟件之一,它除了傳統(tǒng)的交互式編程之外,還提供了豐富可靠的矩陣運(yùn)算、圖形繪制、數(shù)據(jù)處理、圖形處理,方便的windows編程等便利工具,出現(xiàn)了各種以MATLAB為基礎(chǔ)的實(shí)用工具箱,廣泛地應(yīng)用于自動(dòng)控制、圖像信號(hào)處理、生物醫(yī)學(xué)工程、語(yǔ)言處理、雷達(dá)工程、信號(hào)分析、振動(dòng)理論、時(shí)序分析于建模、優(yōu)化設(shè)計(jì)等領(lǐng)域。
算法實(shí)現(xiàn)設(shè)計(jì)
本課題的主要內(nèi)容是在MATLAB上實(shí)現(xiàn)自適應(yīng)濾波器的設(shè)計(jì)。課題的具體內(nèi)容
為利用GUI界面設(shè)計(jì)出濾波器的選擇界面、參數(shù)的輸入界面、結(jié)果分析圖等。其中濾波器的設(shè)計(jì)將會(huì)用兩種算法實(shí)現(xiàn)既LMS算法和RLS算法,算法實(shí)現(xiàn)的基本設(shè)計(jì)框圖如圖4所示。
GUI界面的設(shè)計(jì)
由于本論文要實(shí)現(xiàn)兩種不同的算法,通過(guò)GUI界面設(shè)計(jì)能給人一個(gè)比較好直觀的效果。同時(shí)兩種算法在參數(shù)取值方面會(huì)有不同之處,因此在軟件設(shè)計(jì)中,我通過(guò)文本編輯框控件來(lái)接收用戶輸入的濾波器設(shè)計(jì)指標(biāo)值,這讓我們能更方便的通過(guò)調(diào)整不同的參數(shù)值觀測(cè)實(shí)驗(yàn)結(jié)果,從而來(lái)保證濾波器的最佳狀態(tài)。此外,Matlab 通過(guò)創(chuàng)建應(yīng)用程序M 文件為GUI控制程序提供一個(gè)框架。所有代碼都包含在應(yīng)用程序M 文件中,即完成了圖形界面的設(shè)計(jì)后,應(yīng)用程序設(shè)計(jì)的主要工作是控件回調(diào)函數(shù)的設(shè)計(jì)。自適應(yīng)濾波算法的主界面如圖5。
LMS算法的實(shí)現(xiàn)
LMS算法實(shí)現(xiàn)流程圖如圖6。
在圖中,w(k)為濾波器濾波系數(shù)矢量估值,w(k+1)=w(k)-u,u是一個(gè)控制因子,用它來(lái)控制收斂速度與穩(wěn)定性,u太大不穩(wěn)定,u太小收斂速度很慢。通常0《u《1/max,max是R中的最大的特征值。(k)是誤差梯度,直接計(jì)算(k)=J(w)/w很復(fù)雜,一般直接用誤差的平方作為均方誤差E|e(k)2估計(jì)值(k)。因?yàn)镋{(k)}=k表明(k)是無(wú)偏估計(jì)。
直到計(jì)算到達(dá)到(e)k預(yù)期小的值為止,或(w)k達(dá)到穩(wěn)定為止。
根據(jù)u的取值不同LMS算法可分為以下三種類型:
方案1——基本的LMS算法的實(shí)現(xiàn)
原信號(hào)與噪聲信號(hào)相互獨(dú)立,我們采用高斯白噪聲作為噪聲信號(hào)代替,并且定義噪聲信號(hào)的功率為0.02,E((r(n))^2)=0.02,則v(n)=0.02*randn(1,1024)?;镜腖MS算法要求控制因子u(k)為常數(shù),所以在設(shè)計(jì)時(shí)我們得根據(jù)仿真結(jié)果來(lái)選擇合適的u(k),以達(dá)到濾波器的最優(yōu)濾波性能。為了完成輸出信號(hào)與標(biāo)準(zhǔn)信號(hào)的對(duì)比,還必須定義一個(gè)標(biāo)準(zhǔn)信號(hào),我們定義標(biāo)準(zhǔn)信號(hào)為正弦信號(hào),這樣方便我們更好的觀測(cè)仿真數(shù)據(jù)。此外,定義w(n)為濾波器濾波系數(shù)矢量估值。最后,到了濾波器設(shè)計(jì)的關(guān)鍵階段—算法的編程,我采用了for語(yǔ)句來(lái)實(shí)現(xiàn)算法的循環(huán),直到計(jì)算到e(n)預(yù)期小的值為止或w(n)達(dá)到穩(wěn)定為止。
算法編程如下:
for n=2:M
xn=sin(4*pi*n/100)+vn;
yn(n)=w1(n)*xn(n)+w2(n)*xn(n-1);
e(n)=xn(n)-yn(n);
w1(n+1)=w1(n)+2*u*e(n)*xn(n);
w2(n+1)=w2(n)+2*u*e(n)*xn(n-1);
end
仿真結(jié)果:
見(jiàn)圖7、圖8 分析可得:n=20
Elapsed time is 0.094000 seconds.
方案2——?dú)w一化LMS算法的實(shí)現(xiàn)
歸一化算法與基本的LMS算法在思路上沒(méi)有多大差別,就只是在對(duì)u(k)的選取方面有一定的差別,歸一化中定義a(0,2),p》0因此,在for語(yǔ)句中需要對(duì)u(k)的取值加額外的要求。為了方便起見(jiàn),我們暫且定義a=o,p=o
歸一化LMS算法編程為:
for n=2:M
xn=sin(4*pi*n/100)+vn;
yn(n)=w1(n)*xn(n)+w2(n)*xn(n-1);
e(n)=xn(n)-yn(n); u(n)=1/(xn*xn‘);
w1(n+1)=w1(n)+2*u(n)*e(n)*xn(n);
w2(n+1)=w2(n)+2*u(n)*e(n)*xn(n-1);
end
仿真結(jié)果:見(jiàn)圖9、圖10
分析可得:n=600
Elapsed time is 0.094000 seconds.
方案3——功率歸一化LMS算法的實(shí)現(xiàn)
功率歸一化,與歸一化算法一樣,也只是在對(duì)u(k)的取值方面有一定的差別。功率歸一化中定義u(k)=a/g2x(k),其中g(shù)2x表示x(k)的方差。由a/g2x(k)=dg2x(k-1)+e2(k)可知,d《(0,1),0《a《2/m,其中M為濾波器的階數(shù)。同時(shí)也為了方便起見(jiàn),我們暫且定義a=1/M,d=0.5。
功率歸一化LMS算法編程為:
for n=2:M
xn=sin(4*pi*n/100)+vn;
yn(n)=w1(n)*xn(n)+w2(n)*xn(n-1);
e(n)=xn(n)-yn(n);
gx2(n)=d*gx2(n-1)+e(n)*e(n); u(n)=a/(gx2(n));
w1(n+1)=w1(n)+2*u(n)*e(n)*xn(n);
w2(n+1)=w2(n)+2*u(n)*e(n)*xn(n-1);
end
仿真結(jié)果:見(jiàn)圖11、圖12
分析得:n=8
Elapsed time is 0.078000 seconds.
LMS(least mean square)自適應(yīng)濾波算法matlab實(shí)現(xiàn)
以下是matlab幫助文檔中l(wèi)ms示例程序,應(yīng)用在一個(gè)系統(tǒng)辨識(shí)的例子上。整個(gè)濾波的過(guò)程就兩行,用紅色標(biāo)識(shí)。
x = randn(1,500); % Input to the filter
b = fir1(31,0.5); % FIR system to be identified
n = 0.1*randn(1,500); % Observation noise signal
d = filter(b,1,x)+n; % Desired signal
mu = 0.008; % LMS step size.
ha = adaptfilt.lms(32,mu);
?。踶,e] = filter(ha,x,d);
subplot(2,1,1); plot(1:500,[d;y;e]);
title(‘System Identification of an FIR Filter’);
legend(‘Desired’,‘Output’,‘Error’);
xlabel(‘Time Index’); ylabel(‘Signal Value’);
subplot(2,1,2); stem([b.‘,ha.coefficients.’]);
legend(‘Actual’,‘Estimated’);
xlabel(‘Coefficient #’); ylabel(‘Coefficient Value’);
grid on;
這實(shí)在看不出什么名堂,就學(xué)習(xí)目的而言,遠(yuǎn)不如自己寫(xiě)一個(gè)出來(lái)。整個(gè)濾波的過(guò)程用紅色標(biāo)識(shí)。
%% System Identification (SID)
% This demonstration illustrates the application of LMS adaptive filters to
% system identification (SID)。
%
% Author(s): X. Gumdy
% Copyright 2008 The Funtech, Inc.
%% 信號(hào)產(chǎn)生
clear all;
N = 1000 ;
x = 10 * randn(N,1); % 輸入信號(hào)
b = fir1(31,0.5); % 待辨識(shí)系d
n = randn(N,1);
d = filter(b,1,x)+n; % 待辨識(shí)系統(tǒng)的加噪聲輸出
%% LMS 算法手工實(shí)現(xiàn)
sysorder = 32;
maxmu = 1 / (x‘*x / N * sysorder);% 通過(guò)估計(jì)tr(R)來(lái)計(jì)算mu的最大值
mu = maxmu / 10;
w = zeros ( sysorder , 1 ) ;
for n = sysorder : N
u = x(n-sysorder+1:n) ;
y(n)= w’ * u;
e(n) = d(n) - y(n) ;
w = w + mu * u * e(n) ;
end
y = y‘;
e = e’;
%% 畫(huà)圖
figure(1);
subplot(2,1,1); plot((1:N)‘,[d,y,e]);
title(’System Identification of an FIR Filter‘);
legend(’Desired‘,’Output‘,’Error‘);
xlabel(’Time Index‘); ylabel(’Signal Value‘);
subplot(2,1,2); stem([b’, w]);
legend(‘Actual’,‘Estimated’);
xlabel(‘Coefficient #’); ylabel(‘Coefficient Value’);
grid on;
評(píng)論