目录
概述
本文主要介绍差分信号的概念,根据差分信号的特性,实现一个简单的算法,处理差分信号的波形数据,并将处理后的数据重新拟合成为一个新的波形图。笔者使用python代码实现其处理数据的算法。
1 差分信号
1.1 差分信号的概念
差分信号是指将两个信号进行差分运算得到的结果信号。差分运算可以用来衡量两个信号之间的差异或变化。在信号处理中,差分信号常常用于滤波、降噪和特征提取等应用中。
差分信号的计算方法可以是简单的相减运算,即将两个信号对应的样本值相减得到新的信号样本值。差分信号的结果可以是正数、负数或零,分别表示对应样本值的增加、减少或保持不变。
差分信号可以在时间域或频域中进行分析。在时间域中,差分信号的幅度和形状可以用来描述原始信号的变化情况。在频域中,差分信号可以通过频谱分析来分析信号的频率成分和功率分布等特征。
差分信号在许多领域中都有广泛的应用,例如音频处理、图像处理、通信系统等。通过提取差分信号,可以将信号中的噪音或冗余信息滤除,从而提高信号的质量和可靠性。另外,差分信号也可以用于特征提取和模式识别等任务中,以便更好地理解和分析信号的特性和变化趋势。
1.2 差分信号波形
差模信号是指在系统中传输的两个信号之间的差异信号。它通常由一个正极性信号和一个负极性信号组成,通过将两个信号进行相减得到。
在电子通信中,差模信号可以用于传输数字信号,其中正极性信号代表逻辑1,负极性信号代表逻辑0。通过使用差模信号传输,可以减少信号传输中的共模干扰,提高信号的抗干扰能力和传输质量。
差模信号也常用于音频信号处理中,例如在立体声系统中,左声道信号和右声道信号就是通过差模信号来传输的。通过对这两个信号进行差分,可以提取出左声道和右声道的音频信息。
差模信号的波形
2 差分信号处理
2.1 原理分析
通过波形可得,两路信号的相位相差180°,两个信号到x轴的幅值的绝对值是相等的,可以采用同一个位置的两个幅值相减,然后去绝对值,就可以得到半波形的图像。
2.2 算法实现
分析两路差分信号的特点,实现幅值计算方法,设计思路如下:
1)确定交叉点位置的点,采集多个点进行连续计算
2)假设在交叉点位置有两个点:
lin1: (x1, y11 ) (x2, y21)
lin2:(x1, y12 ) (x2, y22)
这两个点的特点为:
y11 > y12
y21 > y22
3 代码实现
函数功能介绍
1)check_zeroPoint
功能: 判断交叉点的位置
2)calculate_point
功能: 幅值运算
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2023/7/1 13:05
# @Author : alan.tang
# @File : utils library
# ---------------------
def check_zeroPoint(column_2, column_5, index, magiude_mid):
# 写一组数据
val_p10 = column_2[index]
val_p11 = column_5[index]
val_p20 = column_2[index + 1]
val_p21 = column_5[index + 1]
mid_val = magiude_mid
if (val_p10 > val_p20 and val_p11 < val_p21) or (val_p10 < val_p20 and val_p11 > val_p21):
if abs(val_p10 - mid_val) < 500 and abs(val_p11 - mid_val) < 500 and \
abs(val_p20 - mid_val) < 500 and abs(val_p21 - mid_val) < 500:
return True
return False
def calculate_point(column_2, column_5, index, channel_para, para_index, delta_0_list, total_zero):
delta = abs(column_2[index] - column_5[index])
_name = channel_para[para_index][0]
mid_val = channel_para[para_index][1]
_zero_point = channel_para[para_index][2]
# 写一组数据
if delta < 200:
_bl_res = check_zeroPoint(column_2, column_5, index, mid_val)
if _bl_res:
delta_0_list.append(delta)
else:
if len(delta_0_list) > 3:
total_zero[para_index] += 1
print("%s 存储可能交叉点的点 %d: " % (_name, total_zero[para_index],))
for v in delta_0_list:
print("%d" % (v,), end=" \n")
delta_0_list.clear()
if para_index == 0:
if total_zero[para_index] == 0:
delta = abs(column_2[index] + column_5[index])/2
elif total_zero[para_index] == _zero_point:
# 宽波形
delta = abs(column_2[index] + column_5[index])/2
else:
delta = delta / 2
else:
if total_zero[para_index] != _zero_point:
delta = delta / 2
else:
# 宽波形
delta = abs(column_2[index] + column_5[index])/2
return delta
4 测试
对如下波形进行采样:
采样完成后,将数据保存至。csv文件中,对所有的数据进行差模计算,然后将生成的数据拟合成波形,每个半波信号相差180°