matlab 中使用fir滤波器后相位延迟如何补偿

clc;
clear all;
close all;
fs=1000;
t=0:1/fs:1000/fs;
signal=sin(2*pi*50*t);
figure(1);
plot(t,signal,'-*');
N=30;  %%滤波器结束为N=30;
hold on;
Hd = my_lowpass;
output_1=filter(Hd,signal);
output_2=filter(Hd,[signal zeros(1,N/2)]);
plot(t,output_2(1,(N/2+1):end),'-*r');
title('滤波后的波形');

figure(2);
plot(t,signal,'-*b');
hold on;
plot(t,output_1,'-*r');


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
MATLAB可以使用firls函数来设计FIR滤波器,然后通过FRR方式实现零相位滤波器。具体步骤如下: 1. 使用firls函数设计一个FIR滤波器。例如,我们可以使用以下代码设计一个50阶的低通滤波器: ```matlab Fs = 1000; % 采样频率 Fpass = 100; % 通带截止频率 Fstop = 200; % 阻带截止频率 Wpass = Fpass/(Fs/2); % 通带归一化频率 Wstop = Fstop/(Fs/2); % 阻带归一化频率 N = 50; % 滤波器阶数 b = firls(N, [0 Wpass Wstop 1], [1 1 0 0]); ``` 这里使用firls函数设计一个50阶的低通滤波器,通带截止频率为100Hz,阻带截止频率为200Hz。 2. 将FIR滤波器系数分解为正向和反向滤波器系数。这可以通过将FIR滤波器系数求反向来实现: ```matlab b_reverse = b(end:-1:1); ``` 3. 对信号进行正向滤波,得到滤波后的信号: ```matlab y_forward = filter(b, 1, x); ``` 这里使用filter函数对信号x进行正向滤波滤波器系数为b。 4. 将滤波后的信号进行反向滤波,得到反向滤波后的信号: ```matlab y_reverse = filter(b_reverse, 1, y_forward(end:-1:1)); ``` 这里使用filter函数对正向滤波后的信号y_forward进行反向滤波滤波器系数为b_reverse。 5. 将反向滤波后的信号再次进行反向操作,即可得到零相位滤波后的信号: ```matlab y_zero_phase = y_reverse(end:-1:1); ``` 这里将反向滤波后的信号y_reverse求反向即可得到零相位滤波后的信号y_zero_phase。 需要注意的是,反向滤波器的系数应该和正向滤波器的系数完全相同,只是在滤波时需要将信号反向处理。此外,由于反向滤波器的存在,信号会有一定的延迟,因此需要进行适当的延迟补偿

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值