用matlab设计滤波器 用matlab设计一个简单的滤波器

作者&投稿:宣航 (若有异议请与网页底部的电邮联系)
这个信号的频率分量分别为30、150和600Hz,因此可分别设计一个低通、带通和高通的滤波器来提取。以FIR滤波器为例,程序如下:

clear;fs=2000;t=(1:1000)/fs;
x=10*cos(2*pi*30*t)+cos(2*pi*150*t)+5*cos(2*pi*600*t);
L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);
figure(1);subplot(2,1,1);plot(t,x);
grid on;title('滤波前信号x');xlabel('时间/s');% 原始信号
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw));% 查看信号频谱
grid on;title('滤波前信号频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');

%% x_1=10*cos(2*pi*30*t)
Ap=1;As=60;% 定义通带及阻带衰减
dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量
mags=[1,0];% 低通
fcuts=[60,100];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数
hh1=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_1=filter(hh1,1,x);% 滤波
x_1(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_1);N=2^(nextpow2(L));Hw_1=fft(x_1,N);
figure(2);subplot(2,1,1);plot(t(1:L),x_1);
grid on;title('x_1=10*cos(2*pi*30*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_1));% 查看信号频谱
grid on;title('滤波后信号x_1频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');

%% x_2=cos(2*pi*150*t)
Ap=1;As=60;% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量
mags=[0,1,0];% 带通
fcuts=[80,120,180,220];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_2=filter(hh2,1,x);% 滤波
x_2(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_2);N=2^(nextpow2(L));Hw_2=fft(x_2,N);
figure(3);subplot(2,1,1);plot(t(1:L),x_2);
grid on;title('x_2=cos(2*pi*150*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_2));% 查看信号频谱
grid on;title('滤波后信号x_2频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');

%% x_3=5*cos(2*pi*600*t)
Ap=1;As=60;% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1)];% 计算偏移量
mags=[0,1];% 高通
fcuts=[500,550];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_3=filter(hh2,1,x);% 滤波
x_3(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_3);N=2^(nextpow2(L));Hw_3=fft(x_3,N);
figure(4);subplot(2,1,1);plot(t(1:L),x_3);
grid on;title('x_3=5*cos(2*pi*600*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_3));% 查看信号频谱
grid on;title('滤波后信号x_3频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');

用matlab设计一个滤波器~

你自己整合吧,我没时间帮你整合,我给你提供一些程序:
绝对正确的代码:程序1:
fs=22050; %语音信号采样频率为22050
x1=wavread('Windows Critical Stop.wav'); %读取语音信号的数据,赋给变量x1
sound(x1,22050); %播放语音信号
y1=fft(x1,1024); %对信号做1024点FFT变换
f=fs*(0:511)/1024;
figure(1)
plot(x1) %做原始语音信号的时域图形
title('原始语音信号');
xlabel('time n');
ylabel('fuzhi n');

figure(2)
freqz(x1) %绘制原始语音信号的频率响应图
title('频率响应图')

figure(3)
subplot(2,1,1);
plot(abs(y1(1:512))) %做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y1(1:512)));
title('原始语音信号频谱')
xlabel('Hz');
ylabel('fuzhi');

程序2:
fs=22050; %语音信号采样频率为22050
x1=wavread('Windows Critical Stop.wav'); %读取语音信号的数据,赋给变量x1
t=0:1/22050:(size(x1)-1)/22050;
y1=fft(x1,1024); %对信号做1024点FFT变换
f=fs*(0:511)/1024;
x2=randn(1,length(x1)); %产生一与x长度一致的随机信号
sound(x2,22050);
figure(1)
plot(x2) %做原始语音信号的时域图形
title('高斯随机噪声');
xlabel('time n');
ylabel('fuzhi n');


randn('state',0);
m=randn(size(x1));
x2=0.1*m+x1;

sound(x2,22050);%播放加噪声后的语音信号
y2=fft(x2,1024);
figure(2)
plot(t,x2)
title('加噪后的语音信号');
xlabel('time n');
ylabel('fuzhi n');
figure(3)
subplot(2,1,1);
plot(f,abs(y2(1:512)));
title('原始语音信号频谱');
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2);
plot(f,abs(y2(1:512)));
title('加噪后的语音信号频谱');
xlabel('Hz');
ylabel('fuzhi');

根据以上代码,你可以修改下面有错误的代码
程序3:双线性变换法设计Butterworth滤波器

fs=22050;
x1=wavread('h:\课程设计2\shuzi.wav');
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
wp=0.25*pi;
ws=0.3*pi;
Rp=1;
Rs=15;
Fs=22050;
Ts=1/Fs;
wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标
ws1=2/Ts*tan(ws/2);
[N,Wn]=buttord(wp1,ws1,Rp,Rs,'s'); %选择滤波器的最小阶数
[Z,P,K]=buttap(N); %创建butterworth模拟滤波器
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2lp(Bap,Aap,Wn);
[bz,az]=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换
[H,W]=freqz(bz,az); %绘制频率响应曲线
figure(1)
plot(W*Fs/(2*pi),abs(H))
grid
xlabel('频率/Hz')
ylabel('频率响应幅度')
title('Butterworth')
f1=filter(bz,az,x2);
figure(2)
subplot(2,1,1)
plot(t,x2) %画出滤波前的时域图
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f1); %画出滤波后的时域图
title('滤波后的时域波形');
sound(f1,22050); %播放滤波后的信号
F0=fft(f1,1024);
f=fs*(0:511)/1024;
figure(3)
y2=fft(x2,1024);
subplot(2,1,1);
plot(f,abs(y2(1:512))); %画出滤波前的频谱图
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F1=plot(f,abs(F0(1:512))); %画出滤波后的频谱图
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');

程序4:窗函数法设计滤波器:

fs=22050;
x1=wavread('h:\课程设计2\shuzi.wav');
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
wp=0.25*pi;
ws=0.3*pi;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta); %取整
wn=(0.2+0.3)*pi/2;
b=fir1(N,wn/pi,hamming(N+1)); %选择窗函数,并归一化截止频率
figure(1)
freqz(b,1,512)
f2=filter(bz,az,x2)
figure(2)
subplot(2,1,1)
plot(t,x2)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f2,22050); %播放滤波后的语音信号
F0=fft(f2,1024);
f=fs*(0:511)/1024;
figure(3)
y2=fft(x2,1024);
subplot(2,1,1);
plot(f,abs(y2(1:512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F2=plot(f,abs(F0(1:512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');

Fs = ??;

%滤波器设计
fc = 4500;
%fc为截止频率,高通滤波器比截止频率高的部分保留;低通滤波器比截止频率低的部分保留
Wn = (2/Fs)*fc;
Fs是采样频率,需要你自己预先赋值
%Wn是归一化截止频率,fir滤波器设计要使用归一化频率
b = fir1(20,Wn,kaiser(21,3)); %kaiser是用凯塞窗 20是阶数

g = filter(b,1,x);

在Matlab中已知频率响应曲线如何设计滤波器
答: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中 下面就可以设计自...

matlab中设计fir滤波器中fir1函数,那个增益怎么设置
答:Matlab中,函数fir1和fir2利用加窗傅里叶级数法设计FIR滤波器。函数fir1用来设计传统的LP(低通)、HP(高通)、BP(带通)、BS(带阻)和多频带FIR滤波器;而函数fir2用来设计具有任意幅度响应的的FIR滤波器。函数的各种形式如下:b = fir1(N,Wn)b = fir1(N,Wn,'ftype')b = fir1(N,Wn,...

用MATLAB设计低通,带通,高通和带阻FIR数字滤波器 急!!!
答:与FIR滤波器的设计不同,IIR滤波器设计时的阶数不是由设计者指定,而是根据设计者输入的各个滤波器参数(截止频率、通带滤纹、阻带衰减等),由软件设计出满足这些参数的最低滤波器阶数。在MATLAB下设计不同类型IIR滤波器均有与之对应的函数用于阶数的选择。一、巴特沃斯IIR滤波器的设计在MATLAB下,设计巴特沃斯IIR滤波器...

matlab窗函数设计滤波器
答:上面这对代码分两部分:1. %理想低通滤波器单位冲激响应函数 function hd=ideal_lp1(wc,N) % 这一行去掉分号 ... pha=angle(H);2. % 主程序 clear all; ... axis([0,1,-100,10])其中1部分保存成一个叫ideal_lp1.m的文件,放好别动;2部分保存成任意名字的m为文件,...

matlab函数高斯滤波器的函数名称叫什么
答:函数:gaussdesign 解释:高斯FIR脉冲成型滤波器设计。语法h = gaussdesign(bt,span,sps) 参数描述这个命令设计并返回了一个低通高斯FIR脉冲成型滤波器,其中,h:滤波器系数 bt:3db单边单宽和符号时间的乘积 span:截断长度(符号周期)sps:SamplesPerSymbol,过采样因子,每个符号包含的采样点个数 ...

设计一个matlab带通滤波器代码
答:用切比雪夫最佳一致逼近设计线性相位FIR带通滤波器;信号为0.5hz, 0.9hz, 1.1hz和1.5hz的正统信号叠加组成 通带为[0.9,1.1]频谱分辨率与信号实际长度N成正比 clear all;f1=0.5;f2=0.9;f3=1.1;f4=1.5;t=0:1203;N=length(t);fs=10;M=512;x1=sin(2*pi*(f1/fs)*t)+sin(2*...

matlab中设计fir滤波器中fir1函数,那个增益怎么设置
答:fir1都是默认通带增益为1的,我们设计滤波器的时候也是按照1增益来设计的,以便统一参数以及进行横向比较,如果你想调整体增益的话直接过一个全通放大器就行了,说白了就是乘一个常数。如果你自身的滤波器通带增益不为1,那你就把他除以通带增益进行归一化之后再把截止频率带进去就好了~顺便Q1026783278 ...

用matlab得到一个信号是用采样频率10KHZ采集的电流信号,想滤去其中的...
答:具体程序可以这样写(去采样周期为T=1s,采样频率FS=1/T=1hz)(1)设通带频率为400hz,截止频率为500hz,通带衰减Rp=1db,阻带衰减Rs=20db (2)用双线性变换设计时,模拟和数字的频率对应关系为W(模拟)=2/T*tan(1/2)*w(数字),得到数字的技术指标为Wpz,Wsz。(3)设计滤波器 [Nd,Wdc...

如何用自己设计好的滤波器对频谱滤波 matlab
答:(3)把Y(W)反变换到时域为y(n)即可 滤波器是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的交流电。您可以通过基本的滤波器积木块---二阶通用滤波器传递函数,推导出最通用的滤波器类型:低通、带通、高通、帯阻和椭圆型滤波器。采用MATLAB设计滤波器,使原来非常繁琐复杂的程序设计变...

用matlab设计数字滤波器
答:产品名称:K&L可调带阻滤波器3TNF-200/400-N/N 频率范围(MHz):200-400 3dB带宽范围(MHz):3-7 40dB带宽(Min KHz):300 切槽深度:50 dB 长度(Inch/mm):6.56/167 宽度(Inch/mm):5.38/137 高度(Inch/mm):2.75/70 驻波比:1.5:1 插入损耗:< 0.5 dB 阻抗:50 ...