简单说说卷积的作用

卷积是一个耳熟能详的的词,自从我开始学习信号与系统以后,就一直没有离开过它,不过只是把它当成一个运算符号来看待。

不过闲着的时候,也会去想,卷积到底有什么作用。

提供一种方便的频域处理方式

时域卷积频域相乘

这条法则想必大家都知道,作用非常大,可以轻松的对信号的频域做处理

简单的应用就是频域滤波

$$
g(x) = \mathscr{F}^{-1}\left[H(x)F(x)\right]
$$

F(x)代表输入信号,H(x)代表滤波函数,g(x)代表滤波(输出)信号。

转换到时域则是

$$
g(x) = h(x) \ast f(x)
$$

以下是一个声音信号处理的例子,给matlab自带鸟叫声加了一个低通滤波器。

效果如下:

滤波前:

滤波后:

1
2
3
4
5
6
7
8
% 主函数
close all;
load chirp;
Hd = getFilter; % 使用Filter Builder设计的FIR
X = filter(Hd,y); % 等同于conv(y,Hd.Numerator)

DrawFFT(y,Fs); % 自定义函数用于画频谱
DrawFFT(X,Fs);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Hd = getFilter
%GETFILTER Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.4 and DSP System Toolbox 9.6.
% Generated on: 11-Aug-2018 21:15:57

Fpass = 2500; % Passband Frequency
Fstop = 3000; % Stopband Frequency
Apass = 1; % Passband Ripple (dB)
Astop = 60; % Stopband Attenuation (dB)
Fs = 8192; % Sampling Frequency

h = fdesign.lowpass( 'fp,fst,ap,ast ', Fpass, Fstop, Apass, Astop, Fs);

Hd = design(h, 'equiripple ', ...
'MinOrder ', 'any ', ...
'StopbandShape ', 'flat ');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function [  ] = DrawFFT( x, Fs )
% DrawFFT 对输入信号进行快速傅里叶变换
% 输入参数:x :输入信号; Fs:采样频率
% by Yang Xiaokang , 2016-02

L = length(x);

NFFT = 2^nextpow2(L); %确定FFT变换的长度
y = fft(x, NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1); %频率向量

figure;

plot(f, 2*abs(y(1:NFFT/2+1))); %绘制频域图像
title( '幅度谱 ');
xlabel( 'Frequency (Hz) ');
ylabel( '|y(f)| ');

end

% 作者:TaylorSe
% 链接:https://www.zhihu.com/question/46038488/answer/144244073
% 来源:知乎
% 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。