FIR滤波器设计

% 【例4-7】根据下列技术指标,设计一个FIR数字低通滤波器:
%            =0.3π, =0.4π, =3dB, =50dB
% 选择一个适当的窗函数,确定单位冲激响应,绘出所设计的滤波器的幅度响应。
% 根据窗函数最小阻带衰减的特性表4-2,可采用海明窗和布拉克曼窗可提供大于50dB的衰减。本例选择海明窗,其过渡带为6.6π/N,因此具有较小的阶次
% 例程4-13  利用海明窗设计Ⅱ型数字低通滤波器
clear all;
Wp=0.2*pi;
Ws=0.4*pi;
rp=3;
rs=50;
Rip=10^(-rp/20);
Atn=10^(-rs/20);

tr_width=Ws-Wp;                         %过渡带宽度
N=ceil(6.6*pi/tr_width)+1                    %滤波器长度
n=0:1:N-1;
Wc=(Ws+Wp)/2;                         %理想低通滤波器的截止频率
hd=ideal_lp1(Wc,N);                      %理想低通滤波器的单位冲激响应
w_ham=(hamming (N))';                    %海明窗
h=hd.*w_ham;                           %截取得到实际的单位脉冲响应

[db,mag,pha,grd,w]=freqz_m2(h,[1]);              %计算实际滤波器的幅度响应

delta_w=2*pi/1000;
Ap=-(min(db(1:1:Wp/delta_w+1)))            %实际通带纹波
As=-(max(db(Ws/delta_w+1:1:501)))     %实际阻带纹波

figure(1);
subplot(221);
stem(n,hd);
title('理想单位脉冲响应hd(n)');

subplot(222);
stem(n,w_ham);
title('海明窗w(n)');

subplot(223);
stem(n,h);
title('实际单位脉冲响应hd(n)');

subplot(224);
plot(w/pi,db);
title('幅度响应(dB)');
axis([0,1,-100,10]);

figure(2);
subplot(221);
plot(w/pi,mag);
title('幅频特性');
xlabel('w(/pi)');
ylabel('|H(jw)|');
axis([0,1,0,1.2]);
set(gca,'XTickMode','manual','XTick',[Wp/pi Ws/pi]);
set(gca,'YTickMode','manual','YTick',[Atn Rip]);
grid

subplot(222);
plot(w/pi,db);
title('幅频特性(db)');
xlabel('w(/pi)');
ylabel('dB');
axis([0,1,-100,5]);
set(gca,'XTickMode','manual','XTick',[Wp/pi Ws/pi]);
set(gca,'YTickMode','manual','YTick',[-rs -rp 0]);
grid

subplot(223);
plot(w/pi,pha/pi);
title('相频特性');
xlabel('w(/pi)');
ylabel('pha(/pi)');
axis([0,1,-1,1]);
set(gca,'XTickMode','manual','XTick',[Wp/pi Ws/pi]);
grid

subplot(224);
plot(w/pi,grd);
title('群延时');
xlabel('w(/pi)');
ylabel('Sample');
axis([0,1,0,50]);
set(gca,'XTickMode','manual','XTick',[Wp/pi Ws/pi]);
grid

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,那我就为您介绍一下MATLAB设计FIR滤波器的基本步骤和代码示例。 首先,您需要确定FIR滤波器设计要求,包括滤波器类型、截止频率通带和阻带的衰减要求等。在MATLAB中,可以使用`fir1`函数进行FIR滤波器设计。 下面是一个简单的示例代码,演示如何使用`fir1`函数设计一个低通滤波器截止频率为1kHz,通带衰减为0.5dB,阻带衰减为50dB: ```matlab % 采样率为8kHz Fs = 8000; % 截止频率为1kHz Fc = 1000; % 通带衰减为0.5dB Rp = 0.5; % 阻带衰减为50dB Rs = 50; % 计算归一化截止频率 Wn = 2 * Fc / Fs; % 使用fir1函数设计低通滤波器 b = fir1(100, Wn); % 绘制滤波器的频率响应图 freqz(b); % 读入加噪声的语音信号 [x, Fs] = audioread('noisy_speech.wav'); % 对语音信号进行滤波 y = filter(b, 1, x); % 绘制滤波后的时域波形 subplot(2, 1, 1); plot(x); hold on; plot(y); legend('原始信号', '滤波后的信号'); % 绘制滤波后的频域波形 subplot(2, 1, 2); N = length(x); f = (0:N-1) * Fs / N; X = abs(fft(x)); Y = abs(fft(y)); plot(f, X); hold on; plot(f, Y); legend('原始信号', '滤波后的信号'); ``` 其中,`b`是滤波器的系数向量,`freqz`函数可以绘制滤波器的频率响应图,`filter`函数可以对语音信号进行滤波,`subplot`函数可以绘制多个子图。 请注意,上述示例代码仅供参考,具体的滤波器设计参数需要根据实际情况进行调整。另外,由于我无法在本地访问您的语音文件,因此您需要将示例代码中的`noisy_speech.wav`替换为您自己的语音文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值