手动卷积和手动互相关处理数字信号,MATLAB代码
时间: 2024-09-22 19:02:45 浏览: 33
基于matlab的GUI界面多种卷积计算和滤波器等
手动在MATLAB中执行卷积和互相关运算对于数字信号处理是非常基础的操作。以下是两个简单的例子:
**1. 手动卷积 (Convolution)**:
```matlab
% 假设我们有两个一维向量 x 和 h
x = [1 2 3 4]; % 输入信号
h = [0.5 1]; % 卷积核
% 将h向右移动,并计算每个位置的乘积求和
conv_length = length(x) + length(h) - 1; % 总长度
result = zeros(1, conv_length);
for i = 1:length(h)
shifted_h = h((length(h)+i-1):end); % 移动的窗口
result = result + shifted_h .* x(1:i); % 卷积操作
end
result = result(1:end-length(h)+1); % 去除边缘效应
```
**2. 手动互相关 (Cross Correlation):**
```matlab
% 对于交叉相关,只需交换输入向量x和h的位置
corr_length = length(x) + length(h) - 1;
cross_corr = zeros(1, corr_length);
for i = 1:length(h)
shifted_h = h((length(h)+i-1):end);
cross_corr = cross_corr + shifted_h .* x(i+length(h)-1:-1:1);
end
cross_corr = cross_corr(1:end-length(h)+1);
```
阅读全文