双音多频技术介绍及应用——识别电话号码

本文介绍了双音多频(DTMF)技术的原理,如何利用该技术识别电话号码。通过音频信号处理,包括切割、FFT变换和信号处理,识别每个拨号音频的两个波峰对应频率,实现拨号识别。提供了源码和音频文件供下载验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双音多频技术

作者:郑不挫。

原理

电话拨号有两种,脉冲和音频,所谓音频也称双音多频(DTMF)信号的拨号方式,双音多频既是电话拨号时每按一个键,有两个音频频率叠加成一个双音频信号,十二个按键由八个音频频率区分。如下图
在这里插入图片描述

应用

知道了双音多频技术的原理,下面讲讲如何通过双音多频技术来识别号码。采用的音频的采样频率为1000Hz,随意录制一段拨号音频,其时域波形如下:
在这里插入图片描述
为了进行号码识别,需要将音频信号进行切割,这里可以通过幅值来进行切割,比较简单就不说了。切割完成后,就得到了每个拨号的音频,然后对每个拨号进行FFT变换并进行一定的信号处理,就可以得到每个拨号音频的信号。
在这里插入图片描述
由于音频的频率为1000Hz,故双音多频表格中对应的频率也要做相应变化
如下表:

在这里插入图片描述

下面就是识别每个拨号音频的频谱图上的两个波峰对应的频率即可完成拨号识别。
在这里插入图片描述

源码

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 12 22:57:08 2020

@author: ZhengBuCuo
"""

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载数据并进行预处理
def Load_data(filepath):
    # 使用read_csv方法读取数据
    input_data = pd.read_csv(filepath, sep = ' ', header=None,engine = 'python' )
    input_data = np.array(input_data)
    # 对数据进行预处理,便于频域变换
    Pretreated_data = input_data[:,1]-3232
    plt.plot(input_data[:,0],Pretreated_data)
    plt.title('Time Domain')
    plt.xlabel('Time')
    plt.show()
    return Pretreated_data

           

# 将时域信号转至频域
def TransformTofrequencydomain(data):
    sample_rate = 1000  # 采样率
    nframes = len(data) # 信号点数
    df=sample_rate/(nframes-1)
    freq=[df*n for n in range(0,nframes)]   # 信号频率
    transformed=np.fft.fft(data) # 对信号进行傅里叶变换
    d = int(len(transformed)/2) # 根据对称性,取一般
    while freq[d]>500: # 去除频率大于500的无效信息
        d-=10
    freq=freq[:d]
    transformed=transformed[:d]
    for i,data in enumerate(transformed): # 取绝对值
        transformed[i]=abs(data)
    plt.plot(freq,transformed)
    plt.title('Frequency Domain')
    plt.xlabel('Frequency')
    plt.show()
    return freq , transformed

# 找频域图中低频和高频的两个波峰
def find_peaks(freq,fft_result):
    local_peaks=[]
    for i in np.arange(1,len(fft_result)-20)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值