短时傅里叶变换程序实现
参照网址短时傅里叶变换
参照上述网址,尝试编写短时傅里叶变换得程序,为了加深对短时傅里叶计算过程的理解,也为后续的其他算法先打下基础。编程能力较差,虽然仿照,但可能依然由很多考虑不到。
function [s,f,t] = sftf(x,window,overlap,nfft,fs)% x: 输入的一维数组% window: 窗的类型,当输入为一整数时,默认使用hanning窗% overlap:重叠的长度% nfft:做一次傅里叶变换得长度% fs:采样频率% 默认参数设置if nargin < 2 || isempty(window); window = hanning(256); endif length(window) == 1; window = hanning(window); endif nargin < 3 || isempty(overlap); overlap = floor(length(window)/2); endif nargin < 4 || isempty(nfft); nfft = length(window); endif nargin < 5 || isempty(fs); fs = 2; endif length(window) > nfft; nfft = length(window); endn = length(window);step = n - overlap; %每次移动的步长step_nums = ceil(abs(length(x)-overlap)/abs(step)); %需要移动多少步% 需要将x补全,最后不足以领补全[x_row, x_col] = size(x);if x_row ==1; x = x'; end % x变换为一列if x_col ~= 1 && x_row ~= 1; error('输入的x不是一维数组'); endx_len = step * (step_nums-1) + n;mm = x_len-length(x);x_bu = zeros(mm, 1);x = [x; x_bu];% 将x进行拆分S = zeros(n, step_nums);t = 1:step:x_len-n+1;for i = 1:length(t)S(:,i) = x(t(i):t(i)+n-1).*window;end% 进行快速傅里叶变换SFTF = fft(S,nfft);if rem(n,2)==1; x_fre = (n+1)/2; endif rem(n,2)==0; x_fre = n/2+1; endSFTF = abs(SFTF/n);s = SFTF(1:x_fre,:);s(2:end-1,:) = 2*s(2:end-1,:);f = (0:x_fre-1)*fs/n;t = t/fs;% 画图部分
% figure
% surf(t,f,10*log10(abs(s)),'EdgeColor','none');
% axis xy;
% axis tight;
% colormap(jet);
% view(0,90);
% xlabel('Time');end
使用数据进行测试结果如下
clc
Fs = 1000;
N = 2000;
t = 0:1/Fs:(N-1)/Fs;
y = 1.5*sin(2*pi*80*t)+1.5*sin(2*pi*160*t)+1.5*sin(2*pi*240*t)+2*sin(2*pi*320*t)+2*sin(2*pi*120*t);
[s,f,t] = sftf(y, 300,100,300,Fs);
figure
surf(t,f,10*log10(abs(s)),'EdgeColor','none');
axis xy;
axis tight;
colormap(jet);
view(0,90);
xlabel('Time');
ylabel('Frequency (Hz)');
短时傅里叶变换程序实现相关推荐
- 2021-05-10 Matlab短时傅里叶变换和小波变换的时频分析
Matlab短时傅里叶变换和小波变换的时频分析 简介 本文主要给定一小段音频,通过短时傅里叶变换和小波变换制作时频图.音频的采样率为44100, 短时傅里叶变换 在matlab中,短时傅里叶变换的分析 ...
- 利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声
利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声 1.背景 傅里叶变换(TF)对频谱的描绘是"全局性"的,不能反映时间维度局部区域上的特征,人们虽然从傅立叶变换能清楚地 ...
- tf.signal.stft() 短时傅里叶变换的示例
import tensorflow as tf import numpy as np a1 = np.arange(5) print(a1) [0 1 2 3 4] a2 = a1.astype(np ...
- librosa.stft() 短时傅里叶变换
librosa 短时傅里叶变换 import numpy as np # pip install numpy import librosa # pip install librosa y, sr = ...
- matlab---spectrogram短时傅里叶变换与chrip信号
文章目录 0.背景 1.chrip信号 1.matlab帮助文档对chirp的解释 2.非线性调频 1.高斯包络的调频信号 2.spectrogram 利用surf根据spectrogram的返回参数 ...
- 2021-02-28 Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图
Matlab绘制短时傅里叶变换的频谱图和时间-频率-幅值三维图 function [t,frequency,f_spectrum]=fft_s(y,windowlength,Fs) % 输入 : % ...
- 时频分析:短时傅里叶变换应用
目录: 前言 实验环境 Matlab spectrogram函数 1语法 2举栗子: 2.1跟踪声音信号里的鸟声轨迹 2.2谱图3d可视化 参考: 前言 之前讲了时频分析的原理,和matlab里面的相 ...
- 时频分析:短时傅里叶变换实现(2)
目录: 文章目录 补充 #前言 之前讲了时频分析的原理,现在来讲讲它在matlab里面的实现. 想要复习原理的同学,可以参照一一下这篇: 短时傅里叶分析 本次讲解中阶的函数,基础的可以参见前面的: 短 ...
- 时频分析:短时傅里叶变换实现(1)
目录: 前言 实验环境 Matlab spectrogram函数 1语法 2使用说明 3代码如下: 前言 之前讲了时频分析的原理,现在来讲讲它在matlab里面的实现. 想要复习原理的同学,可以参照一 ...
- 【音频处理】短时傅里叶变换
前言 上一篇博客讲了离散傅里叶变换,里面的实例是对整个信号进行计算,虽然理论上有N点傅里叶变换(本博客就不区分FFT和DFT了,因为它俩就是一个东东,只不过复杂度不同),但是我个人理解是这个N点是信号 ...
最新文章
- 2022华为首个「天才少年」,是从绩点1.8逆袭的复旦博士
- python生成100个随机数_Python_0——100闭区间产生3个随机数,两种方法排序
- 共识协议(6)PBFT详细步骤
- [Swift]LeetCode781. 森林中的兔子 | Rabbits in Forest
- 下列哪个不是it行业技术岗位_28岁毕业进入IT互联网行业从事技术研发岗位是否还来得及...
- stm32上的Lava虚拟机开发进度汇报(3)
- 【电路补习笔记】10、电感式开关电源(BUCK 降压电路)
- Maven依赖排除 禁止依赖传递 取消依赖的方法
- asp.net权限控制配置web.config
- Linux防火墙-netfilter-iptables
- Mstar的Monitor方案笔记(五)——Gamma
- ios点击推送闪退_越狱后改造iOS系统 Cydia篇
- Java 14中对switch的增强,终于可以不写break了
- 怎么用计算机录制mp3的音频,电脑怎么录音,电脑录制音频的方法
- JPEG 原理分析及 JPEG 解码器的调试
- android电视无线同屏,手机连接电视同屏操作方法详解
- C++:重定义:符号重定义:变量重定义(二):解决变量重定义(const static)
- java_程序题分析:将人名集合 ,{“Peter”,”Mary”,”Sam”,”Tom”,”Paker”,”Linda”,”Lina”} ,进行字典顺序排序(a~z的顺序)
- Intel Altera PCIE IP介绍
- 科普NGK公链生态板块旗下的BGV、SPC、NGK、USDN四大币种
热门文章
- python中的猴子补丁Monkey Patch
- 嵌入式工程师需不需要学java_嵌入式开发工程师需要具备哪些素质和技能基础?...
- 怎么才能打开dwg图纸?
- Xshell上传文件到Centos服务器
- Ubuntu 16.04 解决RTL8111/8168/8411网卡有线连接网速慢的问题
- python3爬虫(2):使用Selenium爬取百度文库word文章
- cad中计算机的快捷键,CAD中一些常用的快捷键用法
- 信息学奥赛一本通(C++版)在线评测系统 1887:【15NOIP提高组】神奇的幻方
- HTML5添加网页音效
- 特朗普签署《美国人工智能倡议》,释放了哪些重要信号?