📄 circonv.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 + -