首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是高通和低通滤波器?

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

Stack Overflow用户
提问于 2008-08-30 00:55:26
回答 6查看 84.6K关注 0票数 26

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-08-30 00:58:00

维基百科:

  • High-pass filter
  • Low-pass filter
  • Band-pass filter

这些“高”、“低”和“频带”术语指的是频率。在高通模式下,你要试着去除低频。在低传球中,你试着去掉高。在带通中,您只允许保留一个连续的频率范围。

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

票数 20
EN

Stack Overflow用户

发布于 2008-09-17 12:07:00

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

代码语言:javascript
运行
复制
double[] signal = (some 1d signal);
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter
double[] result = new double[signal.Length + filter.Length + 1];

// Set result to zero:
for (int i=0; i < result.Length; i++) result[i] = 0;

// Do convolution:
for (int i=0; i < signal.Length; i++) 
  for (int j=0; j < filter.Length; j++)
    result[i+j] = result[i+j] + signal[i] * filter[j];

请注意,该示例非常简单。它不会执行范围检查,也不会正确处理边缘。使用的滤波器(box-car)是一个特别糟糕的低通滤波器,因为它会导致许多伪影(振铃)。阅读有关滤波器设计的内容。

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

代码语言:javascript
运行
复制
double[] signal = (some 1d signal);
// Do FFT:
double[] real;
double[] imag;
[real, imag] = fft(signal)

// Set the first quarter of the real part to zero to attenuate the low frequencies
for (int i=0; i < real.Length / 4; i++) 
  real[i] = 0;

// Do inverse FFT:
double[] highfrequencysignal = inversefft(real, imag);

同样,这是简化的,但您可以理解其中的含义。代码看起来并不像数学那样复杂。

票数 30
EN

Stack Overflow用户

发布于 2008-08-30 00:59:58

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档