我是靠谱客的博主 干净流沙,最近开发中收集的这篇文章主要介绍短时傅里叶变换STFT(非使用fft函数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(短时傅里叶变换STFT

    • 离散的短时傅里叶变换
    • Matlab代码
    • 实验结果

离散的短时傅里叶变换

在这里插入图片描述

Matlab代码

function [STFT, fre,t] = stft(x, win, hop, fs,freqlow,freqhigh,alpha)
% 计算短时傅里叶变换
% Input:
%   x - 一维信号
%   win - 窗函数
%   hop - hop - 移动长度
%   fs - 采样率
%   freqlow - 最小频率
%   freqhigh - 最大频率
%   alpha - 频率分辨率
%
% Output:
%   STFT - STFT-矩阵 [T, F]
%   fre - 频率向量
%   t - 分割后时间向量
% Jinshun Shen,Xidian University, March 2022
%jsshen@stu.xidian.edu.cn
% This program can not be used for commercialization without the authorization of its author. 

% 把 x 变为列向量
x = x(:);
win=win(:);
xlen = length(x);
wlen = length(win);

% 窗口数目 L
L =fix(xlen/hop);
fre=freqlow:alpha:freqhigh;
N=length(fre);
STFT = zeros(N, L);
    
% STFT    
flag1=0;%记录第一阶段加的窗个数
flag2=0;
for i = 0:L-1
    % 加窗
    if i*hop <= 0.5*wlen%刚开始,窗必须从最高的地方(窗的中心)开始,
        %否则0.5*wlen长度的信号的频率会消失,因为gauss窗的前0.5*wlen权重小
        K=round(0.5*wlen+i*hop);%窗的宽度,最大为wlen
        
        xw = x(1:K).*win(wlen-K+1:end);
        t=(1: K)/fs;
        t=t(:);
        for k=1:N
            f=fre(k);
             STFT(k,i+1)=sum(xw.*exp(-1i*2*pi*f*t));
        end
        flag1=flag1+1;
    elseif i*hop > 0.5*wlen && i*hop<= xlen-0.5*wlen%窗函数不需要截断
        xw = x(1+(i-flag1)*hop : wlen+(i-flag1)*hop).*win;
        t=(1+(i-flag1)*hop : wlen+(i-flag1)*hop)/fs;
        t=t(:);
        for k=1:N
            f=fre(k);
             STFT(k,i+1)=sum(xw.*exp(-1i*2*pi*f*t));
        end
        flag2=flag2+1;
    elseif i*hop > xlen-0.5*wlen
        K=wlen-(i-flag1-flag2)*hop;%窗的宽度,最大为wlen
        xw = x(xlen-K+1:end).*win(1:K);
        t=(xlen-K+1:xlen)/fs;
        t=t(:);
        for k=1:N
            f=fre(k);
             STFT(k,i+1)=sum(xw.*exp(-1i*2*pi*f*t));
        end
    end
end
% 取每个窗口中点的时间点
    t = (0:hop:xlen-1)/fs;  
end

实验结果

在这里插入图片描述

最后

以上就是干净流沙为你收集整理的短时傅里叶变换STFT(非使用fft函数)的全部内容,希望文章能够帮你解决短时傅里叶变换STFT(非使用fft函数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部