java - 数字滤波器,Java 数学,

标签 java math signal-processing

我需要您的帮助,感谢您阅读我的问题! 我目前正在编写一个将使用 Direket Form 2 Transposed Filter 的 java Programm。我知道 Matlab 中的函数过滤器可以做到这一点,但我必须使用 Java。 那么有没有人知道你要实现这个 Direkt Form 2 Transposed ,这个数学函数:

y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

在任何编程语言中?希望它所需要的只是指向wrigth方向的一点,所以我可以弄清楚!也许有一个 C Lib 实现了一些 matlab 函数,任何东西。

非常感谢您的宝贵时间

你的 Elektro

跟进:

我尝试了几天来了解您的功能,但我做不到。

这是来自 Matlab 的函数:filter

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/filter.html&http://www.google.de/search?hl=de&q=filter+matlab&btnG=Google-Suche&meta=&aq=f&oq=

我所知道的是我在 matlab 中使用这样的函数:

newArray = filter(1,LPC_Faktor,OldArray)

我所要做的就是实现过滤器功能。

那你能再帮忙吗?

谢谢

电力

最佳答案

无论您使用什么语言,直接形式 II 转置结构都非常简单。

例如,在 C 中,它可能是这样的:

float myFilter( float u)
{
  static float[nb] x = {0,0,0,...,0);  // initialize x
  static float[na] y = {0,0,0,...,0);  // initialize y
  static float b1 = ....;  // put b(1) here
  static float[nb] b = {...,...,...,...,...}; // put b(2) to b(nb+1) here
  static float[na] a = {...,...,...,...,...}; // put a(2) to a(na+1) values here

  // initialization
  float sum = 0;
  int i=0;

  // compute the value
  for(i=0;i<nb;i++)
    sum += b[i]*x[i];
  for(i=0;i<na;i++)
    sum -= a[i]*y[i];
  sum += b1*u;

  // prepare the values for the next time
  for(i=1;i<nb;i++)
    x[i] = x[i-1];
  x[0] = u;
  for(i=1;i<na;i++)
    y[i] = y[i-1];
  y[0] = sum;

  // return the value
  return sum;
}

我没有测试代码,但它是这样的。

直接形式 II 转置是实现 FIR 滤波器的最简单形式(在数值上,特别是在定点上,它不是最好的,但它是需要较少操作的形式)。

当然,可以有更好的实现(例如循环数组)。如果需要,我也可以提供。

编辑:我回答得太快了。你提供的算法

y(n) = b(1)x(n) + b(2)x(n-1) + ... + b(nb+1)x(n-nb) - a(2)y(n-1) - ... - a(na+1)*y(n-na)

不是直接形式II,而是直接形式I。它需要存储na+nb值(n是你过滤器的顺序),而直接形式II只需要max(na,nb)。 用于 Direct Form II 的算法是

e(n) = u(n) - a(1)*e(n-1) - a(2)*e(n-2) - ... - a(na)*e(n-na)
y(n) = b(1)*e(n-1) + b(2)*e(n-2) + ... + b(nb)*e(n-nb)

请告诉我您是否需要此表格。

关于java - 数字滤波器,Java 数学,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1076982/

相关文章:

java - Logback 不写入第 3 方日志服务

java - 在 JNLP 文件中使用 JAR 参数

java - 实现类似多态继承的行为

r - R 中的 for 循环会跳过一些迭代

javascript - Math.floor VS Math.trunc JavaScript

java - Eclipse 在项目构建路径中忘记了 Java 库

math - 如何从前两个数据包推断新的四元数旋转?

c++ - 将 std::vector 对象用于 DSP 应用程序会不会效率低下?

javascript - 网络音频API : Dividing two AudioNodes' outputs

matlab - 点数如何改变 MATLAB 中的 FFT