matlab中fir滤波器代码_MATLAB下利用FDATool进行FIR滤波器设计

本文介绍了如何在MATLAB的FDATool中设计FIR低通滤波器,包括设置滤波器参数如滤波类型、采样率、阶数等,并详细说明了如何导出ASCII系数应用于嵌入式、FPGA或DSP系统。建议直接导出ASCII格式的滤波器系数并将其应用于实际代码中。
摘要由CSDN通过智能技术生成

Matlab中自带工具箱FDATool也能很方便快速的实现滤波器系数h的整定,可以方便应用到嵌入式(大多数基于FIR滤波设计)、FPGA、DSP里的FIR系数当中,本文将描述基于MATLAB下FDATool生成FIR的实用方法。

FDATool打开,可以直接在命令窗口键入fdatool回车即可启动,也可以通过UI界面打开,操作如下:

fc2b3042bf75aeba4b6623660ec235d9.png
UI界面下打开 FDATool

这里通过图解快速进行一个FIR设计一个低通滤波器,

  1. 滤波类型(Filter Type)= Lowpass

2. 采样率(Fs) = 1000HZ

3. 滤波阶数(order) = 16(阶数越大,滤波品质越好,但相对滞后越大)

4. 密度因子( Density Factor)= order+1 = 17

5. Fpass(通频带)= 95HZ

6. Fstop(截止带)= 105HZ

7. Wpass(通频带宽增益期望)= 1DB

8. Wstop(截止带宽增益期望)= -40DB

具体FDA设计图:

7cbe73fe5b33013824d72aa45a85b2f0.png
FDA设计FIR滤波器

生成FIR系数,笔者建议,直接生成ASCII复制出来放到需要运行的工程。File→Export然后保存ASCII格式,这时候MATLAB将会自动打开该文件(也可以通过记事本打开)。

8750d8cc501d044ea584e9120e8c7eb5.png
FIR系数保存成ACSII格式

85adfb9aa90304765c600f8314eb6d42.png
FIR系数内容,取Numberator部分

最后,用该系数进行FIR滤波处理,详见代码(强烈建议将FIR的h系数拷贝到工程里面):

clear all
clc

%FIR h 1000HZ lopass Fpass = 95HZ  Fstop = 105HZ
h = [0.013645230215860393307991671463241800666
    0.020864467885159766052938223879209544975
    0.033805656970854927600989014990773284808
    0.048945673554616375700021535521955229342
    0.064942719858356201534377305506495758891
    0.080076064347642750274047784841968677938
    0.092538395154703717571109677919594105333
    0.100751060201654682457750311641575535759
    0.103616541625144178984108123131591128185
    0.100751060201654682457750311641575535759
    0.092538395154703717571109677919594105333
    0.080076064347642750274047784841968677938
    0.064942719858356201534377305506495758891
    0.048945673554616375700021535521955229342
    0.033805656970854927600989014990773284808
    0.020864467885159766052938223879209544975
    0.013645230215860393307991671463241800666];

Fs = 1000;            % Sampling frequency HZ                   
T = 1/Fs;             % Sampling period  S     
N = 2000;             % Number of signal 
t = (0:N-1)*T;        % Time vector

%构造一个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量
y1 = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%利用h系数进行FIR滤波
y2 = filter(h',1,y1);

%波形快速傅里叶运算
Y1 = fft(y1);
Y2 = fft(y2);

%计算双侧频谱P2
P1_2 = abs(Y1/N);
%取出前面一半进行分析
P1_1 = P1_2(1:N/2+1);
%最终转化为单侧幅频
P1_1(2:end-1) = 2*P1_1(2:end-1);

%计算双侧频谱P2
P2_2 = abs(Y2/N);
%取出前面一半进行分析
P2_1 = P2_2(1:N/2+1);
%最终转化为单侧幅频
P2_1(2:end-1) = 2*P2_1(2:end-1);

%确定频域映射,转化为HZ
f = Fs*(0:(N/2))/N;

subplot(4,1,1);
plot(t,y1);
title('原始信号0.7幅值50HZ,1幅值120HZ')
subplot(4,1,2);
plot(f,P1_1);
title('原始信号FFT分析')
subplot(4,1,3);
plot(t,y2);
title('FIR滤波后波形')
subplot(4,1,4);
plot(f,P2_1);
title('FIR滤波后FFT')

1cace4ad5731170caf6f5548c050037d.png
FIR数据滤波后图形演示
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值