本代码提供给定信号x[n]的短时傅立叶变换(STFT)的Matlab函数。
The present code is a Matlab function that provides a Short-Time Fourier Transform (STFT) of a given signal x[n].
该函数是Matlab命令“spectrogram”的替代方案。
The function is an alternative of the Matlab command “spectrogram”.
该函数输出的变量为:
1)具有列时间和行频率的复STFT系数矩阵;
2)频率矢量;
3)时间矢量。
a matrix with the complex STFT coefficients with time across the columns and frequency across the rows;
a frequency vector;
a time vector.
参考文献:
[1] J. Benesty, M. Sondhi, Y. Huang. Springer Handbook of Speech Processing. Berlin, Springer, 2008.
[2] J. Smith. Spectral Audio Signal Processing. W3K Publishing, 2011.
[3] T. Dutoit, F. Marquґes. Applied Signal Processing: A MATLAB-Based Proof of Concept. New York, Springer, 2009.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Short-Time Fourier Transform %
% with MATLAB Implementation %
% %
% Author: Ph.D. Eng. Hristo Zhivomirov 12/21/13 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [STFT, f, t] = stft(x, win, hop, nfft, fs)
% function: [STFT, f, t] = stft(x, win, hop, nfft, fs)
%
% Input:
% x - signal in the time domain
% win - analysis window function
% hop - hop size
% nfft - number of FFT points
% fs - sampling frequency, Hz
%
% Output:
% STFT - STFT-matrix (only unique points, time
% across columns, frequency across rows)
% f - frequency vector, Hz
% t - time vector, s
% representation of the signal as column-vector
x = x(?;
% determination of the signal length
xlen = length(x);
% determination of the window length
wlen = length(win);
% stft matrix size estimation and preallocation
NUP = ceil((1+nfft)/2); % calculate the number of unique fft points
L = 1+fix((xlen-wlen)/hop); % calculate the number of signal frames
STFT = zeros(NUP, L); % preallocate the stft matrix
% STFT (via time-localized FFT)
for l = 0:L-1
% windowing
xw = x(1+l*hop : wlen+l*hop).*win;
% FFT
X = fft(xw, nfft);
% update of the stft matrix
STFT(:, 1+l) = X(1:NUP);
end
% calculation of the time and frequency vectors
t = (wlen/2:hop:wlen/2+(L-1)*hop)/fs;
f = (0:NUP-1)*fs/nfft;
end
完整源码及示例下载地址:
http://page5.dfpan.com/fs/4lcj22215291d67ef85/
更多精彩文章请关注微信号:
文章浏览阅读1.4w次,点赞14次,收藏68次。前言我们做Android系统源码开发,在定位问题的过程中经常要从App层跟踪代码到Framework层中,为了更加方便的查找代码,这时候就需要把整个工程源码导入到Android Studio中,导入后我们也可以通过断点调试,更加快速和准确地定位分析解决问题。操作步骤开发环境: Ubantu 20.4 Android Studio4.2 Android 11(R) 源码步骤一 1. 进入源码根目录,初始化系统环..............._怎么导入别人的android源码
文章浏览阅读2.8k次。// $ xxd -i logo.bmp logo.h#include //TO_DO ++++++++unsigned char logo_bmp[] = { 0x42, 0x4d, 0xde, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x0_bmp图片转成hex
文章浏览阅读837次。一、问题何为欲望?二、何为欲望 欲望(Desire)是由生物的本性产生的想达到某种目的的要求,欲望无善恶之分,关键在于如何控制。 欲望是世界上所有动物最原始的、最基本的一种本能。从人的角度讲是心理到身体的一种渴望、满足,它是一切动物存在必不可少的需求。一切动物最基本的欲望就是生存与存在。简单的来说就是 爱与不满足。 ...
文章浏览阅读269次。二手平台后台功能主要包括:管理员登陆、管理员管理、APP用户管理、留言评论管理、商品管理、商品发布等功能。1.在数据库设计方面,数据表是系统实现的一个难点,用户登录如何区分管理员还是普通用户,多个物品的种类价格处理,这些在数据库的设计上都是需要仔细考虑的;后端:Java+SSM。_基于springboot的校园二手商城交易微信小程序开题答辩问题
文章浏览阅读2k次,点赞4次,收藏6次。avue的一些配置1.表格option配置项<avue-crud :option="option" ref="crud" //表格常用事件 @on-load="getList"//这个事件会在表格所在的组件加载时就会执行后面的getList方法,初始化表格数据。并且当表格翻页或者pageSize变化时候也会自动执行该方法,这时候表格绑定的 :page.sync="page"中的page的值也会随时更新,当页面大小变化时,还会自己将页面变为1 如果使用了这个方法 其实表格的_avue dicurl 带参数
文章浏览阅读1.7k次。环境: MacOSX 11.5.2(intel) , Xcode 12.5.1Xcode 12.5.1 正常安装完成MonekeyDev后,能看到MonkeyDev的项目 ,但是Command Tool类型的项目无法编译,编译时报错:Showing Recent Messages unable to resolve product type 'com.apple.product-type.tool' for platform 'iphoneos'解决办法:使用记事本编辑: /Applicat_file /applications/xcode.app/contents/plugins/ideiossupportcore.ideplugin/co
文章浏览阅读747次。Sophus安装 SLAM 说明fmt安装未成功,安装8.1.1版本的fmt参考:解决办法 Ceres 2.0.0没有manifold.h 修改Sophus/test/ceres/CMakeLists.txt和 Sophus/test/core/CMakeLists.txt 中的下面这句话,使用2.1.0的版本_error: static assertion failed: cannot format an argument. to make type t fo
文章浏览阅读3.6k次。学习笔记_数据链路层的介绍
文章浏览阅读1.7k次,点赞2次,收藏5次。转载自:https://blog.csdn.net/miao19920101/article/details/75648491回调函数的使用回调函数在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针。1. 回调指针概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这..._回调函数的用法
文章浏览阅读792次。STM32F0xx的AD转换程序。 该例程使用的是PB01引脚,AD功能为ADC_IN9,查数据手册,如下图所示。 首先初始化引脚: void adc_init( void ){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE ); GPIO_InitSt..._stm32f0xx adc_in
文章浏览阅读1w次,点赞73次,收藏97次。01、注释也是写作据我所知,优秀的程序员都热爱写作(不止是狭义上的写博客)。如果你能举出一些例外,请一定转告我。为什么这么说呢?一个优秀的程序员想要分享一段开源的代码,假如别的程序员看不懂的话,他的挫败感一定会油然而生,除非他不想让别人看懂,但我觉得这样的话也没必要开源了吧。为了能够让别的程序员读懂他的代码并重用,他不仅要定义恰当的变量和方法,还得写上一些可读性高的注释。就像下面这样:p..._程序员写作
文章浏览阅读1.6k次。与没有加深层的网络相比,加深了层的网络可以用更少的参数达到同等水平(或者更强)的表现力。我们通过结合卷积运算中的滤波器大小来理解。_卷积深度变深什么作用