Matlab信号处理

时间:2024-05-22 10:06:08

Matlab信号处理

需要安装的APP:
Signal Analyzer app:提供一个可以在时域和频域可视化、测量、分析和比较信号的工具;
Filter Builder和Filter Designer app:可以很方便通过下拉菜单和填写参数的方式来设计和分析数字滤波器;
对于小波分析,Matlab提供了:
1.Wavelet Signal Denoise app:利用离散小波变换对信号去噪;
2.Signal Multiresolution Analyzer app:对信号进行多分辨率的分析和可视化

以处理心电信号为例进行使用说明:
1.打开Signal Analyzer app,将工作区的ecg信号拖动到显示区域,在Filter Signals窗口下右击ecg,点击Time Values,点击下拉三角箭头选择Time Values关联上时间变量,在Time Values窗口输入t
2.点击Spectrum按钮查看信号的频谱图,可以看见在60HZ左右有一个很大的干扰,我们希望通过一个带阻滤波器去除这个干扰,点击ANALYZER窗口,窗口中间部分提供了一系列预处理操作,如平滑(Smooth)、低通(Lowpass)、高通(Highpass),此次我们需要利用带阻滤波器(Bandstop),输入低通带频率(Lower Passband Frequency)为59HZ,高通带频率(Upper Passband Frequency)为61HZ(因为在60HZ左右有一个很大干扰),点击Bandstop按钮,提示我们信号将被覆盖
,先点取消,为了保持原有的信号,我们在Filter Signals窗口下复制一份ecg信号(右击ecg,点duplicate),重命名为ecg_fitered,点击Display Grid增加一块显示区域,以作两个信号的对比(把ecg_fitered拖动到新的显示区域),然后点击带阻按钮(Bandstop),点击OK,可以看到干扰被滤除了
3.点击ANALYZER窗口下的Detrend app(去趋势),去除信号的趋势,点击OK,将去除趋势后的数据(即ecg_filtered)导出到工作空间内,通过对比这两个信号,我们可以看出线性趋势被去除,但由于呼吸、运动所造成的缓慢变化的趋势还保留在信号里,怎么去除呢?小波变换给我们提供了一个有效的手段
Matlab信号处理采样频率为1000HZ,被分解等级为4,被分解为4个级别的细节信号以及1个近似信号,每个子带信号的频率如图所示。
基于离散小波去除趋势的信号处理原理如下图所示:
Matlab信号处理将输入信号分解为一些子带信号,其中某些子带信号可以用来代表信号的趋势,可以将这些子带的系数设为0,然后通过离散小波逆变换将信号重构,这时代表趋势的子带信号被去除掉了。
下面来看怎么利用Signal Multiresolution Analyzer app来实现去趋势的操作:
1.点击Signal Multiresolution Analyzer app
2.点击Load Signal按钮,导入ecg_filtered的信号。缺省状态下sym的小波将被使用,被分解等级为4。左下角的表表示每个子带信号的频率范围和相对的能量
3.看Decomposition-modwtmra窗口,通过每个子带的信号图,我们可以看出没有一个子带可以用来代表信号的趋势,于是我们继续增加被分解的等级(在Level窗口调大)到10,越高的分解等级,越窄的子带,现在可以看出Approx子带可以用来表示信号的趋势,于是在左下角窗口include列下,勾选其它所有子带,而不勾选Approx
4.右边窗口蓝色的线表示被重构的信号,我们可以看出由于运动、呼吸等引起的缓慢变化的趋势被去除了,接下来可以导出被重构的信号(点击Export按钮),并且通过这个按钮可以直接生成matlab脚本(Generate MATLAB Script),以备将来使用
总结:
1.利用Signal Analyzer app来导入、可视化、分析和预处理心电信号;
2.利用Signal Multiresolution Analyzer app对信号做多分辨率的分析,去除代表信号趋势的低频分量,重构出去趋势的心电信号。
教程
https://ww2.mathworks.cn/support/search.html/videos/introduction-to-signal-processing-apps-in-matlab-1580189337356.html?q=&fq=asset_type_name:video%20category:signal/index&page=1