① matlab的演算法有哪些急用!謝謝啊!
MATLAB 產品族可以用來進行以下各種工作:
● 數值分析
● 數值和符號計算
● 工程與科學繪圖
● 控制系統的設計與模擬
● 數字圖像處理 技術
● 數字信號處理 技術
● 通訊系統設計與模擬
● 財務與金融工程
MATLAB 的應用范圍非常廣,包括信號和圖像處理、通訊、控制系統設計、測試和測量、財務建模和分析以及計算生物學等眾多應用領域。附加的工具箱(單獨提供的專用 MATLAB 函數集)擴展了 MATLAB 環境,以解決這些應用領域內特定類型的問題。
matlab特點
●此高級語言可用於技術計算
●此開發環境可對代碼、文件和數據進行管理
●互動式工具可以按迭代的方式探查、設計及求解問題
●數學函數可用於線性代數、統計、傅立葉分析、篩選、優化以及數值積分等
●二維和三維圖形函數可用於可視化數據
●各種工具可用於構建自定義的圖形用戶界面
●各種函數可將基於MATLAB的演算法與外部應用程序和語言(如 C、C++、Fortran、Java、COM 以及 Microsoft Excel)集成
MATLAB的優勢
(1)友好的工作平台和編程環境
MATLAB由一系列工具組成。這些工具方便用戶使用MATLAB的函數和文件,其中許多工具採用的是圖形用戶界面。包括MATLAB桌面和命令窗口、歷史命令窗口、編輯器和調試器、路徑搜索和用於用戶瀏覽幫助、工作空間、文件的瀏覽器。隨著MATLAB的商業化以及軟體本身的不斷升級,MATLAB的用戶界面也越來越精緻,更加接近Windows的標准界面,人機交互性更強,操作更簡單。而且新版本的MATLAB提供了完整的聯機查詢、幫助系統,極大的方便了用戶的使用。簡單的編程環境提供了比較完備的調試系統,程序不必經過編譯就可以直接運行,而且能夠及時地報告出現的錯誤及進行出錯原因分析。
(2)簡單易用的程序語言
Matlab一個高級的矩陣/陣列語言,它包含控制語句、函數、數據結構、輸入和輸出和面向對象編程特點。用戶可以在命令窗口中將輸入語句與執行命令同步,也可以先編寫好一個較大的復雜的應用程序(M文件)後再一起運行。新版本的MATLAB語言是基於最為流行的C++語言基礎上的,因此語法特徵與C++語言極為相似,而且更加簡單,更加符合科技人員對數學表達式的書寫格式。使之更利於非計算機專業的科技人員使用。而且這種語言可移植性好、可拓展性極強,這也是MATLAB能夠深入到科學研究及工程計算各個領域的重要原因。
(3)強大的科學計算機數據處理能力
MATLAB是一個包含大量計算演算法的集合。其擁有600多個工程中要用到的數學運算函數,可以方便的實現用戶所需的各種計算功能。函數中所使用的演算法都是科研和工程計算中的最新研究成果,而前經過了各種優化和容錯處理。在通常情況下,可以用它來代替底層編程語言,如C和C++ 。在計算要求相同的情況下,使用MATLAB的編程工作量會大大減少。MATLAB的這些函數集包括從最簡單最基本的函數到諸如矩陣,特徵向量、快速傅立葉變換的復雜函數。函數所能解決的問題其大致包括矩陣運算和線性方程組的求解、微分方程及偏微分方程的組的求解、符號運算、傅立葉變換和數據的統計分析、工程中的優化問題、稀疏矩陣運算、復數的各種運算、三角函數和其他初等數學運算、多維數組操作以及建模動態模擬等。
(4)出色的圖形處理功能
圖形處理功能 MATLAB自產生之日起就具有方便的數據可視化功能,以將向量和矩陣用圖形表現出來,並且可以對圖形進行標注和列印。高層次的作圖包括二維和三維的可視化、圖象處理、動畫和表達式作圖。可用於科學計算和工程繪圖。新版本的MATLAB對整個圖形處理功能作了很大的改進和完善,使它不僅在一般數據可視化軟體都具有的功能(例如二維曲線和三維曲面的繪制和處理等)方面更加完善,而且對於一些其他軟體所沒有的功能(例如圖形的光照處理、色度處理以及四維數據的表現等),MATLAB同樣表現了出色的處理能力。同時對一些特殊的可視化要求,例如圖形對話等,MATLAB也有相應的功能函數,保證了用戶不同層次的要求。另外新版本的MATLAB還著重在圖形用戶界面(GUI)的製作上作了很大的改善,對這方面有特殊要求的用戶也可以得到滿足。
(5)應用廣泛的模塊集合工具箱
MATLAB對許多專門的領域都開發了功能強大的模塊集和工具箱。一般來說,它們都是由特定領域的專家開發的,用戶可以直接使用工具箱學習、應用和評估不同的方法而不需要自己編寫代碼。目前,MATLAB已經把工具箱延伸到了科學研究和工程應用的諸多領域,諸如數據採集、資料庫介面、概率統計、樣條擬合、優化演算法、偏微分方程求解、神經網路、小波分析、信號處理、圖像處理、系統辨識、控制系統設計、LMI控制、魯棒控制、模型預測、模糊邏輯、金融分析、地圖工具、非線性控制設計、實時快速原型及半物理模擬、嵌入式系統開發、定點模擬、DSP與通訊、電力系統模擬等,都在工具箱(Toolbox)家族中有了自己的一席之地。
(6)實用的程序介面和發布平台
新版本的MATLAB可以利用MATLAB編譯器和C/C++數學庫和圖形庫,將自己的MATLAB程序自動轉換為獨立於MATLAB運行的C和C++代碼。允許用戶編寫可以和MATLAB進行交互的C或C++語言程序。另外,MATLAB網頁服務程序還容許在Web應用中使用自己的MATLAB數學和圖形程序。MATLAB的一個重要特色就是具有一套程序擴展系統和一組稱之為工具箱的特殊應用子程序。工具箱是MATLAB函數的子程序庫,每一個工具箱都是為某一類學科專業和應用而定製的,主要包括信號處理、控制系統、神經網路、模糊邏輯、小波分析和系統模擬等方面的應用。
(7)應用軟體開發(包括用戶界面)
在開發環境中,使用戶更方便地控制多個文件和圖形窗口;在編程方面支持了函數嵌套,有條件中斷等;在圖形化方面,有了更強大的圖形標注和處理功能,包括對性對起連接注釋等;在輸入輸出方面,可以直接向Excel和HDF5進行連接。
② 關於matlab的演算法
說清楚你的問題
③ MATLAB中的ga演算法,如何如何獲得每一步計算數值
試試以下方法(忘了在網上哪裡找的),先調出來圖像,
比如options.PlotFcns={ @gaplotbestf},然後取句柄,
h=findobj(gcf,'Type','Line'); %獲取當前圖窗的handle
x = get(h,'xdata'); % 坐標數據cell數據
y = get(h,'ydata');
x,y可能是cell型,想要的數據在x{ }, y{ }里取(比如,打開x,y,查看x,y與你迭代步數相同的維度的兩個cell元素就有最佳值和均值等數據)
④ 跪求!!SLM衍射特性研究及衍射光學元件設計實驗的思路以及思想。。 另外,跪求GS演算法的介紹!!
SLM研究DOE很簡單的一個做法就是將液晶屏視為可編程的蝕刻板,通過matlab計算各種灰度圖,比如模擬退火演算法\模擬軸椎透鏡等, 通過不同的灰度圖改變SLM液晶分子扭角獲得不同衍射效果, 利用CCD對出射光斑進行能量分析, 類似高斯光變為平頂光的效果,DOE能實現,SLM也同樣能實現,類似的實驗在瑞光空間光調制器的網站中有介紹
⑤ 有誰用matlab做過聚類演算法
分類演算法,參數分別為G(相似度矩陣),r(鄰居門限),lambda(類門限),返回值A,一個cell數組,每個元素是一個向量,包含了一個類的所有元素。
function A=BFSN_Algorithm(G,r,lambda)
%廣度優先搜索鄰居的聚類演算法實現
%G為相似度矩陣
%r和lambda為參數
%r為鄰居門限,相似度大於r即為鄰居
%lambda門限
%未分類元素對於某類的所有元素,如果是鄰居則令X(i)=1,否則為0.i為類元素的下標
%對X求和並除以類元素個數,若此值大於lambda門限,則該未分類元素屬於這類
%打開計時器
tic
%A為聚類結果
A={};
%k為分類計數
k=1;
%n為待分類元素個數
n=size(G,1);
%構建元素向量
member=1:n;
%只要member中還有未分類的元素就繼續循環
while numel(member)~=0
%從member中取出一個元素a
a=member(1);
%新建空類A並將a送入Ak類
Ak=a;
%從member中刪除a
member(1)=[];
%掃描member中的所有元素
%queue為廣度優先搜索使用的隊列
%將a送入queue中
queue=a;
%已訪問過的元素
visited=zeros(1,n);
%如果隊列非空說明還有沒有檢驗過的鄰居
while numel(queue)~=0
%一個元素出隊
p=queue(1);
queue(1)=[];
%掃描member中所有元素
for count=1:numel(member)
%用member(count)作為待分類的元素
%p是從queue中取出,找到p的所有未訪問鄰居
if G(p,member(count))>r && visited(member(count))==0
%滿足if的member(count)是未訪問過的鄰居
%放入queue中
queue=[queue member(count)];
%member(count)已經訪問過了
visited(member(count))=1;
if sum(G(member(count),Ak)>r)/numel(Ak)>=lambda
%滿足if的元素屬於Ak類,根據lambda門限判斷
Ak=[Ak member(count)];
member(count)=-1;
end
end
end
%刪除member中已分類的元素
member(member==-1)=[];
end
%將Ak保存在cell數組A的第k個位置
A{k}=Ak;
%k指向下一個分類
k=k+1;
end
%關閉計時器
toc
由於編寫的時候比較倉促,應該有很大的優化的餘地。
plotAllClass.m
繪制已分類數據的圖形,參數:data元素數據,A分類表,一個cell數組,調用BFSN_Algorithm得到。
function plotAllClass(data,A)
%data:m行2列的矩陣,m行代表m個元素,
%第一列為每個元素的橫坐標
%第二列為每個元素的縱坐標
%A為分類列表,
%有c個元素的cell數組
%每個元素是一個向量
%包含了一個分類的所有元素在data中的行
%n=類別數
n=numel(A);
%繪圖圖案列表
style=['r*';'g*';'b*';'c*';'m*';'y*';'k*';...
'r+';'g+';'b+';'c+';'m+';'y+';'k+';...
'rs';'gs';'bs';'cs';'ms';'ys';'ks';...
'rp';'gp';'bp';'cp';'mp';'yp';'kp';...
'rh';'gh';'bh';'ch';'mh';'yh';'kh';...
'rd';'gd';'bd';'cd';'md';'yd';'kd';...
'ro';'go';'bo';'co';'mo';'yo';'ko';...
'rx';'gx';'bx';'cx';'mx';'yx';'kx';...
'rv';'gv';'bv';'cv';'mv';'yv';'kv';...
'r<';'g<';'b<';'c<';'m<';'y<';'k<';...
'r>';'g>';'b>';'c>';'m>';'y>';'k>';...
'r^';'g^';'b^';'c^';'m^';'y^';'k^';...
'r.';'g.';'b.';'c.';'m.';'y.';'k.'];
figure;
hold on;
for count=1:n
plot(data(A{count},1),data(A{count},2),style(count,:));
end
hold off;
這個函數最多能夠繪制91個類別,如果有超過91個類,函數會出錯。
show.m
包含了一個完整的流程,包括數據生成,相似度矩陣生成,分類,類別繪制。
%show.m
data=rand(200,2);
figure;
plot(data(:,1),data(:,2),'+');
G=createSimiR(data);
A=BFSN_Algorithm(G,0.95,0.95);
plotAllClass(data,A);
⑥ matlab最優化演算法有哪些
matlab最優化程序包括
無約束一維極值問題 進退法 黃金分割法 斐波那契法 牛頓法基本牛頓法 全局牛頓法 割線法 拋物線法 三次插值法 可接受搜索法 Goidstein法 Wolfe.Powell法
單純形搜索法 Powell法 最速下降法 共軛梯度法 牛頓法 修正牛頓法 擬牛頓法 信賴域法 顯式最速下降法, Rosen梯度投影法 罰函數法 外點罰函數法
內點罰函數法 混合罰函數法 乘子法 G-N法 修正G-N法 L-M法 線性規劃 單純形法 修正單純形法 大M法 變數有界單純形法 整數規劃 割平面法 分支定界法 0-1規劃 二次規劃
拉格朗曰法 起作用集演算法 路徑跟蹤法 粒子群優化演算法 基本粒子群演算法 帶壓縮因子的粒子群演算法 權重改進的粒子群演算法 線性遞減權重法 自適應權重法 隨機權重法
變學習因子的粒子群演算法 同步變化的學習因子 非同步變化的學習因子 二階粒子群演算法 二階振盪粒子群演算法
⑦ 求:粒子群演算法 求解非線性方程組的Matlab代碼
%% 1 維函數,全局最小尋優
% finding the mimimum value.
clc % 清屏
clear all; % 刪除 workplace 變數
close all; % 關掉顯示圖形窗口
%% 目標方程
f = @(x) x.*sin(x) + x.*cos(2.*x);
%% 邊界
lb = 0; % 下限
ub = 10; % 上限
%% 找最小值 + 畫圖
x0 = [0 1 3 6 8 10];
hf = figure;
for i=1:6
% fmincon:求多個變數的目標函數的最小值
% fmincon(FUN,X,A,B,Aeq,Beq,LB,UB,NONLCON,options,varargin)
x(i) = fmincon(f,x0(i),[],[],[],[],lb,ub,[],...
optimset('Algorithm','SQP','Disp','none'));
subplot(2,3,i)
ezplot(f,[lb ub]);
hold on
plot(x0(i),f(x0(i)),'k+')
plot(x(i),f(x(i)),'ro')
hold off
title(['Starting at ',num2str(x0(i))]) %起始點
if i == 1 || i == 4
ylabel('x sin(x) + x cos(2 x)')
end
end
%% A common GOTCHA!
% 一維邊界最小值問題 --- Solver: |fminbnd|.
x2 = fminbnd(f,lb,ub)% 單變數邊界非線性函數最小求解
figure
ezplot(f,[lb ub]);
hold on
plot(x2,f(x2),'ro')
hold off
ylabel('x sin(x) + x cos(2 x)')
title({'Solution using fminbnd.','Required no starting point!'})
%% 使用 globalSearch or MultiStart 尋優
problem = createOptimProblem('fmincon','objective',f,'x0',x0(1),'lb',lb,...
'ub',ub,'options',optimset('Algorithm','SQP','Disp','none'));
gs = GlobalSearch; % 全局尋優
xgs = run(gs,problem); % 執行當前路徑 --> Use CD or ADDPATH to make the script
executable from the prompt
figure,
ezplot(f,[lb ub]);
hold on
plot(xgs,f(xgs),'ro')
hold off
ylabel('x sin(x) + x cos(2 x)')
title('Solution using globalSearch.')
⑧ 求解:怎樣使用MATLAB中的遺傳演算法計算器Optimization Tool中的GA——Genetic Algorithm,如圖,重謝
比如通過MATLAB遺傳演算法的思想求解f(x)=x*sin(10pi*x)+2.0,-1<=x<=2的最大值問題,結果精確到3位小數。
首先在matlab命令窗口輸入f=@(x)-(x*sin(10*pi*x)+2) 輸出結果為
>> f=@(x)-(x*sin(10*pi*x)+2)
f =
@(x)-(x*sin(10*pi*x)+2)
接著輸入gatool會打開遺傳演算法工具箱
顯示51代之後演算法終止,最小結果為-3.85027334719567,對應的x為1.851,由於自定義函數加了負號,所以原式的最大值為3.85027334719567,對應的x為1.851。
不過這是遺傳演算法得到的結果,每次運行的結果可能會有所不同,而且不一定是確切的最大值。
遺傳演算法適合應用在一些求最優解比較復雜的問題(常規的演算法運算時間過長,甚至無法解決)。
⑨ MATLAB 程序詳解(關於波束形成)
你這里有兩個程序,第二個程序與第一個實質上是一樣的,區別就是信號與導向矢量的寫法有點不同,這里我就不注釋了。還有,我下面附了一段我自己的寫的程序,裡面有SIM演算法。G-S正交化演算法等。是基於圓陣形式的,你的演算法是基於線陣的,他們程序上的區別在於導向矢量的不同。我的演算法是某項目中的,保證好使。建議學習波束形成技術,注意把程序分塊,例如分成,求導向矢量;最優權值;形成波束等等。
程序如下:
4單元均勻線陣自適應波束形成圖
clear
clc
format long;
v=1;
M=4;
N=1000;%%%%%%%快拍數
f0=21*10^3;%%%%%%%%%%%信號與干擾的頻率
f1=11*10^3;
f2=15*10^3;
omiga0=2*pi*f0;%%%%%%%信號與干擾的角頻率
omiga1=2*pi*f1;
omiga2=2*pi*f2;
sita0=08; %信號方向
sita1=04; %干擾方向1
sita2=21; %干擾方向2
for t=1:N %%%%%%%%%%%%信號
adt(t)=sin(omiga0*t/(N*f0));
a1t(t)=sin(omiga1*t/(N*f1));
a2t(t)=sin(omiga2*t/(N*f2));
end
for i=1:M %%%%%%%%%%%%信號的導向矢量:線陣的形式
ad(i,1)=exp(j*(i-1)*pi*sin(sita0));
a1(i,1)=exp(j*(i-1)*pi*sin(sita1));
a2(i,1)=exp(j*(i-1)*pi*sin(sita2));
end
R=zeros(M,M);
for t=1:N
x=adt(t)*ad+a1t(t)*a1+a2t(t)*a2; %陣列對信號的完整響應
R=R+x*x';%信號的協方差矩陣
end
R=R/N;%%%%%%%%%協方差矩陣,所有快拍數的平均
miu=1/(ad'*inv(R)*ad);%%%%%%這個貌似是LMS演算法的公式,具體我記不太清,這里是求最優權值,根據這個公式求出,然後加權
w=miu*inv(R)*ad;
%%%%%%形成波束%%%%%%%%%%%%%%%%%%%
for sita=0:pi/100:pi
for i=1:M
x_(i,1)=exp(j*(i-1)*pi*sin(sita));
end
y(1,v)=w'*x_;%%%%%%%對信號進行加權,消除干擾
v=v+1;
end
y_max=max(y(:));%%%%%%%%%%%%%%%歸一化
y_1=y/y_max;
y_db=20*log(y_1);
sita=0:pi/100:pi;
plot(sita,y)
Xlabel(『sitaa』)
Ylabel(『天線增益db』)
4單元均勻線陣自適應波束形成
目標
clear
clc
format long;
v=1;
M=4;陣元數
N=100;
f0=21*10^3;
omiga0=2*pi*f0;
sita0=06;%信號方向
for t=1:N
adt(t)=sin(omiga0*t/(N*f0));
end
for i=1:M
ad(i,1)=exp(j*(i-1)*pi*sin(sita0));
end
R=zeros(4,4);
r=zeros(4,1);
for t=1:N
x=adt(t)*ad;
R=R+x*x';
end
R=R/N;
miu=1/(ad'*inv(R)*ad);
w=miu*inv(R)*ad;
for sita=0:pi/100:pi/2
for i=1:M
a(i,1)=exp(j*(i-1)*pi*sin(sita));
end
y(1,v)=w'*a;
v=v+1;
end
sita=0:pi/100:pi/2;
plot(sita,y)
xlabel('sita')
ylabel('天線增益』)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%我的程序%%%%%%%%%%%%%%%
function jieshousignal
%期望信號數:1個
%干擾信號數:4個
%信噪比已知
%乾燥比已知
%方位角已知
clc;
clear all;
close all;
%//參數設置===========================================
1=0;
2=0;
3=0;
% for rrr=1:16000
signal_num=1; %signal number
noise_num=5; %interference number
R0=06; %圓的半徑
SP=2000; %Sample number
N=8; %陣元數
snr=-10; %Signal-to-Noise
sir1=10; %Signal-to-Interference one
sir2=10; %Signal-to-Interference two
sir3=10; %Signal-to-Interf
sir4=10;
sir5=10;
%//================noise Power-to-signal Power====================
factor_noise_1=10^(-sir1/10);
factor_noise_2=10^(-sir2/10);
factor_noise_3=10^(-sir3/10);
factor_noise_4=10^(-sir4/10);
factor_noise_5=10^(-sir5/10);
factor_noise_targe=10^(-snr/10);
% //======================== ===============
d1=85*pi/180;%%干擾1的方位角
d2=100*pi/180;%干擾2的方位角
d3=147*pi/180;%干擾3的方位角
d4=200*pi/180;%干擾4的方位角
d5=250*pi/180;%干擾5的方位角
d6=150*pi/180;%目標的方位角
e1=15*pi/180;%%干擾1的俯仰角
e2=25*pi/180;%干擾2的俯仰角
e3=85*pi/180;%干擾3的俯仰角
e4=50*pi/180;%干擾4的俯仰角
e5=70*pi/180;%干擾5的俯仰角
e6=85*pi/180;%目標的俯仰角
% //====================目標信號==========================
t=1:1:SP;
fc=2e7;
Ts=1/(3e10);
S0=5*cos(2*pi*fc*t*Ts);%目標信號
for kk=1:N
phi_n(kk)=2*pi*(kk-1)/N;
end
%//====================操縱矢量==========================================
A=[conj(exp(j*2*pi*R0*cos(d6-phi_n)*sin(e6)));conj(exp(j*2*pi*R0*cos(d1-phi_n)*sin(e1)));conj(exp(j*2*pi*R0*cos(d2-phi_n)*sin(e2)));conj(exp(j*2*pi*R0*cos(d3-phi_n)*sin(e3)));conj(exp(j*2*pi*R0*cos(d4-phi_n)*sin(e4)));conj(exp(j*2*pi*R0*cos(d5-phi_n)*sin(e5)))]';
A1=[conj(exp(j*2*pi*R0*cos(d1-phi_n)*sin(e1)));conj(exp(j*2*pi*R0*cos(d2-phi_n)*sin(e2)));conj(exp(j*2*pi*R0*cos(d3-phi_n)*sin(e3)));conj(exp(j*2*pi*R0*cos(d4-phi_n)*sin(e4)));conj(exp(j*2*pi*R0*cos(d5-phi_n)*sin(e5)))]';
% //==========================================================Power of the interference
% // depending on the signal power and SIR
Ps1=0;
Ps2=0;
Ps3=0;
Ps4=0;
Ps5=0;
S1=zeros(1,SP);
S2=zeros(1,SP);
S3=zeros(1,SP);
S4=zeros(1,SP);
S5=zeros(1,SP);
Ps0=S0*S0'/SP; % signal power
Ps1=Ps0*factor_noise_1;
Ps2=Ps0*factor_noise_2;
Ps3=Ps0*factor_noise_3;
Ps4=Ps0*factor_noise_4;
Ps5=Ps0*factor_noise_5;
% //==========================干擾信號的隨機包絡=========================
S1=normrnd(0,sqrt(Ps1/2),1,SP)+j*normrnd(0,sqrt(Ps1/2),1,SP);
S2=normrnd(0,sqrt(Ps2/2),1,SP)+j*normrnd(0,sqrt(Ps2/2),1,SP);
S3=normrnd(0,sqrt(Ps3/2),1,SP)+j*normrnd(0,sqrt(Ps3/2),1,SP);
S4=normrnd(0,sqrt(Ps4/2),1,SP)+j*normrnd(0,sqrt(Ps4/2),1,SP);
S5=normrnd(0,sqrt(Ps5/2),1,SP)+j*normrnd(0,sqrt(Ps5/2),1,SP);
%//
S=[S0;S1;S2;S3;S4;S5];
SS1=[S1;S2;S3;S4;S5];
X=A*S;%信號加干擾
XX2=A1*SS1; %接收到的干擾
Pw_noise=sqrt(Ps0*factor_noise_targe/2);
a1=randn(N,SP);
a2=randn(N,SP);
a1=a1/norm(a1);
a2=a2/norm(a2);
W=Pw_noise*(a1+sqrt(-1)*a2);
X=X+W;
% //--------------------------SMI演算法----------------------------------------
Rd=X*S0'/SP;
R=X*X'/(SP*1);
Wc_SMI=pinv(R)*Rd/(Rd'*pinv(R)*Rd);%權向量
Wc_SMI=Wc_SMI/norm(Wc_SMI);
Y_SMI=Wc_SMI'*X; %SMI演算法恢復出來的信號
%//-------------------------------------GS演算法------------------
m=1;
for i=1:400:2000
X2(:,m)=XX2(:,i);
m=m+1;
end
a=zeros(1,8);
phi_n=zeros(1,8);
phi=0:pi/180:2*pi;
theta=0:pi/180:pi/2;
for kk=1:8
a(kk)=1;
phi_n(kk)=2*pi*(kk-1)/8;
end
x1=zeros(1,8);
x2=zeros(1,8);
x3=zeros(1,8);
x4=zeros(1,8);
x5=zeros(1,8);
x1=X2(:,1)';
x2=X2(:,2)';
x3=X2(:,3)';
x4=X2(:,4)';
x5=X2(:,5)';
Z1=x1;
Z1_inner_proct=Z1*conj(Z1);
Z1_mode=sqrt(sum(Z1_inner_proct));
Y1=Z1/Z1_mode;
Inner_proct=sum(x2*conj(Y1));
Z2=x2-Inner_proct*Y1;
Z2_inner_proct=sum(Z2*conj(Z2));
Z2_mode=sqrt(Z2_inner_proct);
Y2=Z2/Z2_mode;
Inner_proct1=sum(x3*conj(Y1));
Inner_proct2=sum(x3*conj(Y2));
Z3=x3-Inner_proct1*Y1-Inner_proct2*Y2;
Z3_inner_proct=sum(Z3*conj(Z3));
Z3_mode=sqrt(Z3_inner_proct);
Y3=Z3/Z3_mode;
Inner_proct1_0=sum(x4*conj(Y1));
Inner_proct2_0=sum(x4*conj(Y2));
Inner_proct3_0=sum(x4*conj(Y3));
Z4=x4-Inner_proct1_0*Y1-Inner_proct2_0*Y2-Inner_proct3_0*Y3;
Z4_inner_proct=sum(Z4*conj(Z4));
Z4_mode=sqrt(Z4_inner_proct);
Y4=Z4/Z4_mode;
Inner_proct1_1=sum(x5*conj(Y1));
Inner_proct2_1=sum(x5*conj(Y2));
Inner_proct3_1=sum(x5*conj(Y3));
Inner_proct4_1=sum(x5*conj(Y4));
Z5=x5-Inner_proct1_1*Y1-Inner_proct2_1*Y2-Inner_proct3_1*Y3-Inner_proct4_1*Y4;
Z5_inner_proct=sum(Z5*conj(Z5));
Z5_mode=sqrt(Z5_inner_proct);
Y5=Z5/Z5_mode;
%Y1
%Y2
%Y3
%Y4
%Y5
w0=zeros(1,8);
w=zeros(1,8);
for mm=1:8;
w0(mm)=exp(-j*2*pi*R0*cos(d6-phi_n(mm))*sin(e6));
end
dd1=sum(w0*conj(Y1))*Y1;
dd2=sum(w0*conj(Y2))*Y2;
dd3=sum(w0*conj(Y3))*Y3;
dd4=sum(w0*conj(Y4))*Y4;
dd5=sum(w0*conj(Y5))*Y5;
w=w0-dd1-dd2-dd3-dd4-dd5;
Wc_GS=w;
Wc_GS=Wc_GS/(norm(Wc_GS));
Y_GS=Wc_GS*X; %GS演算法恢復出來的圖像
%//----------------------------------MMSE演算法-----------------------
Rd=X*S0'/SP;
R=X*X'/(SP*1);
Wc_MMSE=pinv(R)*Rd;
Wc_MMSE=Wc_MMSE/norm(Wc_MMSE);
Y_MMSE=Wc_MMSE'*X; %MMSE演算法恢復出來的信號
S0=S0/norm(S0);
Y_GS=Y_GS/norm(Y_GS);
Y_SMI=Y_SMI/norm(Y_SMI);
Y_MMSE=Y_MMSE/norm(Y_MMSE);
% figure(1)
% plot(real(S0));
% title('原始信號');
% xlabel('采樣快拍數');
% ylabel('信號幅度');
% figure(2)
% plot(real(Y_SMI));
% title('運用SMI演算法處理出的信號');
% xlabel('采樣快拍數');
% ylabel('信號幅度');
% figure(3)
% plot(real(Y_GS));
% title('運用G-S演算法處理出的信號');
% xlabel('采樣快拍數');
% ylabel('信號幅度');
% figure(4)
% plot(real(Y_MMSE));
% for i=1:SP
% ss(i)=abs(S0(i)-Y_SMI(i))^2;
% end
% q_1=mean(ss);
% for i=1:SP
% ss1(i)=abs(S0(i)-Y_GS(i))^2;
% end
% q_2=mean(ss1);
% for i=1:SP
% ss2(i)=abs(S0(i)-Y_MMSE(i))^2;
% end
% q_3=mean(ss2);
%
% 1=1+q_1;
% 2=2+q_2;
% 3=3+q_3;
% end
% 1/16000
% 2/16000
% 3/16000
phi=0:pi/180:2*pi;
theta=0:pi/180:pi/2;
%
% % //------------------------ 形成波束-----------------------------------------
F_mmse=zeros(91,361);
F_smi=zeros(91,361);
F_gs=zeros(91,361);
for mm=1:91
for nn=1:361
p1=sin(theta(mm));
p2=cos(phi(nn));
p3=sin(phi(nn));
q1=sin(e6);
q2=cos(d6);
q3=sin(d6);
for hh=1:8
w1=cos(phi_n(hh));
w2=sin(phi_n(hh));
zz1=q2*w1+q3*w2;
zz2=p2*w1+p3*w2;
zz=zz2*p1-zz1*q1;
F_mmse(mm,nn)= F_mmse(mm,nn)+conj(Wc_MMSE(hh))*(exp(j*2*pi*R0*(zz2*p1)));
F_smi(mm,nn)=F_smi(mm,nn)+conj(Wc_SMI(hh))*(exp(j*2*pi*R0*(zz2*p1)));
F_gs(mm,nn)=F_gs(mm,nn)+conj((Wc_GS(hh))')*(exp(j*2*pi*R0*(zz2*p1)));
end
end
end
F_MMSE=abs(F_mmse);
F_SMI=abs(F_smi);
F_GS=abs(F_gs);
figure(5)
mesh(20*log10(F_MMSE))
figure(6)
mesh(20*log10(F_SMI))
title('SMI演算法波束形成圖');
xlabel('方位角');
ylabel('俯仰角');
zlabel('幅度/dB');
figure(7)
mesh(20*log10(F_GS))
title('G-S演算法波束形成圖');
xlabel('方位角');
ylabel('俯仰角');
zlabel('幅度/dB');