function [Sqq_diag , W , Nsrc] = OrthogonalBeamforming(Spp , G_map_mic , mic_weight) %Estimates sources through orthogonal beamfoming method (Sarradj 2010) % %Spp : (M x M ) matrix of mic pressures cross spectra %G_map_mic (M x Nmap): Transfert matrix from map points to mic position %mic_weight : (1 x M) weight vector for microphones % %Returns : %Sqq_diag : (Nmap x Nsrc) diagonal terms of Sqq_est, ie source auto spectra, for each source given by the highest eigenvalues of Spp %W : (Nmap x M ) steering vectors % [M Nmap ]=size(G_map_mic); if (~exist('mic_weight')) mic_weight=ones(1,M); else mic_weight=reshape(mic_weight,1,M); end [V Lambda] = eig(Spp); %%sort eigenvalues and eigenvectors [Lambda,ind] = sort(diag(Lambda),'descend'); V = V(:, ind); figure stem(Lambda) title('Eigenvalues of $S_{pp}$') l(1)=Lambda(1); for i=2:M l(i)=l(i-1)+Lambda(i); end sum(Lambda) figure stem(l) ylabel('%') xlabel('N') title('Énergie en % portée par la somme des N premières valeurs propres') Nsrc = input('Number of sources ? '); Lambda = abs(real(Lambda)); Lambda=diag(Lambda); for i=1:Nsrc Spp_i = V(:,i) * Lambda(i ,i ) * V(:,i)'; %figure %imagesc(real(Spp_i)) for n=1:Nmap %%% Calculates weighting vectors (source scaling) L=sum(abs(G_map_mic(:,n)).^2,1).^-1; %%% Calculate sterring vectors W(n,:)=L*G_map_mic(:,n)'.*mic_weight; %%% Estimates sources Sqq_diag(n,i)=W(n,:)*Spp_i(:,:)*W(n,:)'; %save only auto spectra end
时间: 2024-04-03 21:36:23 浏览: 127
这是一个 MATLAB 函数,用于实现正交波束形成方法。下面是函数的详细解释:
输入参数:
- Spp:大小为 M × M 的麦克风压力互谱矩阵
- G_map_mic:大小为 M × Nmap 的传输矩阵,用于将映射点的信号传输到麦克风位置
- mic_weight:大小为 1 × M 的麦克风权重向量
输出参数:
- Sqq_diag:大小为 Nmap × Nsrc 的矩阵,包含每个源的自动谱的对角线项,其中 Nsrc 是源的数量,由用户输入
- W:大小为 Nmap × M 的阵列,包含每个映射点的波束形成权向量
- Nsrc:源的数量,与输入参数中的 Nsrc 相同
函数的实现步骤如下:
- 对输入的麦克风压力互谱矩阵进行特征分解,得到特征值和特征向量
- 将特征值按降序排列,并将对应的特征向量按相同的顺序排序
- 通过用户输入确定源的数量 Nsrc
- 对于每个源:
- 构造估计该源自动谱的矩阵
- 对于每个映射点:
- 计算权重向量(源缩放)
- 计算波束形成权向量
- 估计源的自动谱的对角线项
- 返回所有源的自动谱和波束形成权向量
相关问题
gitCI报错Reinitialized existing Git repository in /home/gitlab-runner/builds/SuK21sQq/0/vegetables/web-map/.git/
这个错误提示意味着Git仓库已经存在,并且正在尝试重新初始化。这通常是由于在同一目录中多次运行`git init`命令或者将项目从一个Git仓库移动到另一个Git仓库导致的。
要解决此问题,请尝试删除 `.git` 目录,然后重新初始化 Git 仓库。在您的项目目录中运行以下命令:
```
rm -rf .git
git init
```
这将删除现有的 Git 仓库并重新初始化一个新的 Git 仓库。如果您想将此项目与现有的 Git 仓库关联,请参考 Git 文档,了解如何将本地 Git 仓库与远程 Git 仓库关联。
gitCI执行yml报错Reinitialized existing Git repository in /home/gitlab-runner/builds/SuK21sQq/0/vegetables/web-map/.git/
这个错误提示表明 Git 仓库已经存在,并且被重新初始化了。可能是因为你在执行 Git 命令时,不小心执行了 `git init` 命令,或者在 Git 仓库目录下删除了 `.git` 目录。
如果你确认这个 Git 仓库的历史记录不重要,可以直接删除 `.git` 目录,然后重新执行 `git init` 命令。如果你想保留历史记录,可以尝试执行 `git fetch` 命令,或者将 Git 仓库备份一下,然后重新克隆一份。
阅读全文