STFT和ISTFT问题。我得到相同的噪声信号。(短时傅里叶变换)

10视图(30天)
亲爱的朋友们,
我有一个项目,是这样的:我需要一个信号(一个wav文件),然后做STFT(短时傅里叶变换)的信号,然后进行逆STFT,回到相同的信号,我放在第一位。
因为某些原因我得到相同的信号,但噪声。我也notticed,我在发出召唤的信号小于信号最后我得到一些点。
这是代码的STFT和ISTFT:
STFT
函数Xtwz = stft (x, M R N, w)
地板nframes =(1 +(长度(x) - m) / R);
Xtwz = 0 (N, nframes);%预先分配STFT输出数组
发送葡开= 0;
zp = 0 (n - m, 1);%补零(插入)
m = 1: nframes
xt = x(发送葡开+ 1:发送葡开+ M);%提取帧的输入数据
xtw = w。* xt;%对当前帧应用窗口
如果(n - m) ~ = 0
xtwz = [zp (1: ((n - m) / 2));xtw;zp (((n - m) / 2 + 1): (n - m)));
其他的
xtwz = xtw;
结束
Xtwz (:, m) = fft (Xtwz);% STFT的框架
发送葡开=发送葡开+ R;%预付in-pointer hop-size R
结束
%保持一半的频谱
如果快速眼动(N, 2) = = 0
Xtwz = Xtwz (1: (N / 2 + 1):);
其他的
Xtwz = Xtwz (1: (N / 2 + 1/2):);
结束
ISTFT
函数g = istft_til (d R N, M)
s =大小(d);
nframes = s (2);
xlen = M + (nframes-1) * R;
g = 0 (1、xlen);
我= 0;
b = 1: nframes
英国《金融时报》= d (:, b) ';
英尺=(英国《金融时报》,连词(英国《金融时报》(N / 2: 1:2)));
px =实际(传输线(英尺));
我= (b - 1) * R;
= px ((N - M) / 2 + 1: (N + M) / 2);
g ((i + 1): (i + M)) = g ((i + 1): (i + M)) +一个;
结束
结束
有人有一个想法为什么会这样,或者我可以修复它吗? ? ?
提前谢谢。

答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!