lol中的解码qpsk

时间:2016-01-06 11:50:55

标签: matlab

我在信号()中有一个电话号码,我知道采样频率是8000hz。使用命令频谱图,如何确定电话号码?

1 个答案:

答案 0 :(得分:1)

您是否生成了测试信号以验证代码? 看看下面的Matlab代码。

% sampling frequency
fs = 8000;

% sample instants (100 ms)
t = 0 : 1/fs : 100e-3 - 1/fs;

% test frequencies
f1 = 941; %697;
f2 = 1209; %1633;

% generate test signal
tone1 = sin(2*pi*f1*t);
tone2 = sin(2*pi*f2*t);
sig = tone1 + tone2;

%window = ones(100, 1); % rectangular window
%window = hamming(100); % Hamming window
noverlap = 0;
nfft = 1024;

spectrogram(sig, window, noverlap, nfft, fs);

s = spectrogram(sig, window, noverlap, nfft, fs);

figure;
plot( abs( s ) )

并查看图2中生成的图。 您可以使用不同的测试音频率和窗口(例如矩形,汉明,汉宁,布莱克曼等)。您将看到光谱中色调峰值的锐度(关于光谱拖尾和泄漏)。

数字nfft确定在FFT中计算的系数数。这与图中的频率分辨率有关。

计算整个频谱图可能有点过分。正如您在绘制的频谱中看到的那样,再次生成测试音:DTMF由两个音调组成。因此,如果我是对的,频谱图的最大值也只会返回一个频率。

此外,计算整个频谱图可能是一种过度杀伤,因为它在计算上相当复杂。您可以计算给定DTMF频率的DFT分量(= 4行+4列= 8个频率进行评估)。