%Course_Project
clc;
clear all;
%% 定义信号、干扰、噪声
j = sqrt(-1);
M = 8; %接收天线个数
N = 10000; %信号与干扰长度
SNR = 2; %信号和干扰的信噪比
pow_n = 1; %噪声功率
pow_s = pow_n*10.^(0.1*SNR); %信号功率
S = 2*randi([0,1],4,N)-1; %信号与干扰 正负1的随机序列
S = sqrt(pow_s) * S; %入射信号
noise = sqrt(pow_n*0.5)*(randn(M,N)+j*randn(M,N)); %复加性噪声
%% 定义信号、干扰的入射角度,写出导向矢量
theta = [10 -10 40 60]*pi/180; %入射信号的角度 第一路为感兴趣信号 其他为干扰
d = [0:M-1]; %以第一根天线为基准,定义方向矢量
A = exp(-j*pi*d'*sin(theta)); %定义阵列响应向量矩阵
y = A*S+noise; %阵列天线的输入信号
C = exp(-j*pi*d*sin(theta(1))); %把导向矢量作为权向量的限制向量 C*W = 1
Wc = C'*inv(C*C')*[1]; %定义上半支输入信号的权向量
%% 构造阻塞矩阵B 分别使用1、3、7个正交向量来构造
B1 = [-1,exp(-j*pi*sin(theta(1))),0,0,0,0,0,0]; % 1个正交向量构造阻塞矩阵
B2 = [-1,exp(-j*pi*sin(theta(1))),0,0,0,0,0,0; % 3个正交向量构造阻塞矩阵
0,-1,exp(-j*pi*sin(theta(1))),0,0,0,0,0;
0,0,-1,exp(-j*pi*sin(theta(1))),0,0,0,0;];
B3 = [-1,exp(-j*pi*sin(theta(1))),0,0,0,0,0,0; % 7个正交向量构造阻塞矩阵
0,-1,exp(-j*pi*sin(theta(1))),0,0,0,0,0;
0,0,-1,exp(-j*pi*sin(theta(1))),0,0,0,0;
0,0,0,-1,exp(-j*pi*sin(theta(1))),0,0,0;
0,0,0,0,-1,exp(-j*pi*sin(theta(1))),0,0;
0,0,0,0,0,-1,exp(-j*pi*sin(theta(1))),0;
0,0,0,0,0,0,-1,exp(-j*pi*sin(theta(1)))];
for i=1:1:M-1
alpha(:,i) = [1;exp(j*(2*pi*1*(0.5*sin(theta(1))+i/M)));exp(j*(2*pi*2*(0.5*sin(theta(1))+i/M)));exp(j*(2*pi*3*(0.5*sin(theta(1))+i/M)));exp(j*(2*pi*4*(0.5*sin(theta(1))+i/M)));exp(j*(2*pi*5*(0.5*sin(theta(1))+i/M)));exp(j*(2*pi*6*(0.5*sin(theta(1))+i/M)));exp(j*(2*pi*7*(0.5*sin(theta(1))+i/M)))];
end
B0 = alpha'; % 另外一种方法构造的7*8阻塞矩阵
B = B0;
%% 直接求出最优解
R = conj(y)*y.'/N; %计算自相关矩阵
Wa = (B*R*B')\B*R*Wc; %计算Wa
W_GSC = Wc-B'*Wa; %计算GSC最优解
X = inv(C*inv(R)*C');
W_mvb = R\C'*X; %计算最小方差波束形成最优解
%% 自适应迭代
[L M] = size(B); %获取阻塞矩阵行数
c = 10000; %定义迭代次数
mu = 0.001; %定义迭代步长
Wa = zeros(L,c); %初始化迭代权值
for i=1:1:c
yb = B*y(:,i);
Za(i) = Wa(:,i).'*yb;
Zc(i) = Wc.'*y(:,i);
Z(i) = Zc(i)-Za(i);
Wa(:,i+1) = Wa(:,i)+mu*Z(i)*conj(yb);
end
W_GSC_LMS = Wc-B'*Wa(:,end); %求最终权值
%% 画出阵列方向图
sita = [-90:0.5:90]*pi/180; %定义方向图角度自变量
L_sita = length(sita); %定义方向图角度自变量
for i =1:L_sita %遍历-90到90度,求出阵列方向增益
V(:,i) = exp(-j*pi*d'*sin(sita(i)));
P(i) = V(:,i).'*W_GSC;
end
P0=abs(P);
P0=P0./max(P0); %归一化信号功率增益
PdB = 20*log10(P0);
figure(1);
polar(sita,PdB+60);
title('阵列方向图');grid on
hold on
degree=theta.'*ones(1,10);
polar(degree(1,:),linspace(0,60,10),'r--');
polar(degree(2,:),linspace(0,60,10),'r--');
polar(degree(3,:),linspace(0,60,10),'r--');
polar(degree(4,:),linspace(0,60,10),'r--');
%% 计算输出信干噪比
% 输入信干噪比 -5.6dB
signal_in = A(:,1)*S(1,:); %八根天线上信号的输入
signal_out = W_GSC.'*signal_in; %通过阵列后信号的输出
power_signal = mean(abs(signal_out).^2); %输出信号功率
all_out = W_GSC.'*y; %输出的全部信号
power_all = mean(abs(all_out).^2); %输出的全部信号功率
SINR = 10*log10(power_signal/(power_all-power_signal)) %计算输出信干噪比
评论15