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

📄 circonv.m

📁 这是数字信号处理——matlab释义与实现一书的源代码
💻 M
字号:
function y = circonv(x,h,N)
%《数字信号处理教程——MATLAB释义与实现》第三章子程序
% 时域序列x 和 h 的N点循环卷积子程序
% 电子工业出版社出版  陈怀琛编著 2004年9月
%
% [y] = circonv(x,h,N)
% -------------------------------------------------------------
% 循环卷积计算(不须调用自编函数)
%  y = 包含循环卷积的输出序列
% x = 长度 N1 <= N 的输入序列
% h =  长度 N2 <= N 的输入序列
%  N = 循环缓冲器的大小
%  toeplita矩阵方法 y(n) = sum (x(m)*h((n-m) mod N))
%
% 检查x的长度
if length(x) > N
        error('N 必须 >= x的长度')
end

% 检查h的长度
if length(h) > N
        error('N 必须 >= h的长度')
end

x=[x,zeros(1,N-length(x))];		% 将x的长度扩展至N
h=[h,zeros(1,N-length(h))]; 	% 将h的长度扩展至N
m = [0:N-1];
hm = h(mod(-m,N)+1);			% 将h循环折叠
H = toeplitz(hm,[0,h(2:N)]);  % 用toeplitz函数产生循环卷积矩阵
y = x*H;				        % 用向量-矩阵乘法求卷积

⌨️ 快捷键说明

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