简单说说卷积的作用

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

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

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

时域卷积频域相乘

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

简单的应用就是频域滤波

F(x)代表输入信号,H(x)代表滤波函数,g(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

 

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

% 来源:知乎

% 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


猜你喜欢

转载自blog.csdn.net/juhou/article/details/81603130