使用overlap-add方法计算两个信号的卷积示例(在频域计算卷积)
之前已经写过一篇使用overlap-add方法计算两个信号的卷积示例
本篇将卷积部分的计算从时域改为频域,基本操作步骤不变
示例代码如下:
import numpy as npdef get_blocks(signal, block_length):a_length = len(signal)padding_length = block_length - 1segments = -(-a_length // block_length)result = np.zeros((segments, block_length + padding_length))for i in range(segments):b = signal[i * block_length: (i + 1) * block_length]p = block_length + padding_length - len(b)b = np.pad(b, (0, p), 'constant', constant_values=(0, 0))result[i] = breturn resultdef fft_H(h, length):if len(h) < length:h = np.pad(h, (0, length - len(h)), 'constant', constant_values=(0, 0))return np.fft.fft(h)def convolve_blocks(blocks, H):'''该方法改为了从频域计算'''result = np.zeros((blocks.shape[0], blocks.shape[1]))for i in range(blocks.shape[0]):X = np.fft.fft(blocks[i])Y = X * Hy = np.fft.ifft(Y)result[i] = y.realreturn resultdef convolve_overlap_add(a, h):a_length = len(a)h_length = len(h)o_length = h_length - 1blocks = get_blocks(a, h_length)length = blocks.shape[1]H = fft_H(h, length)cb = convolve_blocks(blocks, H)result = np.zeros(length * length)read_offset = 0overlap_add = np.zeros(length)for i in range(cb.shape[0]):if i == 0:result[0:length] = cb[i]read_offset = h_lengthelse:result[read_offset:read_offset + length] = overlap_add + cb[i]read_offset = read_offset + h_lengthoverlap_add = cb[i][h_length:]overlap_add = np.pad(overlap_add, (0, length - len(overlap_add)), 'constant', constant_values=(0, 0))return result[:a_length + o_length]a = np.asarray([1, 3, -1, 2, 5, 3, -2, -4, -2, 1])
h = np.asarray([1, 2, -1])c1 = convolve_overlap_add(a, h)
print('convolve_overlap_add:', c1)c2 = np.convolve(a, h)
print('np.convolve:', c2)
使用overlap-add方法计算两个信号的卷积示例(在频域计算卷积)相关推荐
- java 计算两个日期相差月数_Java简单计算两个日期月数差的方法
本文实例讲述了Java简单计算两个日期月数差的方法.分享给大家供大家参考,具体如下: /** * 获取两个日期相差的月数 * @param d1 较大的日期 * @param d2 较小的日期 * @ ...
- php计算两个日期之间的小时数,PHP_php 计算两个时间戳相隔的时间的函数(小时),这个是可以具体到小时的php代 - phpStudy...
php 计算两个时间戳相隔的时间的函数(小时) 这个是可以具体到小时的php代码 复制代码 代码如下: /* Author: 杨宇 yangyu@sina.cn */ //输入两个时间戳,计算差值,也 ...
- html点击按钮计算两个输入框的和_小程序计算报价功能介绍
一.使用场景 用户可在管理后台设置计算值和运算公式,访客输入对应计算值,即可实现自动计算出结果,并提供相关的咨询入口,适用于装修.建材.房贷.车险等行业的报价行为. 二.功能版本限制 小程序至尊版可开 ...
- mysql计算两个月份之间的差值_MySQL计算两个日期相差的天数、月数、年数
MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...
- 使用overlap-add方法计算两个信号的卷积示例
假设信号数组如下,使用overlap-add方法计算线性卷积 a = [1, 3, -1, 2, 5, 3, -2, -4, -2, 1] h = [1, 2, -1] step1: 分组 根据h长度 ...
- 里计算两个数的总和_发动机排量怎样计算?懂这个的修理工真嘀很少!
点击↑汽修案例关注置顶,获得正时大全 汽车排量就是气缸工作容积是指活塞从上止点到下止点所扫过的气体容积,又称为单缸排量,它取决于缸径和活塞行程.发动机排量是各缸工作容积的总和,一般用毫升(CC)来表 ...
- python3, 计算两个矩形框是否重叠,并计算重叠度
# 两个检测框框是否有交叉,如果有交集则返回重叠度 IOU, 如果没有交集则返回 0 def bb_overlab(x1, y1, w1, h1, x2, y2, w2, h2):'''说明:图像中, ...
- java如何计算时间天数差,java计算两个时间相差天数的方法汇总
问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是 ...
- java计算两个时间相差天数的方法
方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是分闰年和平年的,各自的天数不同 /** * date2比date1 ...
最新文章
- shell的一些常识
- 【 随笔 】 财源滚滚
- ASP.NET MVC 2 验证
- 我的世界拿java开服务器_我的世界如何开服务器
- Linux下arp用法
- python for in语句 index_使用for循环查找句子中的单词及其索引位置
- when and where is gt_cache_in_memory filled
- 使用 python 开发 Web Service
- K均值聚类关于初始聚类中心的探讨(matlab程序)
- python抽签代码_Python(抽签问题),python实例,
- 保证一致性吗_谈了千百遍的缓存数据一致性问题
- 关于互联网大厂裁员,引发企业危机处理与个人危机处理的思考
- hduoj 6000 2016CCPC-final B. Wash(贪心)
- android 4.3以上修改DNS流程(netd)
- python敏感词过滤替换_浅谈Python 敏感词过滤的实现
- 类似print shopmail可变数据生成,排版、拼版实现
- word中插入公式2010和2016两个版本)
- 拿到offer后 还应该继续去面试?
- 我所了解的一些路由器对比
- APK保护技术——保护应用、游戏APP不被破解
热门文章
- DeepChem | Windows 10下anaconda3环境从源码构建并安装deepchem
- RDKit | 通过分析活性化合物确定指标阈值
- JMC | 人工智能在药物合成中的当前和未来作用(3)
- 武汉工程大学认识实习报告计算机,武汉工程大学化工认识实习报告
- 又爱又恨的 Microsoft Edge!
- 尤雨溪创立 Vue.js 的心路历程纪录片
- Current综述:中农宋春旭等为植物有益微生物组构建一个美好家园
- 不需要懂得编程,但却可以使用ggplot2画出论文级别的图?
- android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
- R语言ggplot2可视化:使用scale_y_continous函数自定义指定Y轴的坐标范围以及对应的数值、将坐标轴的数值设置为需要的数据类型(整型、浮点型)