宽带信号处理实现DOA估计(ISM算法、MUSIC、MVDR、CBF)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%% 宽带信号DOA估计算法:ISM  算法%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%% Developed by HHU's Boya (河海大学_信息与通信工程_李蓉) %%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%% EMAIL:15006120517@163.com %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%% MUSIC \ CBF \ MVDR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc; 
clear all;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 参数定义 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M=12;                                     %阵元数 
N=200;                                    %快拍数 
X=2;                                      %信源数
ts=0.01;                                  %时域采样间隔   
fl=80;                                    %入射信号最低频率 
fh=120;                                   %入射信号最高频率 
fm=(fl+fh)/2;                             %入射信号中心频率 
c=1500;                                   %声速 
lambda=c/fm;                              %波长 
d=lambda/2;                               %阵元间距 
SNR=15;                                   %信噪比
ang2rad = pi/180;                         %角度转弧度系数
theta1=30*ang2rad;                        %入射信号波束角1 
theta2=-45*ang2rad;                       %入射信号波束角2 
n=ts:ts:N*ts;                             %采样时间矢量                           
theta=[theta1,theta2]; 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% produce signal %%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
s1=chirp(n,fl,1,fh);                     %生成线性调频信号1;
s1=awgn(s1,SNR,'measured');              %在信号中添加高斯噪声
s1_fft=fft(s1);                          %进行FFT变换;Y = fft(X,n) 返回 n 点 DFT。如果未指定任何值,则 Y 的大小与 X 相同
s2=chirp(n+0.100,fh,1,fl);               %生成线性调频信号2 
s2=awgn(s2,SNR,'measured');              %在信号中添加高斯噪声
s2_fft=fft(s2);                          %进行FFT变换 
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ISM算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%构造接收信号、协方差矩阵
sump_music=zeros(1,361);       %角度功率谱初始化
sump_mvdr= zeros(1,361);       %角度功率谱初始化
sump_cbf = zeros(1,361);       %角度功率谱初始化
for i=1:N                      %遍历各频点
    f=80+(i-1)*1.0;            %具体频点   +1
    s_music=[s1_fft(i) s2_fft(i)]';                %2个声源信号的频域快拍_MUSIC\后续考虑增加快拍数\目前是1%%
    s_mvdr=[s1_fft;s2_fft];                        %MVDR200个快拍一起
    s_cbf=[s1_fft;s2_fft];                         %CBF200个快拍一起
    %接收矢量阵
    a = exp(-1j*2*pi*f*d/c*(0:M-1)'*sin(theta));   %方向矢量矩阵M*2  M为阵元数 2为声源数目 
    %%协方差矩阵music
    Xmusic=a*s_music;          %接收信号快拍矩阵 Xn 12*1维   12*1 = 12*2 * 2*1
    R_music=Xmusic*Xmusic';    %快拍信号的协方差矩阵
    %%协方差矩阵mvdr
    Xmvdr=a*s_mvdr;            %接收信号快拍矩阵
    R_mvdr=Xmvdr*Xmvdr'/N;     %快拍信号的协方差矩阵
    %%协方差矩阵cbf
    Xcbf=a*s_cbf;              %接收信号快拍矩阵
    R_cbf=Xcbf*Xcbf'/N;        %快拍信号的协方差矩阵
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ISM_MUSIC 算法 %%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ISM_MVDR算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ISM_CBF算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%噪声子空间En
    [Ev,D] = eig(R_music);     % 特征值分解 D:特征值的对角矩阵 Ev:右特征列向量组成的矩阵
    EVA = diag(D)';            % 将特征值提取为1行 
    [EVA,I] = sort(EVA);       % 对特征值排序,从小到大。其中I为索引向量
    EV = fliplr(Ev(:,I));      % 按照索引I对顺序特征矢量排序得到Ev,再fliplr水平颠倒列向量得到特征值从大到小分布的特征列向量组成的矩阵EV
    En = EV(:,X+1:M);          % 取特征向量矩阵的第X+1到M列特征向量组成噪声子空间En
    
    % 遍历所有角度,计算空间谱
    for i = 1:361
        angle(i) = (i-181)/2;           % 映射到-90度到90度
        theta_m = angle(i)*ang2rad;
        a_theta = exp(-1j*2*pi*f/c*d*(0:M-1)'*sin(theta_m));    %导向矢量M*1
        p_music(i) = abs(1/(a_theta'*En*En'*a_theta));          %MUSIC算法功率谱
        p_mvdr(i)=1/abs(a_theta'*inv(R_mvdr)*a_theta);          %MVDR算法功率谱
        p_cbf(i)=abs(a_theta'*R_cbf*a_theta);                   %CBF算法功率谱
        
    end
    sump_music=sump_music+p_music;                              %累加各频点功率谱
    sump_mvdr=sump_mvdr+p_mvdr;                                 %累加各频点功率谱
    sump_cbf=sump_cbf+p_cbf;                                    %累加各频点功率谱
end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%% 归一化处理、作图 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%ISM_MUSIC
p_music_max = max(sump_music);
sump_music = 10*log10(sump_music/p_music_max); 

%%ISM_MVDR
p_mvdr_max = max(sump_mvdr);
sump_mvdr = 10*log10(sump_mvdr/p_mvdr_max); 

%%ISM_CBF
p_cbf_max=max(sump_cbf);
sump_cbf=10*log10(sump_cbf/p_cbf_max);

%%作图ISM_MUSIC \ MVDR \ CBF
%%ISM——MUSIC
figure(1);
subplot(3,1,1); 
plot(angle,sump_music,'b-');
title('ISM——MUSIC空间谱');
xlabel('入射角/度'); 
ylabel('空间谱/dB');
%%ISM——MVDR
subplot(3,1,2); 
plot(angle,sump_mvdr,'r-');
title('ISM——MVDR空间谱');
xlabel('入射角/度'); 
ylabel('空间谱/dB');
%%ISM——CBF
subplot(3,1,3); 
plot(angle,sump_cbf,'g-');
title('ISM——CBF空间谱');
xlabel('入射角/度'); 
ylabel('空间谱/dB');

%%ISM——MUSIC
figure(2);
plot(angle,sump_music,'b-');
title('ISM——MUSIC空间谱');
xlabel('入射角/度'); 
ylabel('空间谱/dB');

%%ISM——MVDR
figure(3);
plot(angle,sump_mvdr,'r-');
title('ISM——MVDR空间谱');
xlabel('入射角/度'); 
ylabel('空间谱/dB');

%%ISM——CBF
figure(4);
plot(angle,sump_cbf,'g-');
title('ISM——CBF空间谱');
xlabel('入射角/度'); 
ylabel('空间谱/dB');




1 常规波束形成算法(CBF)

功率谱:                             P_{CBF}(\theta)=a^{H}(\theta)Ra(\theta)_{_{}}

2 MVDR算法

功率谱:                             P_{MVDR}(\theta)=\frac{1}{​{a(\theta)}^H{R^{-1}}{a(\theta)}}

3 多重信号分类法(MUSIC)

功率谱:                            P_{MUSIC}(\theta)=\frac{1}{​{a(\theta)}^H{U_{N}}{​{U_{N}}^{H}}{a(\theta)}}

       由快拍信号 X_{n} 计算协方差矩阵 R ,其中 R=\frac{X_{n}*{X_{n}}^{'}}{N}N为快拍长度;对上述的空间谱公式遍历各个角度,计算对应角度的导向矢量a(\theta ),带入空间谱计算公式得到各个角度的功率值,遍历预想的全部角度以后就得到各种方法的空间谱啦;

       代码中使用了MUSIC算法,也使用了CBF和MVDR算法,效果并不是很完美;代码存在瑕疵,请多多包涵或自行修改,取代码请关注博主吧,唯一小要求;

注:其中  a(\theta ) 为导向矢量,R 为快拍信号的协方差矩阵,U_{N} 为协方差矩阵 R 特征值分解得到的噪声子空间矩阵;  

### 回答1: 宽带常规波束形成(Wideband Conventional Beamforming)是一种信号处理技术,用于合成多个传感器接收到的宽带信号以形成波束。在MATLAB实现宽带常规波束形成可以按照以下步骤进行: 1. 定义传感器阵列的几何结构和信号传播环境的特征,包括传感器位置、信号到达角度和波速等。 2. 定义波束形成的频率范围,通常为多个子带(subbands)。 3. 对每个子带进行窄带波束形成,一般使用传统波束形成算法,如广义旁瓣对消(Generalized Sidelobe Canceller)或最小方差无约束波束形成器(Minimum Variance Unconstrained Beamformer)。 4. 对每个子带的波束形成输出进行载波聚合(Carrier Aggregation)或其他合并处理,获得宽带波束形成输出。 5. 分析和评估宽带波束形成输出,并进行性能优化。 需要注意的是,在实际应用中,可能需要考虑多径效应、噪声和干扰等因素对波束形成性能的影响。因此,在MATLAB实现宽带常规波束形成时,还需要结合相应的信道模型和噪声模型进行仿真和验证,以获取更准确的结果。 总结来说,MATLAB提供了丰富的信号处理工具和库函数,可用于实现宽带常规波束形成。通过定义传感器阵列结构、信号特征和频率范围,并应用相应的波束形成算法和信道模型进行仿真和优化,可以实现高效的宽带波束形成系统。 ### 回答2: 宽带常规波束形成是一种利用宽带信号进行波束形成的技术,可用于无线通信、雷达和声纳等领域。下面就如何在Matlab实现宽带常规波束形成进行简要描述: 1. 定义波束形成所需的输入参数,包括信号频率、天线阵列的几何结构和波束形成的角度范围。 2. 生成输入信号,考虑到宽带波束形成,信号应该具有一定的频带宽度。可以通过调制一个带宽较大的载频信号来实现这一点。 3. 构建天线阵列,考虑到常规波束形成,通常使用均匀线阵,它由一组等间距放置的天线组成。根据输入参数设置天线数量和天线间距。 4. 计算波束形成权重。常规波束形成中使用波束形成权重来调整天线的幅度和相位,以实现目标方向上的较高增益。在Matlab中,可以使用阵列信号处理工具箱提供的函数来计算权重。 5. 进行波束形成。将生成的输入信号经过天线阵列和波束形成权重的处理,得到最终的波束形成输出。 6. 分析和可视化结果。可以使用Matlab中的绘图函数来绘制波束形成输出的幅度和相位图,以及波束形成的主瓣宽度和副瓣级别等性能指标。 需要注意的是,宽带常规波束形成是一个复杂的信号处理过程,涉及到信号调制、信号处理和阵列处理等多个方面。在实际应用中,还需考虑信噪比、多径效应等因素对波束形成性能的影响。以上仅为宽带常规波束形成在Matlab实现的一般步骤和思路,具体实现需要根据实际应用需求进行调整和优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值