STFT in Matlab

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

1 引入

频谱分析的方法是建立在如下假设之上:
连续时间信号是频谱上的带限信号,其采样后的离散值可以提供原信号频谱的信息。
带限信号对应的时域信号定义域往往是[-\infty,\infty] 。因此,往往采用抗混叠滤波后再采样的方式。
由于实际的信号往往是信号参数时变的信号,即信号的频率,幅度,相位随时间变化。使用傅里叶分析就不能体现出时变的特性。

Questions

1、如果需要分析工程实际中的信号,会有什么样的具体需求?
2、基于傅里叶变换的频谱分析是否能够满足你的需要?如果不是,改进的方向是什么?

      

                  正线性调频时域波形                                                     负线性调频时域波形

                                  

                                             正、负线性调频DFT频谱图相同

              

                                                     短时傅里叶变换结果

摘自百度百科:

起初,在信号学里面,为了简化运算,尤其是在线性时不变系统(LTI,linear time invariance system)中的运算,从而引入了傅里叶变换的概念。然而傅里叶变换只能够给出信号的频域性质。也就是说频率并没有对应到时间上。这对于一个稳定信号是没有什么影响的,因为信号的频率永远都是一种分布。然而对于一个非稳定的信号,由于频率随时间在变化,那么使用傅里叶变换就无法完整的描述这种变化的性质。为了更好地表达这种变化的特点,短时傅里叶变换(STFT)被引入并且很快得到了推广。

2 STFT是什么

公式定义:

X_{STFT}(e^{j\omega},b)=\int ^{T/2}_{-T/2}x(t-b)w(t)e^{-j\omega t}dt

也就是说,对序列

3 STFT在Matlab中的实现

3.1 自行编写

如信号长度为100点,设窗函数长为10;设步进长为1;

则可将原信号分成:1-10;2-11;3-12....91-100;等每段10个点,共91段,对每段进行FFT,

将这些数据一起显示即可;

步长和窗函数的长度可以根据你的分辨率来定。

根据定义这样编,可提高你对STFT的认识。

3.2 tfrstft函数

参考其说明:

FRSTFT Short time Fourier transform.

        [TFR,T,F]=TFRSTFT(X,T,N,H,TRACE) computes the short-time Fourier

        transform of a discrete-time signal X.

        X     : 待分析信号.
        T     : 时间       (默认值: 1:length(X)).
        N     : 频率点数 (默认值: length(X)).
        H     : 选择的平滑窗函数    (默认值: Hamming(N/4)).
        TRACE :如果不为零,跟踪计算过程   (default : 0).
        TFR   : 得到的时频谱值(复数)
        F     : 归一化频率.

在利用该函数之前,需要做的工作是对实数数据做hilbert变换,去除复频率成分。显示的时候利用contour(T,F,abs(TFR))

3.3 spectrogram函数

S = spectrogram(X,WINDOW,NOVERLAP,NFFT,Fs)
%% 
  WINDOW : Hamming window length;
NOVERLAP :the number of samples each segment of X overlaps;
      Fs :the sampling frequency specified in Hz。

默认使用

展开阅读全文

没有更多推荐了,返回首页