在Matlab中已知频率响应曲线如何设计滤波器

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:45:34
如题,我已经知道了一个频率响应,存在数组h中,怎样把这个设计成滤波器。
谢谢tyz20031212:) 不过我没有参考输出啊.现在问题解决了,解决方法是,我根据h中的每个响应点分别作带通滤波器,然后把这n个带通并联起来,最后把滤波的结果相加。很笨,但是我找不到其他方法了。

这个能不能用自适应滤波器来做?
原理是:
如果把通信信道看成是一个“黑箱”,仅知道“黑箱”的输入和输出;以一个自适应滤波器作为这个“黑箱”的模型,并且使滤波器具有与“黑箱”同样的输入和输出。自适应滤波器通过调制自身的参数,使滤波器的输出与“黑箱”的输出相“匹配”。这里的“匹配”通常指最小二乘意义上的匹配。这样,滤波器就模拟了通信信道对信号的传输行为。尽管自适应滤波器的结构和参数与真实的通信信道不一样,但是它们在输入、输出响应上保持高度一致。

你现在知道了频率响应,就有了验证模型的数据,所以是可以做做来的。
给你一个例子:
clear
clc
ee=0;
fs=800;
det=1/fs;
f1=100;
f2=200;
t=0:det:2-det;
x=randn(size(t))+cos(2*pi*f1*t)+cos(2*pi*f2*t);
上面是输入信号x
假设你输出是经过一个滤波器后的数据

[b,a]=butter(5,150*2/fs);
d=filter(b,a,x);

本题中你已经知道d,存放在数组h中

下面就可以设计自适应FIR滤波器
N=5;
delta=0.06;
M=length(x);
y=zeros(1,M);
h=zeros(1,N);
for n=N:M
x1=x(n:-1:n-N+1);
y(n)=h*x1';
e(n)=d(n)-y(n);
h=h+delta.*e(n).*x1;
end
X=abs(fft(x,2048));
Nx=length(x);
kx=0:800/Nx:(Nx/2-1)*(800/Nx);
D=abs(fft(d,2048));
Nd=length(D);
kd=0:800/Nd:(Nd/2-1)*(800/Nd);