⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_blockconv.asv

📁 DSP程序 Matlab是一套用于科学工程计算的可视化高性能语言与软件环境。它集数值分析、矩阵运算、信号处理和图形显示于一体
💻 ASV
字号:
function [y,L,M,Q,N] = f_blockconv (h,x)
% F_BLOCKCONV: Perform fast block convolution of two signals
%
% Usage:       [y,L,M,Q,N] = f_blockconv (h,x)
%
% Entry:       h    = vector of length L containing first signal 
%              x    = vector of length M > L containing second signal
%
% Exit:        y = vector of length L+M-1 containing the convolution
%                  of h with x
%              L = length of h
%              M = length of zero-padded x
%              W = number of blocks
%              N = length of block  
%
% See also:    f_conv, f_corr

% Initialize

L = length(h);
M = length(x);
if M < L
    y = f_blockconv (x,h);
    return
elseif M == L
    y = f_conv(h,x,0);
    return
end

% Pad x with zeros, as needed, to make M = QL for some integer Q

M_save = M;
if mod(M,L) > 0
    r = L - mod(M,L);
    M = M + r;
    x = [f_torow(x) zeros(1,r)];
end
Q = M/L;
y = zeros(1,L+M_save-1);

% Compute h_z and H_z

N = 2^(ceil(log(2*L)/log(2)));
h_z = [f_torow(h) zeros(1,N-L)];
H_z = fft(h_z);

% Compute y

y0 = zeros(1,L*(Q-1)+N);
y1 = zeros(1,N);
for i = 0 : Q-1
    m = i*L;
    x_i = x(m+1:m+L);
    x_iz = [f_torow(x_i) zeros(1,N-L)];
    X_iz = fft(x_iz);
    y1 = ifft(H_z .* X_iz);
    y0(m+1:m+N) = y0(m+1:m+N) + y1;
end
y = y0(1:L+M_save-1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -