主要内容gydF4y2Ba

dsp。ISTFTgydF4y2Ba

逆短时间FFTgydF4y2Ba

描述gydF4y2Ba

的gydF4y2Badsp。ISTFTgydF4y2Ba对象计算频域输入信号的短时傅里叶反变换(ISTFT)并返回时域输出。对象接受傅里叶变换数据的帧,使用IFFT操作将这些帧转换到时域,并执行重叠添加来重建数据。对象的输出是由一个依赖于跳长和的因子规范化的重构信号gydF4y2Basum (gydF4y2Ba窗口gydF4y2Ba)gydF4y2Ba.详情请参见gydF4y2Ba算法gydF4y2Ba.gydF4y2Ba

创建gydF4y2Ba

描述gydF4y2Ba

istfgydF4y2Ba= dsp。ISTFTgydF4y2Ba返回一个对象,gydF4y2BaistfgydF4y2Ba,实现逆短时间FFT。随着时间的推移,对象在每个输入通道上独立地处理数据。gydF4y2Ba

istfgydF4y2Ba= dsp。ISTFT (gydF4y2Ba窗口gydF4y2Ba)gydF4y2Ba返回一个逆短时间FFT对象gydF4y2Ba窗口gydF4y2Ba属性设置为gydF4y2Ba窗口gydF4y2Ba.gydF4y2Ba

istfgydF4y2Ba= dsp。ISTFT (gydF4y2Ba窗口gydF4y2Ba,gydF4y2Ba重叠gydF4y2Ba)gydF4y2Ba返回一个逆短时间FFT对象gydF4y2Ba窗口gydF4y2Ba属性设置为gydF4y2Ba窗口gydF4y2Ba和gydF4y2BaOverlapLengthgydF4y2Ba属性设置为gydF4y2Ba重叠gydF4y2Ba.gydF4y2Ba

istfgydF4y2Ba= dsp。ISTFT (gydF4y2Ba窗口gydF4y2Ba,gydF4y2Ba重叠gydF4y2Ba,gydF4y2BaisconjsymgydF4y2Ba)gydF4y2Ba返回一个逆短时间FFT对象gydF4y2Ba窗口gydF4y2Ba属性设置为gydF4y2Ba窗口gydF4y2Ba,gydF4y2BaOverlapLengthgydF4y2Ba属性设置为gydF4y2Ba重叠gydF4y2Ba,以及gydF4y2BaConjugateSymmetricInputgydF4y2Ba属性设置为gydF4y2BaisconjsymgydF4y2Ba.gydF4y2Ba

istfgydF4y2Ba= dsp。ISTFT (gydF4y2Ba窗口gydF4y2Ba,gydF4y2Ba重叠gydF4y2Ba,gydF4y2BaisconjsymgydF4y2Ba,gydF4y2BawoagydF4y2Ba)gydF4y2Ba返回一个逆短时间FFT对象gydF4y2Ba窗口gydF4y2Ba属性设置为gydF4y2Ba窗口gydF4y2Ba,与gydF4y2BaOverlapLengthgydF4y2Ba属性设置为gydF4y2Ba重叠gydF4y2Ba,gydF4y2BaConjugateSymmetricInputgydF4y2Ba属性设置为gydF4y2BaisconjsymgydF4y2Ba,以及gydF4y2BaWeightedOverlapAddgydF4y2Ba属性设置为gydF4y2BawoagydF4y2Ba.gydF4y2Ba

istfgydF4y2Ba= dsp。ISTFT (gydF4y2Ba名称,值gydF4y2Ba)gydF4y2Ba返回一个逆短时间FFT对象,每个指定的属性名设置为指定的值。您可以以任何顺序指定额外的名称-值对参数。gydF4y2Ba

属性gydF4y2Ba

全部展开gydF4y2Ba

合成窗口,指定为实际元素的向量。gydF4y2Ba

可调:gydF4y2Ba是的gydF4y2Ba

数据类型:gydF4y2Ba单gydF4y2Ba|gydF4y2Ba双gydF4y2Ba

连续窗口重叠的样本数,用正整数指定。窗口重叠以减少数据边界上的工件。gydF4y2Ba

跳长是窗口长度与重叠长度之差。gydF4y2Ba

数据类型:gydF4y2Ba单gydF4y2Ba|gydF4y2Ba双gydF4y2Ba|gydF4y2Baint8gydF4y2Ba|gydF4y2Baint16gydF4y2Ba|gydF4y2Baint32gydF4y2Ba|gydF4y2Baint64gydF4y2Ba|gydF4y2Bauint8gydF4y2Ba|gydF4y2Bauint16gydF4y2Ba|gydF4y2Bauint32gydF4y2Ba|gydF4y2Bauint64gydF4y2Ba

将此属性设置为gydF4y2Ba真正的gydF4y2Ba如果输入是共轭对称的,就会产生实值输出。实值信号的FFT是共轭对称的,并将此属性设置为gydF4y2Ba真正的gydF4y2Ba优化了IFFT的计算方法。将此属性设置为gydF4y2Ba假gydF4y2Ba对于共轭对称输入,结果是带有小虚部的复杂输出值。将此属性设置为gydF4y2Ba真正的gydF4y2Ba对于非共轭对称输入导致无效输出。gydF4y2Ba

数据类型:gydF4y2Ba逻辑gydF4y2Ba

将此属性设置为gydF4y2Ba真正的gydF4y2Ba应用加权重叠加法。在加权重叠加中,IFFT输出乘以重叠加前的窗口。将此属性设置为gydF4y2Ba假gydF4y2Ba通过窗口跳过乘法。gydF4y2Ba

数据类型:gydF4y2Ba逻辑gydF4y2Ba

指定频率范围为gydF4y2Ba“单向的”gydF4y2Ba或gydF4y2Ba双侧的gydF4y2Ba.如果你设置gydF4y2BaFrequencyRangegydF4y2Ba属性:gydF4y2Ba

  • 双侧的gydF4y2Ba——逆短时间FFT计算了双边短时间FFT。使用的FFT长度等于输入帧长度。gydF4y2Ba

  • “单向的”gydF4y2Ba——对单边短时FFT计算单边逆短时FFT。如果输入帧长为奇数,则使用的FFT长度为(帧长−1)× 2。如果输入帧长为偶数,则使用的FFT长度为(帧长× 2)−1。gydF4y2Ba

使用gydF4y2Ba

语法gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

ygydF4y2Ba= istft (gydF4y2BaxgydF4y2Ba)gydF4y2Ba对输入应用逆短时间FFTgydF4y2BaxgydF4y2Ba,返回时域输出gydF4y2BaygydF4y2Ba.gydF4y2Ba

输入参数gydF4y2Ba

全部展开gydF4y2Ba

频域输入信号,用矢量或矩阵表示。如果输入是一个矩阵,对象将每一列视为一个独立的通道。FFT长度等于的行数gydF4y2BaxgydF4y2Ba.FFT长度,因此输入行数必须大于或等于窗口长度。gydF4y2Ba

数据类型:gydF4y2Ba单gydF4y2Ba|gydF4y2Ba双gydF4y2Ba
复数支持:万博1manbetxgydF4y2Ba是的gydF4y2Ba

输出参数gydF4y2Ba

全部展开gydF4y2Ba

逆短时间FFT输出,作为矢量或矩阵返回。输出帧长度(帧中的行数gydF4y2BaygydF4y2Ba)等于gydF4y2Ba王gydF4y2Ba−gydF4y2BaOLgydF4y2Ba,在那里gydF4y2Ba王gydF4y2Ba窗长和gydF4y2BaOLgydF4y2Ba是重叠长度。gydF4y2Ba

输出是复杂的,当输入时虚部很小gydF4y2BaxgydF4y2Ba共轭对称吗gydF4y2BaConjugateSymmetricInputgydF4y2Ba属性设置为gydF4y2Ba假gydF4y2Ba.输出的数据类型与输入信号的数据类型相匹配。gydF4y2Ba

数据类型:gydF4y2Ba单gydF4y2Ba|gydF4y2Ba双gydF4y2Ba
复数支持:万博1manbetxgydF4y2Ba是的gydF4y2Ba

对象的功能gydF4y2Ba

一步gydF4y2Ba 运行gydF4y2Ba系统对象gydF4y2Ba算法gydF4y2Ba
释放gydF4y2Ba 释放资源并允许更改gydF4y2Ba系统对象gydF4y2Ba属性值和输入特征gydF4y2Ba
重置gydF4y2Ba 重置的内部状态gydF4y2Ba系统对象gydF4y2Ba
克隆gydF4y2Ba 创建重复的gydF4y2Ba系统对象gydF4y2Ba
isLockedgydF4y2Ba 确定gydF4y2Ba系统对象gydF4y2Ba正在使用中gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

短时谱衰减是通过对噪声信号的短时谱施加时变衰减来实现的。衰减的增益是通过估计频谱中每个子带的噪声功率来确定的。该增益应用于噪声频谱时,可以衰减噪声功率大的子带,提升噪声功率小的子带。gydF4y2Ba

以下是执行短时光谱衰减的步骤:gydF4y2Ba

  1. 通过计算短时傅里叶变换(STFT)对有噪声的输入信号进行分析。gydF4y2Ba

  2. 将转换后信号的每个子带与小于1的实增益相乘。gydF4y2Ba

  3. 通过短时傅里叶反变换(ISTFT)合成去噪后的子带。重构后的信号就是去噪后的输入信号。gydF4y2Ba

使用gydF4y2Badsp。STFTgydF4y2Ba而且gydF4y2Badsp。ISTFTgydF4y2Ba对象分别计算短时傅里叶变换和短时傅里叶反变换。gydF4y2Ba

噪声输入信号gydF4y2Ba

输入为22,050 Hz采样的音频信号。的gydF4y2Badsp。AudioFileReadergydF4y2Ba对象从512个样本帧中读取该信号。音频信号被高斯白噪声破坏,其标准偏差为0.05。使用gydF4y2BaaudioDeviceWritergydF4y2Ba对象将有噪声的音频信号播放到计算机的音频设备。gydF4y2Ba

framength = 512;Afr = dsp。AudioFileReader (gydF4y2Ba“speech_dft.wav”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“SamplesPerFrame”gydF4y2Ba, FrameLength);adw = audioDeviceWriter(gydF4y2Ba“SampleRate”gydF4y2Ba, afr.SampleRate);noiseStd = 0.05;gydF4y2Ba而gydF4y2Ba~isDone(afr) cleanAudio = afr();noisyAudio = cleanAudio + noiseStd * randn(FrameLength,1);adw (noisyAudio);gydF4y2Ba结束gydF4y2Ba重置(误判率)gydF4y2Ba

初始化短时间傅里叶变换和逆短时间傅里叶变换对象gydF4y2Ba

初始化gydF4y2Badsp。STFTgydF4y2Ba而且gydF4y2Badsp。ISTFTgydF4y2Ba对象。设置窗口长度为输入帧长,跳长为16。重叠长度是窗口长度和跳长之差,gydF4y2BaOLgydF4y2Ba=gydF4y2Ba王gydF4y2Ba- - - - - -gydF4y2Ba霍奇金淋巴瘤gydF4y2Ba.设置FFT长度为1024。gydF4y2Ba

WindowLength = framength;HopLength = 16;numHopsPerFrame =帧长度/ 16;FFTLength = 1024;gydF4y2Ba

用于计算STFT和ISTFT的窗口是一个周期窗口gydF4y2Ba汉明gydF4y2Ba长度为512的窗口。的gydF4y2BaConjugateSymmetricInputgydF4y2Ba国旗gydF4y2BaistfgydF4y2Ba对象设置为gydF4y2Ba真正的gydF4y2Ba,表示输出gydF4y2BaistfgydF4y2Ba物体是共轭对称信号。gydF4y2Ba

win =汉明(WindowLength,gydF4y2Ba“周期”gydF4y2Ba);stf = dsp.STFT(win,WindowLength-HopLength,FFTLength);istf = dsp.ISTFT(win,WindowLength-HopLength,1,0);gydF4y2Ba

得到估计量gydF4y2Ba

下一步是定义增益估计器参数。将该增益应用于噪声频谱,对噪声功率大的子带进行衰减,对噪声功率小的子带进行提升。gydF4y2Ba

12月= 16;Alpha = 15;stftNorm = (sum(win.*win) / dec).^2;gydF4y2Ba

光谱衰减gydF4y2Ba

把音频信号传送给gydF4y2Ba月31gydF4y2Ba每次一跳长度。将估计的增益应用于转换后的信号。通过对各个频段进行傅里叶反变换,重建原始语音信号的去噪版本。将去噪后的音频信号播放到计算机的音频设备。gydF4y2Ba

而gydF4y2Ba~isDone(afr) cleanAudio = afr();noisyAudio = cleanAudio + noiseStd * randn(FrameLength,1);y = 0 (framength,1);gydF4y2Ba% y保存去噪后的音频帧gydF4y2Ba每次向stft输入一跳长度的音频gydF4y2Ba为gydF4y2Baindex = 1:numHopsPerFrame X = stf(noisyAudio((index-1)*HopLength+1:index*HopLength)));gydF4y2Ba%增益估计器gydF4y2BaZ = abs(X)。^2 / (noiseStd^2 * alpha) / stftNorm;Z(Z<=1) =1;Z = 1 - 1./Z;Z =符号(Z) .*根号(abs(Z));X = X .* z;gydF4y2Ba转换回时域gydF4y2Bay((index-1)*HopLength+1:index*HopLength) = istf(X);gydF4y2Ba结束gydF4y2Ba%收听去噪音频:gydF4y2Baadw (y);gydF4y2Ba结束gydF4y2Ba

完美重构是当输出的时候gydF4y2Badsp。ISTFTgydF4y2Ba将输入匹配为gydF4y2Badsp。STFTgydF4y2Ba.当分析窗口为gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba ,在hop-size上遵守常量重叠添加(COLA)属性gydF4y2BaRgydF4y2Ba.gydF4y2Ba

∑gydF4y2Ba 米gydF4y2Ba =gydF4y2Ba -gydF4y2Ba ∞gydF4y2Ba ∞gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ngydF4y2Ba -gydF4y2Ba 先生gydF4y2Ba )gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba ∀gydF4y2Ba ngydF4y2Ba ∈gydF4y2Ba ΖgydF4y2Ba (gydF4y2Ba ggydF4y2Ba ∈gydF4y2Ba 可乐gydF4y2Ba (gydF4y2Ba RgydF4y2Ba )gydF4y2Ba )gydF4y2Ba

函数的输出可以完美地重构信号gydF4y2Badsp。ISTFTgydF4y2Ba对象的输入匹配gydF4y2Badsp。STFTgydF4y2Ba对象。gydF4y2Ba

iscolagydF4y2Ba函数gydF4y2Ba

的gydF4y2BaiscolagydF4y2Ba函数检查指定的窗口和重叠是否满足COLA约束,以确保短时间傅里叶反变换(ISTFT)对未修改的光谱进行完美重建。该函数返回一个逻辑gydF4y2Ba真正的gydF4y2Ba如果输入参数的组合符合cola并且符合逻辑gydF4y2Ba假gydF4y2Ba如果不是。的gydF4y2Ba方法gydF4y2Ba函数的参数设置为gydF4y2Ba“ola”gydF4y2Ba或gydF4y2Ba“呼啦”gydF4y2Ba取决于反演方法是否使用加权重叠加法(WOLA)。gydF4y2Ba

检查是否gydF4y2Ba损害()gydF4y2Ba长度为120个样品,重叠长度为60个样品的窗口符合COLA标准。gydF4y2Ba

winLen = 120;overlapLen = 60;win = hann(winLen,gydF4y2Ba“周期”gydF4y2Ba);tf = iscola(win,overlapLen,gydF4y2Ba“ola”gydF4y2Ba)gydF4y2Ba
tf =gydF4y2Ba逻辑gydF4y2Ba1gydF4y2Ba

初始化gydF4y2Ba

初始化gydF4y2Badsp。STFTgydF4y2Ba而且gydF4y2Badsp。ISTFTgydF4y2Ba系统对象gydF4y2Ba损害gydF4y2Ba符合COLA要求的窗口。设置FFT长度等于窗口长度。gydF4y2Ba

frameLen = winLen-overlapLen;STF = dsp。STFT (gydF4y2Ba“窗口”gydF4y2Ba,赢了,gydF4y2Ba“OverlapLength”gydF4y2BaoverlapLen,gydF4y2Ba“FFTLength”gydF4y2Ba, winLen);Istf = dsp。ISTFT (gydF4y2Ba“窗口”gydF4y2Ba,赢了,gydF4y2Ba“OverlapLength”gydF4y2BaoverlapLen,gydF4y2Ba“WeightedOverlapAdd”gydF4y2Ba, 0);gydF4y2Ba

重建数据gydF4y2Ba

计算一个随机信号的STFT。设置输入信号的长度等于跳长(窗口长度-重叠长度)。由于窗口是COLA兼容的,这个未修改的频谱的ISTFT完美地重建了原始的时域信号。gydF4y2Ba

为了确认,比较输入,gydF4y2BaxgydF4y2Ba对于重构输出,gydF4y2BaygydF4y2Ba.由于对象引入的延迟,与输入相比,重构输出在时间上发生了移位。因此,为了进行比较,取重构输出之间的差的范数,gydF4y2BaygydF4y2Ba之前的输入,gydF4y2BaxprevgydF4y2Ba.范数非常小,表明输出信号是输入信号的完美重构版本。gydF4y2Ba

N = 0 (1100);Xprev = 0;gydF4y2Ba为gydF4y2Bai = 1:100 x = randn(frameLen,1);X = stf(X);y = istf(X);N (1,i) = norm(y-xprev);Xprev = x;gydF4y2Ba结束gydF4y2Bamax (abs (n))gydF4y2Ba
Ans = 1.6972 -13gydF4y2Ba

加权重叠加法的ISTFT (WOLA)gydF4y2Ba

在WOLA中,第二个窗口叫做合成窗口,gydF4y2Ba fgydF4y2Ba (gydF4y2Ba ngydF4y2Ba )gydF4y2Ba ,应用于IFFT操作之后和重叠添加之前。合成和分析窗口通常是相同的,通常通过取满足COLA的窗口的平方根来获得(从而确保完美的重建)。gydF4y2Ba

iscolagydF4y2Ba函数gydF4y2Ba

检查是否gydF4y2Ba√损害())gydF4y2Ba长度为120个样品,重叠长度为60个样品的窗口符合WOLA要求。设置gydF4y2Ba方法gydF4y2Ba的参数gydF4y2BaiscolagydF4y2Ba函数gydF4y2Ba“呼啦”gydF4y2Ba.的输出。gydF4y2BaiscolagydF4y2Ba函数为1,表示该窗口是WOLA兼容的。gydF4y2Ba

winWOLA =√(hann(winLen,gydF4y2Ba“周期”gydF4y2Ba));tfWOLA = iscola(winWOLA,overlapLen,gydF4y2Ba“呼啦”gydF4y2Ba)gydF4y2Ba
tfWOLA =gydF4y2Ba逻辑gydF4y2Ba1gydF4y2Ba

用WOLA重构数据gydF4y2Ba

释放gydF4y2Badsp。STFTgydF4y2Ba而且gydF4y2Badsp。ISTFTgydF4y2Ba系统对象,并将窗口设置为gydF4y2Ba√损害winLen,“周期性”))gydF4y2Ba窗口。使用加权重叠加法gydF4y2BaISTFTgydF4y2Ba侧面,设置gydF4y2Ba“WeightedOverlapAdd”gydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba.gydF4y2Ba

释放(31);释放(istf);底座。Window = winWOLA;istf。Window = winWOLA;istf。weighteoverlapadd = true;N = 0 (1100);Xprev = 0;gydF4y2Ba为gydF4y2Bai = 1:100 x = randn(frameLen,1);X = stf(X);y = istf(X);N (1,i) = norm(y-xprev);Xprev = x;gydF4y2Ba结束gydF4y2Bamax (abs (n))gydF4y2Ba
Ans = 4.6664e-15gydF4y2Ba

的gydF4y2Ba规范gydF4y2Ba输入信号与重构信号之间的差值非常小,说明信号已被完美地重构。gydF4y2Ba

更多关于gydF4y2Ba

全部展开gydF4y2Ba

算法gydF4y2Ba

下面是如何在没有加权重叠添加(WOLA)的情况下实现算法的草图:gydF4y2Ba

利用IFFT反演频域输入,然后进行叠加。注意,算法的每次运行都会生成gydF4y2BaRgydF4y2Ba新的输出时域样本,其中gydF4y2BaRgydF4y2Ba跳长。跳长定义为gydF4y2Ba王gydF4y2Ba−gydF4y2BaOLgydF4y2Ba,在那里gydF4y2Ba王gydF4y2Ba窗长和gydF4y2BaOLgydF4y2Ba是重叠长度。归一化阶段将输出乘以gydF4y2Ba RgydF4y2Ba /gydF4y2Ba 总和gydF4y2Ba (gydF4y2Ba wgydF4y2Ba 我gydF4y2Ba ngydF4y2Ba )gydF4y2Ba ,在那里gydF4y2Ba赢得gydF4y2Ba窗口向量是否在gydF4y2Ba窗口gydF4y2Ba财产。gydF4y2Ba

下面是如何使用加权重叠加法(WOLA)实现算法的草图:gydF4y2Ba

在WOLA中,第二个窗口(通常称为合成窗口)应用于IFFT操作之后和重叠添加之前。WOLA用于抑制STFT的非线性处理引起的帧边界不连续。详情请参见gydF4y2Ba更多关于gydF4y2Ba.gydF4y2Ba

下面是输入频率子带如何与IFFT倒置和重叠加在一起重建时域信号的说明。gydF4y2Ba

分析窗口(在STFT端)和合成窗口(在ISTFT端)通常是相同的。为了保证完美的重构,通常通过取满足恒定重叠添加(COLA)属性的窗口的平方根来获得窗口。有关COLA属性以及如何定义完全重构的详细信息,请参见gydF4y2Ba更多关于gydF4y2Ba在gydF4y2Badsp。STFTgydF4y2Ba页面。gydF4y2Ba

参考文献gydF4y2Ba

[1]艾伦,j.b.和L. R.拉宾纳。短时间傅里叶分析与综合的统一方法gydF4y2BaIEEE论文集,第65卷,gydF4y2Ba第1558-1564页,1977年11月。gydF4y2Ba

扩展功能gydF4y2Ba

版本历史gydF4y2Ba

在R2019a中引入gydF4y2Ba

另请参阅gydF4y2Ba

对象gydF4y2Ba

块gydF4y2Ba