多速率信号处理

介绍

简单来说, 多速率信号处理,是指对同时存在两个以上数据速率的系统进行信号处理。多速率信号处理原理就是通过改变信号速率,以适应系统内部各个节点对信号速率的要求。这里的速率其实就是指采样率。 多速率技术已广泛应用于数字音频处理、语音处理、频谱分析、无线通信、雷达等领域。其实,以目前的系统复杂度,在我们绝大多数实际应用中,小到一个模块,大到一个系统,基本都是一个多速率处理系统。都面临着改变信号采样率的问题。

插值

I倍插值为例,在序列x(n)的每个样本之间插入I-1个零,以使序列拉长至原序列长度的I倍。

y(n)=\left\{ \begin{aligned} &x(\frac{n}{I}), & \frac{n}{I} \in Z \\ &0, & otherwise. \end{aligned} \right.

Y(z) = X(z^I)

插值后信号采样率相对原信号采样率提升I倍,此时对应的序列整个频谱由(-\pi~\pi)压缩I倍到(-\pi/I,\pi/I),并以2\pi/I为周期重复扩展I-1次,重复的部分就是原信号的镜像,如果我们能够实现一个截止频率为\pi/I的理想的低通滤波器,那么我们就实现了一个理想的上采样I倍的系统,对拉伸后的信号x(n)进行滤波,就可以实现将信号x(n)无失真的插值I

抽取

D倍抽取为例,在序列x(n)中只提取D倍时的样本,以使序列缩短至原序列长度的D倍。

y(n)=x(Dn)

Y(z) = \frac{1}{D} \sum_{m=0}^{D-1}X(z^{\frac{1}{N}}e^{-jm\frac{2\pi}{D}})

抽取后信号采样率相对原信号采样率下降D倍,此时对应的序列整个频谱由(-\pi~\pi)扩展D倍,并按间隔为2\pi/D平移叠加,导致出现混叠。因此当原信号的频谱带宽大于\pi/D时,抽取的信号将出现混叠失真。如果我们要对一个信号进行D倍抽取并且无混叠,我们必须将信号首先通过一个截止频率为\pi/D的理想低通滤波器,然后再进行抽取

Filter Bank

Two Channel Filter Bank

Two-Channel Critically Sampled Filter Banks

经过两个analysis filter的输出:

X_k(z)=H_k(z)X(z), k=0,1

经过下采样后的输出:

V_k(z)=\frac{1}{2}[X_k(z^{\frac{1}{2}}+X_k(-z^{\frac{1}{2}}))], k=0,1

上采样后的输出:

Y_k(z)=V_k(z^2) \\ =\frac{1}{2}[X_k(z)+X_k(-z)] \\ =\frac{1}{2}[H_k(z)X(z)+H_k(-z)X(-z)],k=0,1

经过synthesis filter并重建的信号:

\hat{X}(z)=\frac{1}{2}[H_0(z)F_0(z)+H_1(z)F_1(z)]X(z)+\frac{1}{2}[H_0(-z)F_0(z)+H_1(-z)F_1(z)]X(-z)

为了完美重建,需要施加一定约束,使混叠项为0,即:

F_0(z)=H_1(-z) \\ F_1(z)=-H0(-z)

为了完美重建,还需要施加约束:

c=H_0(z)F_0(z)+H_1(z)F_1(z)=H_0(z)H_1(z-)-H_1(z)H_0(-z)

Quadrature Mirror Filters(QMF)约束:

H_1(z)=H_0(-z)

也就是说,H_0H_1关于\pi/2镜像对称,在时域中,有:

h_1(n)=(-1)^nh_0(n) \\ f_0(n)=h_0(n) \\ f_1(n)=-h_1(n)

N Channel Filter Bank

对于任意通道N的filter banks,完美重建至少需要下采样因子D \leq ND=N为严格采样(Critically Sampled),D < N为过采样(OverSampled),当D > N时,欠采样(UnderSampled),此时无法完美重建。

DFT FilterBank

Modulation by a Complex Sinusoid

输入信号被频率为\omega_c 的复指数信号调制,中心频率\omega_c向下偏移至0,信号x(n)的频率偏移-\omega_c

Bandpass Filter from Lowpass Filter

一组带通滤波器可以通过原型低通滤波器经过调制得到:

h_m(n) = h_0(n)e^{j2\pi nm/N},m=0,1,...,N-1

回顾DFT公式:

X(k)=\sum_{n=0}^{N-1}x(n)e^{-j2\pi nk/N}

可以看出DFT的系数也可以看作是一组窄带滤波器组,当我们对序列进行分帧,相当于对序列加矩形窗,此时原型低通滤波器h_0为矩形窗。

以往对窗函数的理解是信号在时域与窗函数相乘,对应于频域则是理想频响与窗函数频谱的卷积,因此加窗产生了过渡带、尖峰和余震。窗函数频谱中最大的瓣为主瓣,其余的为旁瓣,加窗的目的都是为了抑制旁瓣。

从filterbank的角度来看,以矩形窗为原型的低通滤波器阻带衰减不够大,因此会导致各子带间产生混叠。

Polyphase filter

Noble Identities

Polyphase Decomposition

以下采样为例:

简单理解就是滤波后再进行抽取,其中没有抽取的信号是不需要计算的,因此经过Noble变换,计算效率可以提升N倍

对于h(0)的输入信号为:

x(nN)=[x_0,x_N,x_{2N},...]

对于h(1)的输入信号为:

x(nN-1)=[x_1,x_{N-1},x_{2N-1},...]

...

对于h(m)的输入信号为:

x(nN-m)=[x_m,x_{N-m},x_{2N-m},...]

这些下采样的子信号称为polyphase signals,这样的滤波结构称为polyphase filter bank,其中每组h(m)称为subphase filter

滤波器的输出为:

y(n)=\sum_{m=0}^{N-1}h(m)x(nN-m)

subphase filters的分解方式如示意图所示:

e_l(n)=h(Nn+l)

Polyphase filter结构如下:

Polyphase DFT FilterBank

polyphase filter的带通滤波器组是根据原型低通滤波器复调制得到的,那么便可以使用DFT实现,其结构如下:

Polyphase View of the STFT

一个特例是当原型滤波器为矩形窗时,此时我们也可以将STFT看作为polyphase filter结构

L点FFT为例,长度为L的窗口在序列x(n)上进行滑动进行分帧和加窗,每帧滑动的长度R即为下采样因子,当R等于N时,即分帧无重叠时,此时下采样为N,即此时的FFT可以看作为一个Critically Sampled FilterBank,当R小于N时,可以看作为OverSampled FilterBank,当R=1时,没有下采样

可以这样理解:我们一般对信号分帧、加窗、然后做STFT,相当于是multirate signal processing中的一个特例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang实现简单的redis服务

golang 手搓redis服务器仓库地址:实现思路: golang 手搓redis服务器 仓库地址: 仓库: https://github.com/dengjiayue/my-redis.git 实现思路: ● 协议: tcp通信 ● 数据包: 长度(4byte)方法(1byte)数据json ● 数据处理: 单线程map读写 ○ 依次处理待处理队列的请求(chan)…

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路: 1.第一次烧录固件会实现跳坏块,但是后续使用会导致坏块的产生; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum = //坏块个数 lb_badoff = //坏块所在位置 2.第一次开机会根据lb_badnum是否存在判断,如果不存在则保存上…

Y3编辑器文档2:场景编辑

文章目录 一、操作区二、地图设置2.1 地图大小2.2 其它选项三、地形编辑3.1 地势3.2 地形3.3 通行(碰撞、通行和视野规则)3.4 植被四、物件放置4.1 单位4.1.1 单位的摆放与调整4.1.2 状态栏属性编辑4.2 装饰物摆放4.3 物品4.4 镜头4.4.1 镜头的基本参数4.4.2 镜头时间轴动画4…

windows将文件推给Android真机/实机

记录一下 因为以前只试过从真机实机中将文件推给windows 但是从windows只简单复制粘贴的话会一直报错。 1.电脑安装adb 2.手机开启开发者模式 usb调试 3.usb连接选择文件传输 4.推送命令adb push 文件路径 /sdcard/download 步骤1和2和3不作赘述&#xff0c;可以搜相关配置教程…

[机器学习] 监督学习之线性回归与逻辑回归

这里写目录标题 一、监督学习概述二、线性回归&#xff08;一&#xff09;模型表示&#xff08;二&#xff09;损失函数&#xff08;三&#xff09;梯度下降算法导入所需库生成模拟数据&#xff08;可替换为真实数据&#xff09;初始化参数并进行训练可视化损失函数随迭代次数的…

精准预测美国失业率和贫困率,谷歌人口动态基础模型PDFM已开源,可增强现有地理空间模型

疾病、经济危机、失业、灾害……人类世界长期以来被各种各样的问题「侵扰」&#xff0c;了解人口动态对于解决这类复杂的社会问题至关重要。 政府相关人员可以通过人口动态数据来模拟疾病的传播&#xff0c;预测房价和失业率&#xff0c;甚至预测经济危机。然而&#xff0c;在过…

E172 ASP.NET+SQL+C#+LW+图书管理系统的设计与实现 配置 源码 文档 全套资料

图书管理系统 1.项目摘要2. 系统的概述3.项目功能4.界面展示5.源码获取 1.项目摘要 摘 要 书籍是供人们获取并增长知识的主要途径&#xff0c;由于图书的种类较多&#xff0c;阅读者也较多&#xff0c;借阅量较大&#xff0c;且易出错&#xff0c;传统的图书借阅若还停留在手工…

aippt:AI 智能生成 PPT 的开源项目

aippt&#xff1a;AI 智能生成 PPT 的开源项目 在现代办公和学习中&#xff0c;PPT&#xff08;PowerPoint Presentation&#xff09;是一种非常重要的展示工具。然而&#xff0c;制作一份高质量的PPT往往需要花费大量的时间和精力。为了解决这一问题&#xff0c;aippt项目应运…

轮转数组

轮转数组 1、题目描述2、解答思路2.1、辅助数组2.2、原地反转 1、题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 2、解答思路 2.1、辅助数组 如果我们在原数组上通过覆盖元素会导致部分元素的丢失&#xff0c…

selenium学习:等待方式

隐式等待 1.针对查找元素设置最大的超时时间 2.可以全局性的设置 3.不满足时&#xff0c;提示no such element driver.implicitly_wait(5) #对查找元素最大的超时时间&#xff0c;如果超过最大等待时间后&#xff0c;没有找到元素&#xff0c;则会报错&#xff1a;no such #e…

一文说清flink从编码到部署上线

引言&#xff1a;目前flink的文章比较多&#xff0c;但一般都关注某一特定方面&#xff0c;很少有一个文章&#xff0c;从一个简单的例子入手&#xff0c;说清楚从编码、构建、部署全流程是怎么样的。所以编写本文&#xff0c;自己做个记录备查同时跟大家分享一下。本文以简单的…

ZUC256 Go Go Go!!!

文章目录 背景运行效果代码 背景 因业务需要使用ZUC算法&#xff0c;GitHub上又没有对ZUC256相对应的Go语言的实现。 吃水不忘挖井人&#xff0c;在这里感谢GmSSL及BouncyCastle两个强大的密码学库&#xff01; 本ZUC256的编写&#xff0c;参考了这两个库及中科院软件院发布的…

图论【Lecode_HOT100】

文章目录 1.岛屿数量No.2002.腐烂的橘子No.9943.课程表No.2074.实现Trie&#xff08;前缀树&#xff09;No.208 1.岛屿数量No.200 class Solution {public int numIslands(char[][] grid) {if (grid null || grid.length 0) {return 0;}int numIslands 0;int rows grid.len…

快速将请求头构建成json结构

1.背景 有时候我们要爬虫(组包)请求一个资源数据,需要构建与原始请求一样的请求头,从浏览器复制过来的请求头,有很多,如果一个一个的配置成json有点慢,那么如何快速构建呢? 今天就使用正则表达式的方式实现 正则表达式实现快速将请求头构建成json结构 将冒号后边的换行符去掉…

数据结构6.3--交换排序

目录 交换排序基本思想 1.冒泡排序 2.快速排序 2.1hoare版本 2.2挖坑法 2.3前后指针版本 交换排序基本思想 所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾…

电脑怎么设置通电自动开机(工控机)

操作系统&#xff1a;win10 第一步&#xff0c;电脑开机时按del键进入bios页面。 第二步&#xff0c;选择advanced下的IT8712 Super IO Configuration 第三步&#xff0c;找到Auto Power On&#xff0c;将其从Power off设置为Power On 第四步&#xff0c;F10保存&#xff0c;大…

LearnOpenGL学习(高级OpenGL -> 高级GLSL,几何着色器,实例化)

高级GLSL 内建变量 顶点着色器 gl_PointSoze : float 输出变量&#xff0c;用于控制渲染 GL_POINTS 型图元时&#xff0c;点的大小。可用于粒子系统。将其设置为 gl_Position.z 时&#xff0c;可以使点的距离越远&#xff0c;大小越大。创建出类似近视眼看远处灯光的效果 gl…

SQL语句错误号:Incorrect integer value: ‘‘ for column ‘poi_id‘ at

SQL语句错误号&#xff1a;Incorrect integer value: for column poi_id at通用解决方案 在MySQL 5.7中&#xff0c;如果你遇到 Incorrect integer value: for column poi_id at row 1 错误&#xff0c;这通常意味着你尝试将一个空字符串插入到需要整数值的字段中。以下是几…

Node.js(v16.13.2版本)安装及环境配置教程

一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位&#xff08;v16.13.2版本&#xff09; 下载后的zip文件 二、解压文件到nodejs&#xff0c;并打开文件夹nodejs&#xff0c;复制解压…

【C++】继承的介绍

继承 1.继承的概念及定义1.1继承的概念&#xff1a;1.2 继承定义1.3继承类模板 2.继承中的函数隐藏3.派生类的默认成员函数4.继承中的切割5.多继承及其菱形继承问题5.1继承模型5.2解决菱形继承问题的方法(虚继承) 6.继承和组合 1.继承的概念及定义 1.1继承的概念&#xff1a; …