【问题标题】:How to build low pass filter without using built in function in matlab如何在不使用matlab内置函数的情况下构建低通滤波器
【发布时间】:2014-09-18 08:31:30
【问题描述】:

我有一个复杂的频率信号(我已从时域转换)。现在我想用截止频率值实现低通滤波器。有人可以建议我在不使用内置函数(滤波器)的情况下实现低通滤波器的最佳方法。

【问题讨论】:

  • 你为什么宁愿重新发明轮子而不是仅仅使用已有的东西?
  • 你知道如何定义低通滤波器的理论吗?如果遇到问题,请尝试并发布代码。
  • 我不确定低通滤波器的功能,我只是想知道它是如何工作的,并想在 JAVA 中重新创建它
  • 任何关于数字信号处理的书都会对你有所帮助。
  • MATLAB 可以为您生成 FIR 或 IIR 滤波器的系数 - 这是最难处理的部分 - 然后简单的部分是将这些系数插入几行 Java 代码以实现滤波器。

标签: matlab filtering lowpass-filter


【解决方案1】:

我建议你看看 Robert Bristow-Johnson 的 Audio-EQ-Cookbook,你可以构建很多过滤器。

让我们尝试按照方程式构建一个 LPF(低通滤波器),首先我构建一个信号测试(200、500、700 和 1000Hz 的四个正弦曲线),FFT 图:

现在应用方程来截止频率在 200hz 之后

我用来测试的代码:

%Low pass filter example from RBJ EQ-Cookbook
N = 4096;

%Test signal

Fs=44100;
f1  = 200;
f2  = 500;
f3  = 700;
f4  = 1000;

signal1 = 0.9*sin(2*pi*f1/Fs*(0:N+1));

signal2 = 0.9*sin(2*pi*f2/Fs*(0:N+1));

signal3 = 0.9*sin(2*pi*f3/Fs*(0:N+1));

signal4 = 0.9*sin(2*pi*f4/Fs*(0:N+1));


%mix all signals
signal= signal1 + signal2 + signal3  + signal4;

%test signal end

%%Start Filter

%F0 - cut off Frequency above ??
F0 = 200;
Q=1;
g = 80;

A = sqrt (10^(g/20));
w0 = 2 * pi * F0/Fs;
c= cos(w0);
s = sin(w0);

alpha = sin(w0)/(2*Q);


b0 = (1 - cos(w0))/2;
b1 = 1 - cos(w0);
b2 = (1- cos(w0))/2;
a0 = 1 + alpha;
a1 = -2*cos(w0);
a2 = 1 - alpha;

x1 = 0;
x2 = 0;
y1 = 0;
y2 = 0;

b0 = b0 / a0;

b1 = b1 / a0;

b2 = b2 / a0;

a1 = a1 / a0;

a2 = a2 / a0;


%y = filtred signal
for j=1:length(signal),

    y(j) = b0*signal(j) + b1*x1 + b2*x2 - a1*y1 - a2*y2;

    x2 = x1;
    x1 = signal(j);
    y2 = y1;
    y1 = y(j);

end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多