对于多窗口谱估计的理解

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 生成正交窗的公式代码

\[g_k{(n)}=\sqrt{\frac{2}{N+1}}sin(\frac{\pi nk}{N+1}) \qquad n,k=1,2,...N.
\]

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

  1. Multitaper power spectral density estimate - MATLAB pmtm
  2. 频谱分析中如何理解taper? - 知乎
  3. [数字信号中功率谱估计相关方法简介及MATLAB实现_matlab功率谱
  4. The multi-taper method - YouTube

对于multitaper多窗口谱估计的理解及步骤 (对应matlab中pmtm函数)谱减法相关的更多相关文章

  1. Matlab 中 arburg 函数的理解与实际使用方法

    1. 理解 1.1 Matlab 帮助: a = arburg(x,p)返回与输入数组x的p阶模型相对应的归一化自回归(AR)参数. 如果x是一个向量,则输出数组a是一个行向量. 如果x是矩阵,则参数 ...

  2. 深入理解 JavaScript 中的函数

    JavaScript函数也具有这些特性,但它们不仅仅是常规函数.JavaScript函数是对象.你可以查看我曾经写的关于JavaScript对象的文章,里面我提到几乎JavaScript中的所有一切都 ...

  3. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  4. .NET抽象工厂模式微理解--教你在项目中实现抽象工厂

    .NET抽象工厂模式微理解--教你在项目中实现抽象工厂 最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的 ...

  5. 深入理解C指针之三:指针和函数

    原文:深入理解C指针之三:指针和函数 理解函数和指针的结合使用,需要理解程序栈.大部分现代的块结构语言,比如C,都用到了程序栈来支持函数的运行.调用函数时,会创建函数的栈帧并将其推到程序栈上.函数返回 ...

  6. node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了

    最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...

  7. 对NumPy中dot()函数的理解

    今天学习到numpy基本的运算方法,遇到了一个让我比较难理解的问题.就是dot函数是如何对矩阵进行运算的. 一.dot()的使用 参考文档:https://docs.scipy.org/doc/num ...

  8. 运用《深入理解Java虚拟机》书中知识解决实际问题

    前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...

  9. SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

随机推荐

  1. 阿里云短信功能php

    1. 引入文件: https://help.aliyun.com/document_detail/53111.html?spm=a2c1g.8271268.10000.99.5a8ddf25gG0wW ...

  2. mac的vssh用sftp连不上,报unexpected SSH2_MSG_UNIMPLEMENTED packet

  3. Docker DevOps实战:Docker+Jenkins+Python+Pytest+Allure(2)- Jenkins初始化、Jenkins插件、Jenkins配置、自动化测试

    Jenkins初始化 step-1 访问Jenkins http://ip:80  step-2 查看密码.输入密码 # 方式一:通过查看容器日志 [root@localhost ~]# docker ...

  4. redis 与java的连接 和集群环境下Session管理

    redis 的安装与设置开机自启(https://www.cnblogs.com/zhulina-917/p/11746993.html)  第一步: a) 搭建环境 引入 jedis jar包 co ...

  5. python日志loguru

    文档:https://loguru.readthedocs.io/en/stable/overview.html#installation pip install loguru 使用 基本使用 ##终 ...

  6. 如何把springboot项目部署到tomcat上

    前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以 ...

  7. Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings.

    今天新建一个spring web项目,发现报错了.问题如下. 排除了网络问题,找到了解决办法.打开设置,点击check connection 输入 https://start.spring.io 点击 ...

  8. 阿里云ECS服务器Centos中安装SQL Server(破解内存限制)

    前言 前段时间赶上阿里云618活动入手了一个低配的Linux服务器,供自己学习使用,在安装SQL Server中遇到了很多小问题,查阅很多博客结合自身遇到的问题做个总结. 安装过程 1.下载阿里云在线 ...

  9. 10.3 Nginx

    Nginx介绍 engine X,2002年开发,分为社区版和商业版(nginx plus) 2019年 f5 Networks 6.7亿美元收购nginx Nginx 免费 开源 高性能 http ...

  10. SpringIOC 理论推导

    IOC理论实现 UserDao接口 public interface UserDao { void say(); } UserDaoImpl实现类 public class UserDaoImpl i ...