卷积是一个耳熟能详的的词,自从我开始学习信号与系统以后,就一直没有离开过它,不过只是把它当成一个运算符号来看待。
不过闲着的时候,也会去想,卷积到底有什么作用。
提供一种方便的频域处理方式时域卷积频域相乘
这条法则想必大家都知道,作用非常大,可以轻松的对信号的频域做处理
简单的应用就是频域滤波
F(x)代表输入信号,H(x)代表滤波函数,g(x)代表滤波(输出)信号。
转换到时域则是
以下是一个声音信号处理的例子,给matlab自带鸟叫声加了一个低通滤波器。
效果如下:
滤波前:
滤波后:
代码如下:
主程序
% 主程序
close all;
load chirp;
Hd = getFilter; % 使用Filter Builder设计的FIR
X = filter(Hd,y); % 等同于conv(y,Hd.Numerator)
DrawFFT(y,Fs); % 自定义函数用于画频谱
DrawFFT(X,Fs);
getFilter
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);
1516Hd = design(h, 'equiripple', ...
17 'MinOrder', 'any', ...
18 'StopbandShape', 'flat');
DrawFFT
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
% 来源:知乎
% 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
个人博客
rdg1993 2018-8-13 08:40