从利用Matlab一个wav文件拆分DTMF信号(Splitting a DTMF signal f

2019-07-18 14:45发布

这是问题的情况下:我有一个DTMF​​信号在wav格式,我必须确定它已编码的数字序列。 我必须这样做,利用Matlab软件快速傅立叶变换,这意味着我用读wav文件wavread ,并确定各由40毫秒的沉默或多个分隔号。

这是我到目前为止的代码:

[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读取的信号:

如何才能有效地我的信号分割成块,这样我可以再做一个FFT在每个10件seperately解码相应的号码?

Answer 1:

我会建议使用以下方法:

  • 查找时域信号的包络(见希尔伯特变换)。
  • 平滑信封一点。
  • 就拿diff和找到峰值获得音调的起始点。
  • 使用到的突起挑选镜架和使用FFT找到谱。
  • 查找每个光谱的最大的索引,并将其转换为频率。

在这个棘手的部分是获得一个强大的发病探测器在点3.峰你选择的不同,必须是具有一定规模的,以便有资格作为开始。 如果你的声调的不同强度,这可能带来问题,但是从你的时间信号的图像似乎并不像一个问题。

问候



Answer 2:

这为我工作:

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;

通过这种方式,可以将窗口移位,直到输入信号的结束



文章来源: Splitting a DTMF signal from a wav file using Matlab