Algorithm 什么是高通和低通滤波器?

Algorithm 什么是高通和低通滤波器?,algorithm,graphics,audio,photoshop,signal-processing,Algorithm,Graphics,Audio,Photoshop,Signal Processing,图形和音频编辑和处理软件通常包含称为“高通滤波器”和“低通滤波器”的功能。这些功能到底是做什么的?实现它们的算法是什么?维基百科: 这些“高”、“低”和“频带”术语指的是频率。在高通中,您尝试去除低频。在低通中,尝试删除高通。在带通中,您只允许保留连续的频率范围 选择截止频率取决于您的应用。对这些滤波器进行编码既可以通过模拟RC电路来完成,也可以通过对基于时间的数据进行傅里叶变换来完成。有关代码示例,请参阅wikipedia文章。它们通常是倾向于传递部分模拟信号的电路。高通传输更多的高

图形和音频编辑和处理软件通常包含称为“高通滤波器”和“低通滤波器”的功能。这些功能到底是做什么的?实现它们的算法是什么?

维基百科:

这些“高”、“低”和“频带”术语指的是频率。在高通中,您尝试去除低频。在低通中,尝试删除高通。在带通中,您只允许保留连续的频率范围


选择截止频率取决于您的应用。对这些滤波器进行编码既可以通过模拟RC电路来完成,也可以通过对基于时间的数据进行傅里叶变换来完成。有关代码示例,请参阅wikipedia文章。

它们通常是倾向于传递部分模拟信号的电路。高通传输更多的高频部分,低通传输更多的低频部分


它们可以用软件模拟。例如,移动平均值可以用作低通滤波器,移动平均值与其输入之间的差值可以用作高通滤波器。

高通滤波器允许高频(详细/本地信息)通过。

低通滤波器允许低频(粗略/粗略/全局信息)通过。

以下是如何使用卷积实现低通滤波器:

double[]信号=(一些1d信号);
双[]过滤器=[0.25 0.25 0.25 0.25];//箱式汽车过滤器
double[]结果=新的double[signal.Length+filter.Length+1];
//将结果设置为零:
对于(inti=0;i
请注意,该示例极其简化。它不执行范围检查,也不正确处理边。所用的滤波器(盒式车)是一个特别差的低通滤波器,因为它会引起很多伪影(响铃)。阅读过滤器设计

您还可以在频域中实现滤波器。以下是如何使用FFT实现高通滤波器:

double[]信号=(一些1d信号);
//执行FFT:
双[]实;
双[]imag;
[real,imag]=fft(信号)
//将实部的第一个四分之一设置为零以衰减低频
对于(int i=0;i

同样,这是简化的,但你得到的想法。代码看起来不像数学那么复杂。

过滤描述了以对数据中不同频率应用不同衰减级别的方式处理数据的行为

高通滤波器将对高频应用最小衰减(即保持电平不变),但对低频应用最大衰减

低通滤波器是相反的-它不会通过对高频应用衰减而对低频应用衰减

使用了许多不同的过滤算法。最简单的两种可能是有限冲激响应滤波器(又称FIR滤波器)和无限冲激响应滤波器(又称IIR滤波器)

FIR滤波器的工作原理是保持一系列样本,并将每个样本乘以一个固定系数(基于序列中的位置)。每个乘法的结果都是累积的,并且是该样本的输出。这被称为乘法累加-在专用DSP硬件中,有一个特定的MAC指令用于执行此操作

当采集下一个样本时,会将其添加到系列的开头,删除系列中最早的样本,并重复该过程

滤波器的行为通过选择滤波器系数而固定


图像处理软件通常提供的最简单的滤波器之一是平均滤波器。这可以通过将所有滤波器系数设置为相同的值来实现FIR滤波器。

< P>这里是C++中的低通滤波器的简单示例,该信号一次处理一个信号:

float-lopass(浮点输入,浮点切断){
低通输出=输出[0]+(截止*(输入输出[0]);
输出[0]=低通输出;
返回(低通输出);
}
这里几乎是一样的,只是它是高通的:

float hipass(浮点输入,浮点切断){
hi_pass_output=输入-(输出[0]+截止*(输入输出[0]);
输出[0]=高通量输出;
返回(高通量输出);
}

拥有代码示例非常酷。为什么一种情况是卷积,另一种情况是FFT?@dfrankow没有特别的原因。只是为了展示它在不同领域中的外观。更新了文本以反映这一点。谢谢。你确定你的答案的第一部分是正确的吗?你使用矩形函数在时域中应用卷积吗?我认为时域中的低通滤波器需要sinc函数的卷积?boxcar滤波器(矩形函数)确实是一个非常糟糕的低通滤波器。sinc过滤器更好。我正在试用你们的代码,但我不明白“截止”代表什么。它不是以赫兹为单位的截止频率,是吗?答案几乎是十年前的事了,但是我仍然相信计算中应该考虑的不是“输出[0]”,而是之前过滤的样本值。相关: