matlab中重叠保留法,Matlab重叠保留法、重叠保留法 程序

计算一长一短两个序列的线性卷积时,如果直接使用 FFT 以及 IFFT 进行快速变换,则需要在较短的序列后面补很多个零,增加了计算量。因此在此种情况下,一般采用重叠相加法和重叠保留法来计算,可以有效减少计算量,具体原理此处不涉及,只提供这两种方法的matlab程序,供参考。

overlap_add 重叠相加法的程序

overlap_save 重叠保留法的程序

lin_conv 用 FFT 和 IFFT 快速计算线性卷积的程序,被以上两个程序调用

建议:将这三段程序保存成分开的三个 .m 文件

%% 重叠相加法,重叠保留法实现长短序列的线性卷积

function y=overlap_add(x,h,M,choice)

% x为较长的输入序列,h为较短的系统函数,M为分段大小

% choice为'add'或'save',选择重叠相加法或重叠保留法

%---------前期处理-------------------

N=length(h); % 序列h(n)的长度

Lx=length(x); % 序列x(n)的长度

if N>M % 算法要求 N<=M

M=N+1;

end

L=M+N-1; % 用每段循环卷积计算线性卷积所需

点数

T=ceil(Lx/M); % 分段数,ceil向上取整

t=zeros(1,N-1); % 缓存序列初始化

x=[x,zeros(1,(T+1)*M-Lx)]; % 最后一个不足M的分段补零

y=zeros(1,(T+1)*M); % 生成输出序列y(n)

%-------------核心算法--------------------

for i=0:T

xi=i*M+1;

x_seg=x(xi:xi+M-1); % 低点数计算时的分段x(n)

y_seg=lin_conv(x_seg,h,L); % 计算 i 分段和 h 的循环线性卷积

y_seg(1:N-1)=y_seg(1:N-1)+t(1:N-1); % 与前一段卷积的后N-1位重叠相

t(1:N-1)=y_seg(M+1:L); % 缓存序列更新

y(xi:xi+M-1)=y_seg(1:M); % 每卷积一段输出M个点

end

y=y(1:Lx+N-1) ; % 最终输出序列

end

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值