对于multitaper多窗口谱估计的理解及步骤 (对应matlab中pmtm函数)谱减法相关
对于多窗口谱估计的理解
0. 缘起
在语音增强通过改进的谱减法进行谱估计时,使用多窗谱估计法要优于我们一般遇到的周期法谱估计,中文相关的资料不多,这里分享一下我学习理解到的内容。
1. PMTM 含义
- P: PSD (Power spectral density)
- MTM: Multi- Taper Method
2. 与我们常用的周期谱估计的区别
- 正常的周期法: 频率估计是取帧,一帧加窗(一般汉宁窗)然后做频率变换,然后将每帧的频谱做一个平均
- 多窗谱法:频率估计是取帧,一帧分别与多窗(一般为几个k不一样的slepian窗)中的每个窗相乘,然后做频率变换, 将每个窗频率变换的结果 相加得到最终的一帧频谱结果
PMTM 中常用的窗函数:
Slepian
Sine

k不同,窗口不同,他们是正交的。即 向量积为0.
3. 计算过程
step 1: 取一帧数据,分别与窗相乘,得多几条加窗后的数据

step2: 针对每条数据(同一帧,不同加窗),进行 FFT变换


step3: 将这几条数据(同一帧,不同加窗)的FFT结果相加后平均,得多合成的一帧频谱变换

overview

5. 多窗/单窗谱估计结果对比
多窗谱估计得到的结果没有一般的周期法用的单窗谱估计得到的结果那么锐利

6. 程序如何生成多窗 - 以sin为例
6.1 生成正交窗的公式代码
\]
N为数据的点数
figure
N = 1000;
nw = 3;
ns = 2*(nw)-1;
n = 1:N;
k = 1:ns;
sine_tprs_array = sqrt(2/(N+1))*sin(pi*n'*k/(N+1)); % 生成多窗口函数
% g_1(n)= sqrt(2/(1000+1))*sin(pi*(1:1000)'*1/(1000+1))
% g_2(n)= sqrt(2/(1000+1))*sin(pi*(1:1000)'*2/(1000+1))
% g_3(n)= sqrt(2/(1000+1))*sin(pi*(1:1000)'*3/(1000+1))
% g_4(n)= sqrt(2/(1000+1))*sin(pi*(1:1000)'*3/(1000+1))
% g_5(n)= sqrt(2/(1000+1))*sin(pi*(1:1000)'*3/(1000+1))
lbs = "Sine";
% subplot(2,1,kj)
for kj= 1:5
subplot(5,1,kj)
plot(sine_tprs_array(:,kj))
title(lbs)
legend(append('k = ',string(kj)), ...
'Orientation','horizontal','Location','south')
legend('boxoff')
ylim([-0.09 0.07])
end
6.2 计算是否符合正交
sine_tprs_array = tprs(:,:,2);
rslt = zeros([5,5]);
for i =1:5
for j = 1:5
rslt(i,j) = sine_tprs_array(:,i)'*sine_tprs_array(:,j); % 计算向量积,检查是否正交
end
end`
>> rslt
rslt =
1.0000 0.0000 -0.0000 -0.0000 0.0000
0.0000 1.0000 -0.0000 0.0000 -0.0000
-0.0000 -0.0000 1.0000 -0.0000 -0.0000
-0.0000 0.0000 -0.0000 1.0000 -0.0000
0.0000 -0.0000 -0.0000 -0.0000 1.0000
% 可见这几个窗函数都是正交的。
7. Reference
- Multitaper power spectral density estimate - MATLAB pmtm
- 频谱分析中如何理解taper? - 知乎
- [数字信号中功率谱估计相关方法简介及MATLAB实现_matlab功率谱
- The multi-taper method - YouTube
对于multitaper多窗口谱估计的理解及步骤 (对应matlab中pmtm函数)谱减法相关的更多相关文章
- Matlab 中 arburg 函数的理解与实际使用方法
1. 理解 1.1 Matlab 帮助: a = arburg(x,p)返回与输入数组x的p阶模型相对应的归一化自回归(AR)参数. 如果x是一个向量,则输出数组a是一个行向量. 如果x是矩阵,则参数 ...
- 深入理解 JavaScript 中的函数
JavaScript函数也具有这些特性,但它们不仅仅是常规函数.JavaScript函数是对象.你可以查看我曾经写的关于JavaScript对象的文章,里面我提到几乎JavaScript中的所有一切都 ...
- 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)
关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录) 作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...
- .NET抽象工厂模式微理解--教你在项目中实现抽象工厂
.NET抽象工厂模式微理解--教你在项目中实现抽象工厂 最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的 ...
- 深入理解C指针之三:指针和函数
原文:深入理解C指针之三:指针和函数 理解函数和指针的结合使用,需要理解程序栈.大部分现代的块结构语言,比如C,都用到了程序栈来支持函数的运行.调用函数时,会创建函数的栈帧并将其推到程序栈上.函数返回 ...
- node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了
最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...
- 对NumPy中dot()函数的理解
今天学习到numpy基本的运算方法,遇到了一个让我比较难理解的问题.就是dot函数是如何对矩阵进行运算的. 一.dot()的使用 参考文档:https://docs.scipy.org/doc/num ...
- 运用《深入理解Java虚拟机》书中知识解决实际问题
前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
随机推荐
- HCNP Routing&Switching之路由控制-策略路由
前文我们了解了路由策略工具Route-Policy相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15322135.html:今天我们来聊一聊策略路由相 ...
- maven编译打包
sonar扫描java项目,需要使用maven 来到maven项目下第一件事情编译打包,注意代码扫描是在编译之后的:https://blog.csdn.net/qq_34556414/article/ ...
- javascript 面向对象 模块
* module 完成函数 createModule,调用之后满足如下要求:1.返回一个对象2.对象的 greeting 属性值等于 str1, name 属性值等于 str23.对象存在一个 say ...
- Appium 自动化测试改造思路
流水账脚本 从头到尾编写测试脚本 PO封装 业务行为与操作具体页面元素分离 basepage封装 如封装find方法,目的时增强稳定性 数据驱动封装 将常用的数据改为配置文件 为构建测试平台打基础
- 用 openresty 编写 lua
""" #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/erro ...
- 真机连接电脑后,adb devices显示为空-解决方案
真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...
- 多个ssh key 配置多个网址
多个 ssh key 配置多个网站 一.生成ssh key ssh-keygen -t rsa -C "你的邮箱" -f ~/.ssh/id_rsa_one ssh-keygen ...
- MySQL表空间回收的正确姿势
不知道大家有没有遇到这样的一种情况,线上业务在MySQL表上做增删改查操作,随着时间的推移,表里面的数据越来越多,表数据文件越来越大,数据库占用的空间自然也逐渐增长 为了缩小磁盘上表数据文件占用的空间 ...
- Linux系统自我学习的一些笔记1
远程连接: 1.查看IP地址 ip addr 2.远程登陆linux系统 ssh 主机名@IP地址 文件操作: 新建文件touch 例如:touch test.txt (创建单个文件) 例如:to ...
- 自然语言处理标注工具——Brat(安装、测试、使用)
一.Brat标注工具安装 1.安装条件: (1)运行于Linux系统(window系统下虚拟机内linux系统安装也可以) (2)目前brat最新版本(v1.3p1)仅支持python2版本运行使用( ...