找回密码
 注册
关于网站域名变更的通知
查看: 592|回复: 2
打印 上一主题 下一主题

[毕业设计] 燕山大学数字数字信号处理毕业论文基于DA转换的信号发生与分析

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-25 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本次课程设计利用MATLAB对产生的信号进行采集与
% k: S7 j# l5 ]6 t1 `分析,实现了DA转换的信号发生与分析。通过MATLAB% p. ]4 X: D( Y6 F6 L# r. \' C2 `
GUI 设计信号采集与分析系统,对来自上位机的正弦
( E; }! J, E# n" ~% |  e- _波,三角波,锯齿波等函数信号进行采集与幅频特性% a, H. |+ t1 w" o& l
分析,并将分析的结果通过串口发送命令给单片机# n9 b2 r+ x% j# O/ @) z5 l1 x; g
统,控制相应的数码管或LED 发光显示相应信号参
9 `3 o/ _9 e5 A5 d6 b* z+ J4 {数,从而达到对数字信号的分析与处理的目的。
  T4 X0 ?! J9 |9 W第一章 MATLAB 简介
1 x! Z, t' Q3 bMATLAB是一种面向工程和科学计算的交互式计算软件,它以矩阵运& h1 ?% X. V. e- |
算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式" ?/ i/ w# k6 ~, G- _5 P
工作环境中。同时由于MATLAB是一个数据分析和处理功能十分强大的工
0 q: O" z# T) [" V6 g9 N2 \& D/ {/ b程实用软件,它的信号处理与分析工具箱为语音信号分析提供了十分丰
' a. `6 N0 i& F$ B2 k( q% m5 Z富的功能函数, 利用这些功能函数可以快捷而又方便地完成语音信号的处
! W$ S6 ]# @* H4 ]理和分析以及信号的可视化,使人机交互更加便捷。+ j" z3 s8 e9 J
MATLAB是解决工程技术问题的技术平台。利用它能够轻松完成复杂3 C0 |. B3 Q7 [! N5 T1 z
的数值计算,数据分析,符号计算和数据可视化等任务。MATLAB软件由
) B. a1 F7 X7 ^主包和各类工具箱构成。其中,主包基本是一个用CC++等语言编写成的
4 b- s" j$ N# a函数库。该函数库提供矩阵(或数组)的各种算法以及建立在此基础上, b) n2 O$ R- T( k8 u4 Y/ C2 ^
的各种应用函数和一些相关的用户有好操作界面。而工具箱从深度和广
1 S0 o% n: Y# v/ `5 R度上大大扩展了MATLAB主包的功能和应用领域。随着自身的不断完善和6 p8 Z. J) N$ P' B; u" ?; j
发展, MATLAB功能越来越强大,应用也越来越广泛。) D# e+ L; O; p, p) g
随着计算机技术和信息技术的发展,语音交互已经成为人机交互的
7 ~1 r' g1 }0 d2 ?2 Z! w必要手段,而语音信号的采集和处理是人机交互的前提和基础。声卡是- m* x. b7 w, {6 p- k( v
计算机对语音信号进行加工的重要部件,它具有对信号滤波、放大、采
  j% X. s5 T) H+ I9 w9 T3 Z9 D( O样保持、AD和DA转换等功能。尽管在Windows附件的娱乐中带有一个录
$ B) ~. z+ b3 F/ g- M' V音机,通过它可以驱动声卡采集语音信号并保存为语音文档。但是要对2 T4 C& G6 c8 {9 d" r" a2 u
采集的信号进一步分析处理就必须另外编程或通过其它软件,而且
9 ^: c! _1 V' S, W: UWindows 附件中的录音机功能极其有限且不能扩展。MATLAB是美国Math: H& ^! t; T% Y& Y& d' B0 o  j
Works 公司推出的一种面向工程和科学计算的交互式计算软件,它以矩阵
8 s: P5 {0 a" h: `0 E' ^) \4 W运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互: S- r  ^. m6 f
式工作环境中。在MATLAB环境中, 可以通过多种编程方法驱动声卡,实
+ Q6 r' P* a% N$ e# G现对语音信号的采集和回放。同时由于MATLAB是一个数据分析和处理功) ~9 ]1 f  x% `. }
能十分强大的工程实用软件,它的信号处理与分析工具箱为语音信号分
1 J1 ?9 z; h" l( ?5 t8 s析提供了十分丰富的功能函数, 利用这些功能函数可以快捷而又方便地完
4 _2 @/ W$ h1 s* X: h0 U成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。
5 w. j8 s. H2 x" |/ Q" e第二章采集信号级处理的相关知识
, N. e( e- z; {; c9 d0 d) i; j2.1MATLAB信号采集的相关知识
1 j  h' A' C" XMATLAB 对串行口的编程控制主要分为四个步骤。( F9 u* }  G! X, t! t
①创建串口设备对象并设置其属性。( I0 M* Z5 G- K. B
scom=serial('com1');% 创建串口1 的设备对象scom' D* p/ @# S4 m' V, q7 t/ q; ]
scom.InputBufferSize=1024;% 输入缓冲区为256B 缺省值为512B
+ z+ Q6 ^3 v  f9 Nscom.Timeout=0.5;%Y 设置一次读或写操作的最大完成时间为0.5s, 缺省值
  Y' p0 t  n, ?+ A' ]/ ?. w为10s
+ M% C) V; |/ v% F, b: C# Hs.ReadAsyncMode='continuous'( 缺省方式);% 在异步通信模式方式下, 读取$ f) U& u7 ^) V' E' G) F! m
串口数据采用连续接收数据(continuous) 的缺省方式,那么下位机返回的数
0 Z& _& ?' u* b' l% o( G7 i据会自动地存入输入缓冲区中.
, w% l% K, N5 d这里串口还有很多其他属性可以设置不一一列举。
' t( l# g: i$ Z" W6 b5 ?②打开串口设备对象。fopen(scom);
0 D+ R, a* X6 p$ j% K* G' ?3 Q; ~* Z③读写串口操作。初始化并打开串口调协对象之后现在可以对串口设
( L$ n# Y( v2 ?# l6 G备对象进行读写操作, N  b" j$ x1 R: G9 }  z# j: l
串口的读写操作支持二进制和文本ASCII 两种方式。当MA TLAB 通
$ S! [; E. |- U, _& ~1 u  l- O信数据采用西方ASCII6 p) U7 k+ H3 r' n# d
方式时读写串口设备的命令分别是fscanf、fpritf 当MATLAB 通信数6 b' Q! g- ]& A' s& o$ y
据采用二进制方式时+ W9 M/ _2 i( U, @5 _& Y
读写串口设备的命令分别是fread、fwrite 。我们这里使用fread 可以一
; ~& T1 W7 E2 }0 {5 y) E% k7 |次性把数据读进来。1 v+ \% e3 I; U  N/ E
④关闭并清除设备对象。
3 k9 V- ^: ?5 y% Nfclose(scom) %关闭串口设备对象
3 C# o) y# p) o) E% Z* D8 xdelete(scom);%删除内存中的串口设备对象
' h' K# z1 k5 d- ]1 g9 m9 I& R2 C( B% Aclear scom; %清除工作空间中的串口设备对象+ @! b4 c  s' k$ ]) l+ z* L$ h
当不再使用该串口设备对象时顺序使用以上3 条命令可以将所创建的! K( _3 ?- x- V
串口对象清除,以免占用系统资源。: ?' o/ W7 _/ g/ l$ W' Q
(2)基于MATLAB 中断方式的实时串行通信编程3 l" m/ q. k2 n# e8 l5 J: v; y
在MA TLAB 环境下以中断的方式进行串行通信实际上是采用事件驱动
( [, a& i1 @* c/ B4 R; b的方法实现的。MATLAB 提供了instrcallback(obj,event) 回调函数用户& y" \% `0 T; f1 Y; y+ i
根据需要可以自行设置具体的串行通信事件。
1 _0 z* x; p3 O( B2 C, G其编程步骤如下
. m7 q5 O& |+ \7 f* q# k% v$ y6 @①建立一个串行通信主程序serial.m 文件在主程序中进行串口设备初
) m4 a3 G# q" g始化操作,并指定, `9 R. W1 [& |
回调函数中串行通信的事件。设置回调函数触发事件—当串口缓冲区中
, O# U( y( Q) A, M有n 字节的数据时, 触发中断事件。此后主程序自动调用( T. I+ f5 |9 @  T
instrcallback(obj,event) 回调函数s.BytesAvaibleFcnMode='byte';% 中断触发
2 g: k: O5 Q3 Y: p; X; G2 L6 r事件为‘ bytes-available Event ’
# f0 u1 x1 N! u1 {* O! B% o4 vs.BytesAvailableFcnCount=n;% 接收缓冲区每收到n 个字节时,触发回调函
. ^0 c5 @0 P$ K1 i7 r. H/ h+ v" o) t7 z4 _$ Z: G
s.BytesAvailableFcn=@instrcallback;% 得到回调函数句柄。
' }% P! t" c4 O/ z' ?%另外s.BytesAvailableFcn={@instrcallback,s}; 得到回调函数句柄,并将
# s" b3 H; }( j. q7 r) f变量s 渗透到instrcallback 中。
* ~- E- Z7 H4 b6 u% z4 {fopen(s);% 连接串口设备对象
9 h- B4 [1 O0 l# L4 N4 rfwrite(s,255);% 写串口发送握手信号0xFF( 等价于十进制下的数值255)7 K& L( W3 z! H) W# s/ j" x$ Y
②修改instrcallback(obj,event) 回调函数对所发生的串口通信事件进行处7 `2 F- w& V/ U* a) S7 j( H6 p
理。% i4 q+ Q* `" s/ {
MATLAB 缺省的回调函数instrcallback(obj,event) 存在于instrcallback.m 文
) K& r+ x- N& d* f6 [+ F7 W' v$ y2 Q件中。该文件实际上是一个有待于用户修改的程序模块。其中只有一些. P( G9 A; }  k: [4 ]5 J) F1 w
最基本的程序代码能够显示导致串口中断发生的是哪一类事件,中断事
' Y7 _  C& I* ?- `  v8 ~+ L5 q& {/ ^件所发生的时间以及导致事件发生的对象名等信息。修改回调函数文件) v6 `$ y6 R/ \
时, 注意要取消文件中相应信息后的分号才能够在MATLAB 的命令
1 d/ U$ N# n$ }  \1 F窗口command$ ~6 N/ J  X2 ~  A- e
window 中将这些信息显示出来。中断发生后的通信事件处理以及通4 C. C0 A6 \2 u% J) X2 ]
信数据的分析处理任& E9 `" J. q" R2 L# Q, s4 I& D$ A
务需要用户自行添加相应的服务程序代码。MATLAB 安装目标下有两
* ~7 N1 f6 f" j0 S3 a个instrcallback.m 文件
. V  [9 g& r* v$ X" K我们只需要修改@instrument 目录下的instrcallback.m 文件即可。如果
* h. Y, T( ]3 t! j, _( ]. mMATLAB 安装在C 盘
# B2 P# E- Q$ w; x" _7 winstrcallback.m 文件目录为
- b( `* e& {% d2 D7 Y(一定要替换, 不然串口无法启动)
3 Z0 A  q% b+ F" p+ J! ^1.gui_cc2430receive.m 是数据采集程序运行后选择‘开始’ 开始采集
5 C; I" t4 O& T8 G5 X; Y9 L! n' J数据点击希望观
& [7 o/ A  M9 v1 j4 y/ h# c: F察的节点可查看该节点的数据波形图。此程序有针对目前使用的“节点% \' }) D+ K4 D6 Y' v" J
上有五个传感器”的5 G! I. ~2 q: }/ J( `2 G
情况不一定通用。' V. W+ L- R) u0 }( [, a( d
2.instrcallback.m 是系统的回调函数满足中断条件时会进入此函数。
0 H: V) V9 C3 W3.callbackDealWithData.m 是实时处理函数当程序进入回调函数
  w( z( f' M" P; ^6 Einstrcallback 时就会调用此函1 E; R1 T9 D4 r& u8 T( F
数在callbackDealWithData 里面可以添加希望执行的指令代码完成数
2 w, Y! j- \8 ]  r据解析、保存、数
5 K2 R. Y+ u( w; A; b$ R# J据滤波、画图、实时跟踪等功能。5 ^! H& v$ t5 Q: |/ S
gui_cc2430receive.m 文件是启动本采集系统的关键其中设置的“开始”
# x. B! U; T# b& I; N, m按钮为代码中的b1
( |: Q. \% I, ?: h0 U5 {$ W' n按下按钮会进入b1callback 函数。  D+ ]! H) S) H% H/ S
2.2 快速傅里叶变换. X; e  ^" |9 g& t# \, w9 ^2 l
有限长序列可以通过离散傅里叶变换(DFT) 将其频域也离散化成有限' b2 W" A2 ?, a  `# O* o
长序列. 但其计算量太大, 很难实时地处理问题, 因此引出了快速傅里叶变
, W) J; O+ t$ K+ F5 {换(FFT). 1965 年, Cooley 和Tukey 提出了计算离散傅里叶变换( DFT)
. H0 E$ J2 n* p的快速算法,将DFT 的运算量减少了几个数量级。从此,对快速傅里叶
7 L9 L( F: C* K# i0 q变换( FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随
4 x& T( L7 K. h6 F( @- V' }# q$ pFFT 的出现和发展而迅速发展。根据对序列分解与选取方法的不同而产生+ \0 L& S+ S7 m, G
了FFT 的多种算法,基本算法是基2 DIT 和基2 DIF。FFT 在离散傅里叶
5 X1 T! q: M( k! c* [反变换、线性卷积和线性相关等方面也有重要应用。: Z# }1 U' T7 ?. n
快速傅氏变换( FFT),是离散傅氏变换的快速算法,它是根据离散. h! |1 E# c- {
傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进5 b  f2 z; N/ l# b; Q
获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统" Y+ O) N# N, G, ]3 V9 ]
或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
+ X' D. }3 n$ X% t' A6 V设x(n) 为N 项的复数序列,由DFT 变换,任一X(m)的计算都需要: s4 ^1 L) w, D! k5 c3 b
N 次复数乘法和N-1 次复数加法,而一次复数乘法等于四次实数乘法和两
/ e8 Y& B+ [. ]6 n2 ^+ J次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和/ F' V/ f& b1 L( z; {
一次复数加法定义成一次“运算” (四次实数乘法和四次实数加法) ,那5 ?' |# B. H& g, R$ j# K
么求出N项复数序列的X(m) , 即N点DFT变换大约就需要N^2 次运算。
. Q5 b3 l5 d9 ]9 a7 f6 p用WN的周期性和对称性,把一个N项序列(设N=2k,k 为正整数),分为0 I2 j4 i  e! |" k* m& ]
两个N2项的子序列,每个N2点DFT变换需要( N2)2 次运算,再用N次
' B4 h) W0 X& }0 A4 I) L# Z* T' N* J运算把两个N2 点的DFT 变换组合成一个N 点的DFT 变换。这样变换以
( x0 s# T  H, N  j  V  ~9 Z后,总的运算次数就变成N+2( N2)2=N+N22。继续上面的例子, N=1024. f5 _6 v6 o) v/ f; a/ [- a2 `) r
时,总的运算次数就变成了525312 次,节省了大约50%的运算量。而如
# s: t! J) R! {  O8 e2 H果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的
3 a0 @: r) G5 Z# }9 W) i7 QDFT 运算单元,那么N 点的DFT 变换就只需要Nlog2N 次的运算, N 在
8 h& H, |# @' Y! M* V4 d( r4 }2 W( O1024 点时,运算量仅有10240 次,是先前的直接算法的1%,点数越多,
* Y$ z& H: s- F5 f6 U运算量的节约就越大,这就是FFT的优越性。  ^6 D5 G) @- T& p) Y
离散傅里叶变换X(k) 可看成是z 变换在单位圆上的等距离采样值。
3 f: u% u7 f) E; }同样, X(k) 也可看作是序列傅氏变换的采样,采样间隔为ω N=2πN 。由( V0 |- B  `+ g$ f
此看出,离散傅里叶变换实质上是其频谱的离散频域采样,对频率具有
% V1 `! d' E" v. o; ]选择性( ωk=2π kN),在这些点上反映了信号的频谱。
' `2 s& h. Z* Y0 O7 q. S6 L根据采样定律,一个频带有限的信号,可以对它进行时域采样而不丢失( }: u( h. F* P& O5 x
任何信息, FFT 变换则说明对于时间有限的信号( 有限长序列) ,也可以对, a# M* L9 k& i- O4 B1 w7 G
其进行频域采样,而不丢失任何信息。所以只要时间序列足够长,采样
5 F+ z+ t/ L0 ?$ L- B足够密,频域采样也就可较好地反映信号的频谱趋势,所以FFT 可以用
' R4 h2 ~& w$ @3 O/ S9 v% w以进行连续信号的频谱分析。! W; ~+ S# ^' [& [& u
/ B' R: }" w2 [- W/ o: i

  o' s1 B) T  V! p
游客,如果您要查看本帖隐藏内容请回复
# U# e) b; _! J: W- d) R% l) r

9 i% V6 L% f* \* w: C7 d

该用户从未签到

2#
发表于 2019-11-26 11:16 | 只看该作者
学习一下啊

该用户从未签到

3#
发表于 2022-12-25 11:28 | 只看该作者
学习一下,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-11 02:08 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表