【源码】基于MATLAB的短时傅里叶变换STFT_matlab stft底层源代码-程序员宅基地

在这里插入图片描述

本代码提供给定信号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)时间矢量。

  1. a matrix with the complex STFT coefficients with time across the columns and frequency across the rows;

  2. a frequency vector;

  3. 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/

更多精彩文章请关注微信号:在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42825609/article/details/85446413

智能推荐

Android Studio 导入安卓源码步骤_怎么导入别人的android源码-程序员宅基地

文章浏览阅读1.4w次,点赞14次,收藏68次。前言我们做Android系统源码开发,在定位问题的过程中经常要从App层跟踪代码到Framework层中,为了更加方便的查找代码,这时候就需要把整个工程源码导入到Android Studio中,导入后我们也可以通过断点调试,更加快速和准确地定位分析解决问题。操作步骤开发环境: Ubantu 20.4 Android Studio4.2 Android 11(R) 源码步骤一 1. 进入源码根目录,初始化系统环..............._怎么导入别人的android源码

bmp转十六进制hex样例_bmp图片转成hex-程序员宅基地

文章浏览阅读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)是由生物的本性产生的想达到某种目的的要求,欲望无善恶之分,关键在于如何控制。 欲望是世界上所有动物最原始的、最基本的一种本能。从人的角度讲是心理到身体的一种渴望、满足,它是一切动物存在必不可少的需求。一切动物最基本的欲望就是生存与存在。简单的来说就是 爱与不满足。 ...

基于微信小程序和SSM的校园二手交易小程序源码+论文+答辩PPT+开题报告+任务书_基于springboot的校园二手商城交易微信小程序开题答辩问题-程序员宅基地

文章浏览阅读269次。二手平台后台功能主要包括:管理员登陆、管理员管理、APP用户管理、留言评论管理、商品管理、商品发布等功能。1.在数据库设计方面,数据表是系统实现的一个难点,用户登录如何区分管理员还是普通用户,多个物品的种类价格处理,这些在数据库的设计上都是需要仔细考虑的;后端:Java+SSM。_基于springboot的校园二手商城交易微信小程序开题答辩问题

Avue-crud常用配置项_avue dicurl 带参数-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏6次。avue的一些配置1.表格option配置项<avue-crud :option="option" ref="crud" //表格常用事件 @on-load="getList"//这个事件会在表格所在的组件加载时就会执行后面的getList方法,初始化表格数据。并且当表格翻页或者pageSize变化时候也会自动执行该方法,这时候表格绑定的 :page.sync="page"中的page的值也会随时更新,当页面大小变化时,还会自己将页面变为1 如果使用了这个方法 其实表格的_avue dicurl 带参数

Xcode12.5及以上安装MonkeyDev后无法编译CommandTool项目解决办法_file /applications/xcode.app/contents/plugins/idei-程序员宅基地

文章浏览阅读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

随便推点

Sophus安装_error: static assertion failed: cannot format an a-程序员宅基地

文章浏览阅读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. 回调指针概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这..._回调函数的用法

[STM32F0xx]的AD转换驱动程序_stm32f0xx adc_in-程序员宅基地

文章浏览阅读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次。与没有加深层的网络相比,加深了层的网络可以用更少的参数达到同等水平(或者更强)的表现力。我们通过结合卷积运算中的滤波器大小来理解。_卷积深度变深什么作用

推荐文章

热门文章

相关标签