提取从FFT的频率和指数图(DTMF检测)
20视图(30天)
显示旧的评论
这里我把fft的输入信号,从这里我想提取两个频率和indec x函数。我想实现DTMF检测。我曾经尝试过使用findpeaks但无法得到适当的答案。下面是我的代码的一部分。
Fs = 8000
x =罪(2 *π* 697 * .t) +罪(2 *π* 1209 * .t)
X1 = abs (fft (x))
w_range = -π:2 *π/长度(x): pi-1 /长度(x);
f_range = w_range * Fs / 2 /π;
情节(f_range、abs (fftshift (X1)))
接受的答案
dpb
2022年5月29日
> > Y = abs (fftshift (X1));
> > (pk, fpk] = findpeaks (Y, f_range)
pk =
1156.37 1132.03 1132.03 1156.37
fpk =
-1211.16 -698.04 694.71 1207.83
> >
你没有给
findpeaks
使用频率向量返回频率;它返回索引向量否则;这就是所有了。
与2-sded谱你没有通过它转移/ zero-centered向量但未移位。
以上给最近的频率的频率;注意你在直流本不对称;正面和负面的frequenies并不完全相同的数字,尽管迹象。
我使用一个偶数的和类似的样品
L = 2048;
Fs = 1/0.000125;
t = (0: l - 1) / Fs;
x =罪(2 *π* 697 * t) +罪(2 *π* 1209 * t);
P2 = abs (fft (x)) / L;
P1, P2 (1: L / 2 + 1);
P1 (2: end-1) = 2 * P1 (2: end-1);
f = f * [0: (L / 2)] / L;
情节(f, P1)
xlim (2000 [0])
[pk, fpk] = findpeaks (P1, f)
返回
> > [pk, fpk] = findpeaks (P1, f)
pk =
0.72 - 0.64
fpk =
695.31 - 1210.94
> >
注:峰值振幅不统一和箱子还是不正是因为频率分辨率不匹配,这样本峰匹配实际的频率完全。因此,总功率分布在包含峰值的垃圾箱,必须得到总集成。
增加样本时间或补零插入细频率电网将让你频率装箱,接近输入频率如果这些是已知的和固定。
真实信号与噪声污染也会造成一些传播的能量,平均的信号跨可以减少其随机噪声的端效应就会取消。
0评论
答案(1)
沃斯
2022年5月29日
第二个输出
findpeaks
峰的位置,是指数峰值出现在输入向量。如果你想知道那里的山峰在频率方面,你必须指数向量的频率
f_range
使用相同的指标。
(另外,我怀疑你想
findpeaks
的
abs (fftshift (X1))
什么是策划,而不是
findpeaks
的
X1
本身)。
t = 0:0.000125:0.3;
Fs = 8000;
x =罪(2 *π* 697 * t) +罪(2 *π* 1209 * t);
X1 = abs (fft (x));
w_range = -π:2 *π/长度(x): pi-1 /长度(x);
f_range = w_range * Fs / 2 /π;
情节(f_range、abs (fftshift (X1)))
% (p,我]= findpeaks (X1)
[p,我]= findpeaks (abs (fftshift (X1)))
f_range(我)% 3日和4日值以下是695年和1208年,接近预期的(1 2是负的,大概)