基于切比雪夫逼近法的滤波器的matlab设计与实现
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于切比雪夫逼近法的滤波器的matlab设计与实现相关的知识,希望对你有一定的参考价值。
目录
一、理论基础
从FIR数字滤波器的系统函数可以看出,极点都是在Z平面的原点,而零点的分布是任意的。不同的分布对应不同的频率响应,最优设计实际上就是调节这些零点的分布,使得实际滤波器的频率响应和理想滤波器的频率响应之间的最大绝对误差最小。
切比雪夫逼近法正是利用这种思想进行FIR数字滤波器设计的,对H作最佳逼近,因而获得了较好的通带和阻带性能,并能准确地制定通带和阻带的边缘,是一种更有效的设计方法。
前面已经介绍了切比雪夫逼近法的基本理论过程,这里将使用MATLAB进行FIR滤波器的设计与仿真。整个滤波器的设计步骤如下:
最后按如下的式子:
二、核心程序
clc;
clear;
close all;
select = 2;%1:进行普通信号测试;2:音乐信号的测试
if select == 1
%普通信号测试
source = func_test_signal();
figure;
subplot(121);plot(source):title('原始音乐信号');
f =[0 0.25 0.5 1]; %给定频率轴分点;
a =[1 1 0 0]; %给定在这些频率分点上理想的幅频响应;
weigh =[1 10]; %给定在这些频率分点上的加权;
y=fftshift(abs(fft(source)));
subplot(122);plot(y);title('原始信号的频谱');
figure;
b=remez(10,f,a,weigh);%设计出切比雪夫最佳逼近滤波器;
[h,w]=freqz(b,1,512,1);%数字滤波器的频率响应;
h=abs(h);%绝对值;
h=20*log10(h);
subplot(121)%改置定位坐标系;
stem(b,'.');
grid;
title('切比雪夫逼近滤波器的抽样值');
subplot(122);
plot(w,h);%生成参数方程的图形;
grid;
title('切比雪夫逼近滤波器幅频特性(dB)');
source2=filter(b,1,source); %滤波正常实现
figure;
subplot(121);plot(source2):title('通过切比雪夫逼近法滤波后的音乐信号');
y2=fftshift(abs(fft(source2)));
subplot(122);plot(y2);title('滤波后的信号频谱');
end
if select == 2
%音乐信号测试
[source,Fs,nbits] = wavread('source.wav');
figure;
plot(source):title('原始音乐信号');
f =[0 0.4 0.6 1]; %给定频率轴分点;
a =[1 1 0 0]; %给定在这些频率分点上理想的幅频响应;
weigh =[1 10]; %给定在这些频率分点上的加权;
y=fftshift(abs(fft(source)));
figure;
plot(y):title('原始信号的频谱');
sound(source,Fs);
figure;
b=remez(32,f,a,weigh);%设计出切比雪夫最佳逼近滤波器;
[h,w]=freqz(b,1,512,1);%数字滤波器的频率响应;
h=abs(h);%绝对值;
h=20*log10(h);
subplot(121)%改置定位坐标系;
stem(b,'.');
grid;
title('切比雪夫逼近滤波器的抽样值');
subplot(122);
plot(w,h);%生成参数方程的图形;
grid;
title('切比雪夫逼近滤波器幅频特性(dB)');
source2=filter(b,1,source); %滤波正常实现
figure;
plot(source2);title('通过切比雪夫逼近法滤波后的音乐信号');
y2=fftshift(abs(fft(source2)));
figure;
plot(y2);title('滤波后的信号频谱');
sound(source2,Fs);
end
三、仿真测试结果
测试信号为:
针对真个信号的特点,设计如下的切比雪夫逼近滤波器。
滤波之后,可以看到如下的效果:
通过上述仿真可以看到,设计的基于切比雪夫逼近法的滤波器具有良好的滤波效果。下面通过适当修改滤波器的参数,对一组音乐信号进行滤波。
这个就是remez算法的基本过程。
在MATLAB中通过如下代码实现:
%给定频率轴分点;
f =[0 0.4 0.6 1];
%给定在这些频率分点上理想的幅频响应;
a =[1 1 0 0];
%给定在这些频率分点上的加权;
weigh =[1 10];
%设计出切比雪夫最佳逼近滤波器;
b=remez(32,f,a,weigh);
运行MATLAB,可以得到通过切比雪夫逼近法得到的滤波器的幅频特性:
图2.8 切比雪夫逼近滤波器的抽样值和幅频特性
从上面的仿真可以看到,基于切比雪夫逼近法实现得到的滤波器具有跟好的幅频特性。下面我们将给予切比雪夫逼近法滤波器进行测试,对实际中带噪声的信息进行滤波处理。
A25-02
以上是关于基于切比雪夫逼近法的滤波器的matlab设计与实现的主要内容,如果未能解决你的问题,请参考以下文章