提取从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)))
2的评论
默罕默德Awab
默罕默德Awab 2022年5月29日
t向量是
t = 0:0.000125:0.3
也”。基本上与t是一个错误,我在我的代码使用appdesigner实现gui因此t向量定义一个属性,因此我们使用app.t使用t的值。
现在这是我的代码(正常工作,我检查)
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) %我相信,我不是正确使用这个命令之前,或者可能有其他步骤。
我的代码生成如下所示的输出。
还我和变量的值
但价值 “我” 应该是697年和1207年(我相信,不确定使用findpeaks第一次,甚至在阅读文档仍然停留在这个问题上)

登录置评。

接受的答案

dpb
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
> >
注:峰值振幅不统一和箱子还是不正是因为频率分辨率不匹配,这样本峰匹配实际的频率完全。因此,总功率分布在包含峰值的垃圾箱,必须得到总集成。
增加样本时间或补零插入细频率电网将让你频率装箱,接近输入频率如果这些是已知的和固定。
真实信号与噪声污染也会造成一些传播的能量,平均的信号跨可以减少其随机噪声的端效应就会取消。

答案(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)))
p = 1×4
1.0 e + 03 * 1.1564 1.1320 1.1320 1.1564
我= 1×4
838 992 1410 1564
f_range(我)% 3日和4日值以下是695年和1208年,接近预期的(1 2是负的,大概)
ans = 1×4
1.0 e + 03 * -1.2112 -0.6980 0.6947 1.2078

标签

下载188bet金宝搏


释放

R2021a

社区寻宝

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

开始狩猎!