以下是问题的背景:我有一个wav格式的DTMF信号,我必须识别它编码的数字序列。我必须在Matlab中使用快速傅里叶变换,这意味着我使用wavread
读取了wav文件,并识别出40ms静默或更多分离的每个数字。
到目前为止,这是我的代码:
[signal, fs] = wavread( 'C:\Temp\file.wav' ); % here, fs = 8000Hz
N = 512;
T = 1/fs;
L = length( signal )
samples = fs / 1000 * 40
windows = floor(L / samples)
t = (1:L)/fs;
figure(1), plot(t, signal);
以下是figure 1
的样子,即从wav读取的信号:
如何有效地将信号分割成碎片,以便我可以分别对10个碎片中的每个碎片进行FFT解码以解码相应的数字?
答案 0 :(得分:0)
我建议采用以下方法:
这个棘手的部分是在第3点获得一个强大的起始探测器。你选择的差异中的峰值必须具有一定的大小才能符合开始时的要求。如果您的音调强度不同,这可能会造成问题,但从时间信号的图像来看,这似乎不是问题。
此致
答案 1 :(得分:0)
这对我有用:
windowSize = 256;
nbWindows = floor(L / windowSize);
for i=1:nbWindows
coeffs = fft(signal((i-1)*windowSize+1:i*windowSize));
plot(abs(coeffs(1:N)));
waitforbuttonpress
end;
这样可以将窗口移动到输入信号的末尾