本帖最后由 Freeman_2016 于 2019-9-18 11:22 编辑
# N% y( p3 W7 G1 l2 m
4 L& S- |3 [. n- YMatlab是一款应用较广的数学软件,常用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。 Matlab语言十分简洁,这使得它在数值计算、矩阵计算等方面相对于C、Fortran等传统语言有着无以伦比的优越性。而其集成了易于使用的视窗环境,可以非常方便的绘制函数和数据图层。Matlab常常引用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测等领域。 Matlab是对已有数据的分析,而数据的采集则交由外部的采集仪来完成,比如麦克风采集音频信号、摄像机采集图像光学信号、示波器采集电路信号等。示波器作为最常用的测量仪器可以直接或间接测量出大部分领域的可感知信号,包括音频、光强、电磁波等(当然前提得转化为电信号才行)。 下面我们以mobileScope示波器(www.fescale.com)为例讲解配合matlab对信号的分析。 首先采集一组三角波和正弦波信号。
, |0 F+ K, k# l. K: ^9 ?
: J ~* |9 y6 h
采集一组三角波和正弦波信号
" O7 o/ d9 ?5 R3 `. N# ]; e
0 i; J1 _4 v( x+ x9 h8 H0 C. l
点击导出,可将图层数据导出来。 “导出”功能按钮 # s" m. I. v9 b0 l* s% s0 [
5 k6 e; C5 I4 ]: ~
数据文件所在目录
& ~% W+ o$ l6 I/ S8 ?& W
2 b( Y6 k- ?! v0 ~* Z
打开软件所在的文件夹,可以看到里面有个 analyse.m 的脚本文件和matlab的文件夹,导出的数据就放在里面命名方式为xxx.dat,将这两个文件拷贝到电脑。 Analyse.m文件中集成了几个比较经典的demo,我们来看下几个主要demo的代码示例。 我们先打开analyse.m文件,将里面需要载入波形数据文件修改为实际采集的。 § chDatas = load('wave17_01_03_17_42_34_824.dat'); § matlab载入波形数据还是相对简单的,一行语句就搞定,而且还自动生成相应的矩阵。当然matlab目前也支持使用C/C++,但显然那会是一个相当烦躁的编码过程。 运行:
2 ]$ [$ x) w4 t% Q6 b, c
, R3 J* C, l5 z6 U" i! W2 H/ l- j! B
matlab描绘的两组波形
+ N9 H0 s, F& M% q4 r" B9 d5 W
5 F( D# p3 Q4 y7 s g# Z$ Q8 G0 R& q可以看出这个和示波器显示的是一致的,比例有所压缩,这个我们可以随意用鼠标调整。 基本矩阵运算Matlab支持丰富的矩阵运算,加减乘除、微分、倒数、绝对值等等,都是几行语句就搞定的事。 § addition = ch1 + ch2; % 加法 § § subtraction = ch1 - ch2; % 减法 § § abs2 = abs(ch2); % 绝对值 §
0 k. i+ P2 m: W( P% K8 ]& \$ ] Y' n) f" a# L) d% W' X* S$ v
波形加减后的图形
7 [" K s5 E+ n, {/ G8 b e: U" W
1 j4 i1 A1 l7 B* N
上图所示是波形加减后的图形 李莎茹曲线李莎茹图形,又称XY模式,可以用来测量两路信号相位差,评定频率比参数等强大的功能。这个在matlab上只需要一句语句就能画出来的。 § plot(ch1, ch2, '-g'); § ' m- d2 D8 j$ t+ L( O0 `9 { x( N: j. X
( m' Q2 o5 f/ x8 O) k
三角波和正弦波合成的李莎茹图形
5 d8 A2 W4 U/ W' b) j2 o* a6 ^
/ ] z1 |7 A! I6 w+ Q3 [% T# ~6 V; \
上图所示既是三角波和正弦波合成的李莎茹图形 时频域运算对于信号处理来说,时域和频域的转换几乎是用的最多的。离散傅里叶变换FFT可以方便的把一组时域信号转换频率的权重集合,直观的反应出一个信号的频率成分。 § ch1FFT = abs(fft(ch1, FFT_N)); §
1 R: r+ M/ {" P3 U4 Z# P% q5 K( m& T# O) ~
频率成份
7 m4 s9 r& r9 ~0 E
: H1 D1 ^* W$ n: N/ V
上图显示出两组信号的频率成份 坐标系转换直角坐标系转换为极坐标显示。 § polarTRefer = -pi:2*pi/length(ch1):pi-2*pi/length(ch1); § § polar(polarTRefer, ch1, 'g'); § . J1 H) {, z) A0 z2 m
3 H* i2 ~! }$ b$ H6 x
三角波信号的在极坐标系下的显示 ) C) l( }; f' A9 b9 s' e) f+ I
# n3 n% h" I. C% S9 Z9 N+ }' V
正选波信号的在极坐标系下的显示 9 e3 u d* q2 c* h1 ?+ i
, i A3 p& h& @4 x. E
上面图显示两个通道信号的在极坐标系下的显示 滤波处理滤波是数字信号处理的一个比较复杂的问题,一个好的滤波器可以真实还原源数据信号有效屏蔽噪声。Matlab集成低通滤波器。 § filter_out = filter(filter_bz, filter_az, filter_in); § $ E: L. I' R2 Q2 o
6 n1 w8 b& b/ c7 p0 b绿色是原始带噪声的信号,红色为经过滤波后的信号波形
G# C( d" r- E9 [2 y/ O
, L. V" w4 A4 |5 d) g
! B4 p1 b- n& S1 H
上图绿色是原始带噪声的信号,红色为经过滤波后的信号波形 曲线拟合示波器采集的是离散点信号,有时候想要得到其拟合的曲线,以用于建立模型或者预测数据。典型的例子为,电池在没电情况下的放电曲线,信号传输过程中的衰减特性曲线或者热传导曲线等。示波器采集的是离散带噪声的样本,拟合的意义就是剔除干扰找到最佳的曲线。 & Y7 I2 i; c$ e2 G: A8 A3 D
6 [, }! p* T! L) ^5 ^1 H, B+ h0 Y
& G B( A- |$ \" @, r0 N7 k! `
: r6 Z* o* n/ s, Z# c0 t
$ N; n. ~+ v3 G3 _
) b' g6 d* g- T8 V E% a* n; d* {2 \ c7 }* t" l; ~- F
& j" [, ^ b2 ~& g \
% d* M: Z: v# K: M |