自适应宽带波束形成:GSC(generalized sidelobe canceller)广义旁瓣消除器原理介绍和实现代码

GSC(generalized sidelobe canceller, 广义旁瓣消除器)可以将有约束的LCMV算法转换为无约束的实现结构。网上关于GSC的介绍对细节方面介绍得不详细,并且主要是应用在窄带。宽带的GSC应用范围也比较广泛,例如在智能音箱等产品的麦克风阵列信号处理中,GSC作为核心算法。本文介绍了GSC的结构以及相关的公式推导,主要关注时域宽带GSC的实现,并给出了python的实现代码示例。关于波束形成基础知识,请参考宽带波束形成,窄带波束形成

GSC的结构

将有约束的LCMV(线性约束最小方差) 波束形成器转换为无约束的GSC结构,如下图所示

(a) 有约束的LCMV波束形成器

(b) 将权重向量\mathbf{w}分解为两个正交的成分\mathbf{w}_{q}-\mathbf{v},即\mathbf{C}^{H}\mathbf{w_{q}} = \mathbf{f}\mathbf{C}^{H}\mathbf{v} = \mathbf{0}\mathbf{w} = \mathbf{w}_{q} - \mathbf{v}

(c) 进一步将补空间\mathbf{v}分解为自适应部分\mathbf{w}_{a}和固定部分\mathbf{B},从而得到无约束自适应问题

\mathbf{w}_{q} = \mathbf{C}(\mathbf{C}^{H} \mathbf{C})^{-1}\mathbf{f}

上面是对通过伪逆的方法求\mathbf{C}^{H}\mathbf{w_{q}} = \mathbf{f}的解。

定义r = rank(\mathbf{C})(矩阵的秩,线性独立的部分),因为向量\mathbf{v}位于\mathbf{C}的补空间,所以阻塞矩阵\mathbf{B}MJ - r列,MJ

\mathbf{B}可以通过正交方法例如QR分解从\mathbf{C}中获取。还可以通过CCD方法以及SVD分解方法,我们在后面的博客文章中介绍。

上图的GSC是时域的处理结构,输入\mathbf{x}[n]是n时刻的\mathbf{x}\mathbf{x}的表达式请参考上一篇博客:宽带波束形成

\mathbf{x}[n]的是长度为MJ的列向量。

d[n] = \mathbf{w}_{q}^{H}\mathbf{x}[n]

\mathbf{u} = \mathbf{B}^{H}\mathbf{x}[n]

y[n ] = d[n] - y\hat{}[n]

\mathbf{w}_{a}(n) = \mathbf{w}_{a}(n-1) + \mu y[n] \mathbf{u}

python的宽带(如麦克风阵列信号处理)GSC实现代码

import numpy as npmatrices = (C,fr,Bk) # C,fr,Bk是固定的矩阵系数,计算方法下一篇博客会讲到coeficientes = np.dot(matrices[0],np.dot(np.linalg.inv(np.dot(matrices[0].T, matrices[0])),matrices[1])) # wq
w_adp = np.zeros(Bk.shape[1])muu = 2e-10 # LMS步长
err = np.zeros(M_Sigs.shape[1])
Xd = np.zeros((M,J))
M_S = np.concatenate((M_Sigs[:,::-1],Xd),axis=1)
for i in range(1,M_S.shape[-1]-J):Xmj = M_S[:,-i-J:-i].T.flatten()out_up = np.dot(coeficientes,Xmj) # 固定滤波x_u = np.dot(matrices[2].T,Xmj) # 经过阻塞矩阵err[i] = out_up - np.dot(x_u,w_adp) # 计算输出(误差信号)w_adp += muu*err[i]*x_u # 更新自适应滤波器的权重

后面会进一步介绍GSC的加速算法,如子带GSC,PBFDAF GSC等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EEPROM ADDRESS BYTE长度说明

1、24C16 ADDRESS BYTE 2、24C32 ADDRESS BYTE 3、ADDRESS BYTE 长度说明 容量小于16Kbits(含)的EEPROM 地址是8位的 容量大于16Kbits的EEPROM地址是16位的 4、操作说明 例如:STM的HAL库函数中 HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi…

Clickhouse MergeTree 原理(一)

作者:俊达 MergeTree是Clickhouse里最核心的存储引擎。Clickhouse里有一系列以MergeTree为基础的引擎(见下图),理解了基础MergeTree,就能理解整个系列的MergeTree引擎的核心原理。 本文对MergeTree的基本原理进行介绍…

若依上传文件/common/upload踩坑

前言:作者用的mac系统(这个是个坑),前端用的uniapp,调用若依通用上传方法报错NoSuchFileException: /home/ruoyi/uploadPath/upload... 前端上传代码示例如下: uni.chooseImage({count: 1,success(res){ uni.uploa…

金融级PaaS体系规划

近日,在美丽春城昆明举办了一场闭门的金融行业讨论会,会上灵雀云首席解决方案专家杜东明受邀进行了《金融级PaaS体系规划》的主题分享。他指出,PaaS体系的重要性日益凸显,已经成为金融行业发展的重要驱动力,它能够为金…

maven打包把所有依赖的jar copy到一个文件夹

在maven项目中,是使用依赖坐标来引入jar包,在引入jar包的时候,maven也会默默的帮助我们导入这个jar包所依赖的jar包。 但是当我们打包项目使用jar包运行的时候,往往会出现缺少jar的情况: 如果我们一个一个添加缺少的jar包到classpath下就会很麻烦,而且我们也不知到mave…

React进阶(Redux,RTK,dispatch,devtools)

1、初识Redux 是React最常用的集中状态管理工具,类似于Vue中的Pinia(Vuex),可以独立于框架运行 作用:通过集中管理的方式管理应用的状态 案例-实现一个计数器 实现步骤: Redux管理数据的流程: state:一个对象&…

MySQL基础-----多表查询之内外连接与自连接

目录 前言 一、内连接 1.隐式内连接 2.显式内连接 二、外连接 1.左外连接 2.右外连接 三、自连接 1.自连接查询 2.联合查询 前言 本期我们学习MySQL中多表查询的内连接、外连接和自连接。这里我会通过相关的案例去讲解多表查询中的内外连接与自连接的查询方式&#xff…

ARM 汇编指令:(七) STM/LDM多寄存器加载/多存储指令

一.四种栈 考验大家理解能力的地方来了,专心点,嘿嘿!! 1.满增栈:进栈(先移动指针再入栈,指针往地址增大的方向移动);出 栈(先出栈,栈指针往地址…

分享通义ChatGPT实用技能123

前言 作为一名程序员,你一定有过这样的经历:排查某个 bug 花费了好几个小时,在各个搜索引擎尝试搜索,浏览了几十甚至上百个网站,结果搜到的答案千篇一律,没有一个说到点上。而自从有了 ChatGPT&#xff0c…

通过网口或串口走Modbus协议,读写数据库中的数据

智能网关IGT-DSER方便实现多台PLC与数据库之间的数据通讯,既可以读取PLC的数据上报到数据库,也可以从数据库查询数据后写入到PLC的寄存器,还可以将数据库的数据转为Modbus服务端/从站,实现数据库内的数据也可以走Modbus协议通过网…

真空泵系统数据采集远程监控解决方案

行业背景 半导体制造业可以说是现代电子工业的核心产业,广泛应用于计算机、通信、汽车、医疗等领域。而在半导体生产加工过程中,如刻蚀、 镀膜、 扩散、沉积、退火等环节,真空泵都是必不可少的关键设备,它可以构建稳定受控的真空…

SVM实验分析(软硬间隔,线性核,高斯核)

目录 一、前言 二、实验 0. 导入包 1. 支持向量机带来的效果 2. 软硬间隔 3. 非线性支持向量机 4. 核函数变换 线性核 高斯核 对比不同的gamma值对结果的影响 一、前言 学习本文之前要具有SVM支持向量机的理论知识,可以参考支持向量机(Support Vector …

零基础如何学习Web 安全,如何让普通人快速入门网络安全?

前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人…

Python 数据持久层ORM框架 SQLAlchemy模块

文章目录 ORM 框架SQLAlchemy 简介SQLAlchemy 作用SQLAlchemy 原理SQLAlchemy 使用流程数据库驱动配置关系型数据库配置NoSQL数据库配置 创建引擎(Engine)定义模型类(ORM)创建会话(Session)创建数据库表其他关键字参数,这些参数将传递给底层的 DDL 创建函数。 删除数…

Elastic Stack--09--ElasticsearchRestTemplate

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 spring-data-elasticsearch提供的APIQueryBuildersElasticsearchRestTemplate 方法ElasticsearchRestTemplate ---操作索引 ElasticsearchRestTemplate ---文档操作…

指针【理论知识速成】(3)

一.指针的使用和传值调用&#xff1a; 在了解指针的传址调用前&#xff0c;先来额外了解一下 “传值调用” 1.传值调用&#xff1a; 对于来看这个帖子的你相信代码展示胜过千言万语 #include <stdio.h> #include<assert.h> int convert(int a, int b) {int c 0…

模型量化(二)—— 训练后量化PTQ(全代码)

训练后量化&#xff08;Post-training Quantization&#xff0c;PTQ&#xff09;是一种常见的模型量化技术&#xff0c;它在模型训练完成之后应用&#xff0c;旨在减少模型的大小和提高推理速度&#xff0c;同时尽量保持模型的性能。训练后量化对于部署到资源受限的设备上&…

通过对话式人工智能实现个性化用户体验

智能交流新时代&#xff1a;如何选择对话式人工智能产品 在快速发展的数字环境中&#xff0c;对话式人工智能正在彻底改变企业与客户互动的方式。 通过集成机器学习、自然语言处理和语音识别等先进技术&#xff0c;对话式人工智能可提供个性化、无缝的用户体验。 了解对话式人…

中间件 | Kafka - [常见问题]

INDEX 1 消息丢失1.1 消息丢失位置1.2 如何避免消息丢失 2 顺序消费 1 消息丢失 1.1 消息丢失位置 1&#xff1a;producer 向 kafka 投递消息时2&#xff1a;kafka-topic 中 leader 已经写入了消息&#xff0c;向副本写入消息前挂了时3&#xff1a;消费者从 kafka 拉取了消息&…

OSCP靶场--Depreciated

OSCP靶场–Depreciated 考点(1. graphql枚举 2.CVE-2021-4034提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.155.170 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-13 04:19 EDT Nmap scan report for 192.168.…