原创 简单说说卷积的应用

2018-8-12 07:40 5729 22 5 分类: 处理器与DSP

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

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


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

时域卷积频域相乘

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

简单的应用就是频域滤波

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);
15
16Hd = 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
% 来源:知乎
% 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



个人博客


文章评论1条评论)

登录后参与讨论

rdg1993 2018-8-13 08:40

谢谢分享
相关推荐阅读
greedyhao 2019-03-17 09:03
uboot链接脚本分析
上一篇uboot主编译脚本分析的编译选项参数中提到了链接脚本这么个东西我也是写到这里才开始了解链接脚本(Linker command scripts),之前只是大概知道有这么一个东西先从参考资料中的内...
greedyhao 2018-11-28 08:49
51总线方式获取adc0809数值
最近单片机有一个实验挺有意思的,使用51单片机以总线的方式读取adc0809的数据先补充点关于单片机总线的预备知识,我一开始不了解总线的时候做这个实验也是很懵逼的。单片机的三总线结构​51单片机有三条...
greedyhao 2018-09-29 21:18
对Xil_Out32未定义的引用
第一次在HLS中遇见一个官方库函数未定义问题,这就把解决方法记录下来。在创建好工程,写完工程代码后,发现报错如下./src/led_controller_test_tut_4A.o:在函数‘main’...
greedyhao 2018-09-29 21:12
Vivado生成Bitstream失败的解决方法
跟着实验指导书,难得的又遇到问题了,在最后生成Bitstream的时候出错了,无法生成Bitstream。报错信息如下[DRC NSTD-1] Unspecified I/O Standard: 4 ...
greedyhao 2018-09-17 22:26
zybo初体验
前段时间过生日,亲戚给了些钱让我自己买生日礼物,早就想搞一块zynq的板了,但是淘宝一看太贵,于是去咸鱼上淘了一块二手的ZYBO(谁知道是不是二手,反正看着挺新)来玩玩。学习肯定是从官方资料开始的,T...
greedyhao 2018-09-13 10:53
运行c代码前发生了什么
众所周知,c代码也是一种比较高级的语言了,机器是没有办法直接运行的,机器所能理解的只有机器码--那一串0和1而已。虽然早就知道c代码是先经过编译链接最后才放在机器上执行,但是在这么一个过程中究竟发生了...
我要评论
1
22
关闭 站长推荐上一条 /2 下一条