1. FT STFT
-
ft : 全局变换,分析非平稳信号局部特征的效果不理想。
-
stft: 窗确定了,则时间频率分辨率确定了。局部分辨率固定。非平稳信号的分析效果差。
-
频域分析的常用方法:
带通滤波器组
ft
线性预测法
zoomfft
1.1 DFT
资料《1_The Audio Programming Book_MIT》 chapt7
变换公式,其中N为信号点数。正变换需要除以点数N。
实际c语言计算时用下式来分别对实部虚部进行计算。
DFT获得复数序列,其中实数是cos谐波的总和,虚数表示sin谐波的和(注意-符号)。
如果信号的频率不在DFT的所有频点上,则计算的dft幅度误差大。
1.1.1实数的dft特性与重构
- 对实时,DFT的结果的特性:如果N为偶数,则第N/2+1个点的频率为fs/2,第2-N/2个点(频率为fs/N到fs/2-fs/NHz)的幅度与N-N/2+2个点(频率为fs-fs/N到fs/2+fs/NHz)对称。即只需关注幅度谱上0-fs/2 Hz的频点的幅度(第1点到N/2+1点)。
- 实数的重构:如下式,已知虚部总和为0,则不需要计算虚部,只计算实部即可。
又:
可得:
- 右半边频点Xk实际对应负频率,**实部与左半边的实部相同,虚部与左半边的虚部的符号相反。**原因:Xk的实部是cos的和,虚部是sin的和。
- 频率0和fs/2的XK均是实值。考虑到负频率,实际上fs/2频率应该视为 ±fs/2。
- 由于实信号的频谱被分为了正负半轴,所以除了0Hz外,每个频点的幅度为时域信号中谐波幅度的一半。(这是matlab的fft得到Xk后要/N*2才与时域幅度相等的原因)
- matlab中 angle得到的是±pi内的相位,unwrap(angle(XK))/pi*180可观察连续的相位谱。
1.2 FFT
1.3 STFT
1.3.1 Window 原理
时域加窗,即频域卷积,窗w的频谱包络会强加到每个x的采样点上。
1.3.2 几种窗的特性
- hanning、hanming
1.3.3 stft处理细节(stft和istft两个函数)
- hopsize:帧移,根据窗类型来确定,hn、hm窗最佳选N/4,可确保成功重构信号。
- overlapped-Add: dft时,每次移动H个点,截取Nfft个点加窗做fft。重建信号时,每次得到Nfft个点后,加窗,然后将其存至outsig序列中,前后两次存储的帧移也是H个点。
- rfftw lib中的fft和ifft细节:计算N点fft得到N点的实数输出(结构为0至N/2点的实部,N-1点至1点的虚部,恰好共N个点),只保留了0-fs/2 Hz信号的实部和虚部,丢弃了右半边频率轴的信息。并且没有除以N。若要代入ifft必须先整体除以N。
- The Audio Programming Book_MIT : 本书中的fft也只保留了左半边频率轴(0-fs/2 Hz)信息:顺序为0Hz、fs/2 Hz信号的实部,之后为1Hz的实部虚部,2Hz的实部虚部,直到fs/2-1 Hz的实部和虚部。并且除以了N。fft的结果可以直接带入ifft变换。如下图所示:
即表示fft的频点,多篇文章上都看到了freq bin。- 单帧STFT结果幅度表示信号中谐波的幅度,而相邻帧STFT的相位信息则可提取出瞬时频率,instantaneous freq。重要!!!
we will be able to transform the amplitude and frequency aspect of a sound, by manipulating the magnitudes and phase values of each bin
1.3.4 stft的几个应用场景
- Cross-Synthesis
matlab code example
将sig1的幅度谱与信号2的相位谱合成。再istft。
Xr =abs_X1*cos(phi2);
Xim =abs_X1*sin(phi2);
2.频域filter
- 对输入信号的幅度谱进行调整。(乘上cos类似低通滤波器,乘上sin类似高通滤波器。) 之前遇到的将电压信号的幅度谱与系统频响幅度曲线相乘,再变换回时域得到位移,也是此种场景。
- 处理思路,将滤波器的H(z)的z用exp(j2pik/N表示,得到H(k)再写成rectangular形式,与XK的实虚部相乘即可。
1.4 phase vocoder
1.4.1 信号分解流程 analysis ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c2cf47c6f043bb16ccdab81bc2b34629.png)
- 第2部的解释:为了对齐前后帧内信号相位,需要对分析窗内数据移位。当前窗的帧移为ha,则窗内右侧ha个点的数据需要移动至最左侧。这样连续采样的帧信号之间没有相位差。
- 核心:相邻bin的第k个频点的瞬时频率的估计: 当前k点的dft频率加前后两帧相位差对应的频率, = dphi/2pifs/hop+k/Nfs
1.4.2 信号合成 resynthesis
1.4.3 pv的缺点
1、dft频率分辨率相同,低频误差较大。当多个频率进入单个分析频时,计算不准确。所以,更适合 harmonic spectra(A harmonic spectrum is a spectrum containing only frequency components whose frequencies are whole number multiples of the fundamental frequency)。1.4.4 应用
-
- spectral morphing: 两个幅度谱和瞬时频率谱变换。
-
- 瞬时频率估计:除了采用pv方法中直接求相位差的方法,还可以利用两次dft的方法。
- c代码范例:利用pv进行升降调
-
2. 非平稳信号处理
Wigner-Ville distribution, Short-time Fourier Transform, Wavelet Transform以及Hilbert-Huang Transform
两篇文章
https://ieeexplore.ieee.org/document/7906573
https://ww2.mathworks.cn/matlabcentral/fileexchange/62483-synchroextracting-transform