1
学好数字信号处理的三大诀窍之一——运用MATLAB
采用数字信号处理的优势
前面比较了数字信号相对于模拟信号的优点,如噪声不积累;差错可以控制;易于加密,安全性好;便于实现信息融合;便于采用大规模集成电路实现,等等。此外,采用数字信号处理还有一些重要的优势,即精度高、灵活性强、性能好和应用广等。
①数字信号系统相对模拟信号系统更容易实现高精度,并且并且较为稳定,因为数字系统不容易受外界温湿度等的影响,而模拟系统的工作状态常常受到外界环境的影响,发生参数的改变。
②数字信号系统处理更加灵活。模拟系统的硬件结构一旦形成,不容易添加、删除或者更改元器件,而数字系统很容易通过修改参数实现所需要的功能。当信号处理既可以用硬件实现、也可以用软件实现时,它们各有其优缺点:硬件实现速度快,但是不灵活;软件速度较慢,但是灵活性好。比如,手机的语音编解码将复杂的算法用集成电路实现,处理速度很快,因而能实现实时通信。
③性能好。数字系统可以实现严格的线性相位,这在某些对相位要求较高的场合如图像传输非常有利,因为相位的非线性会导致图像的畸变;数字系统可以方便地存储数据,因而可以实现非因果系统;数字系统可以利用信息论理论和语音、图像压缩理论,对数据进行压缩,大大降低数据传输率,压缩的依据有两个:一是熵压缩,利用空间和时间冗余度,二是利用人耳或人眼的感知特性。数字系统可以实现很精细的谱分析,而模拟系统则要粗糙得多,比如数字系统的谱分析精度可以达到千分之一赫兹,而模拟系统只能达到10赫兹。
④数字系统利用强大的储存和运算能力实现多维信号处理,如多维滤波、多维谱分析等,因而应用更加广泛。
教材中介绍了大量数字信号处理的应用,这里再介绍两个新颖的例子。将人体切片进行数字化,可以对人体进行三维重建,在医学教育和临床上都得到应用。对文物进行数字化,可以实现三维数字博物馆,更加方便游客欣赏,也方便文物的复制。
学好数字信号处理的三大诀窍之一——运用MATLAB
江志红在《深入浅出数字信号处理》中提出,理解数字信号处理有三把“万能”的钥匙,即①时域与频域的相互切换;②向量;③MATLAB软件。对这种提法,本人深以为然。下面首先谈MATLAB在数字信号处理中的应用。
很多学生一旦接触数字信号处理这门课,就被繁琐的公式推导吓倒了。高等数学固然公式很多,而数字信号处理公式之多,比高等数学有过之而无及,况且这些公式大都有一定的物理意义,要把公式及其物理意义紧密结合起来,因此就更加困难了。探索这门课程的更加友好的教学方法和更加有效的学习方法,显得迫在眉睫。将理论和实践加以结合,利用MATLAB实现各种理论和算法,运用于解决实际问题,是学好数字信号处理的一个诀窍。
MATLAB是一个面向科学计算与工程数值分析的软件,具有强大的仿真、计算和可视化能力。由于它是一种高级语言,因而编程非常简单,易学易用。将数字信号处理的学习和MATLAB工具紧密结合起来,学习才不会枯燥,因为繁琐的公式或算法都可以得到实在的结果,这些结果甚至是可以听到(语音、音频)或者看到(图像、频率谱、相位谱)的,那么必然加深对基本理论的理解。数字信号处理是一门工科性质非常强的课程,仅仅学一堆理论和公式而不能实现它,和学纯数学有什么区别呢?况且数学课程也在改革中,也在运用MATHEMATICA和MATLAB等工具进行计算、直观化,解决实际问题。
大多数字信号处理课程教学是把理论学习和MATLAB分开的,以理论课的学习为主,中间穿插一些实验或者课程设计环节。而我们会尝试将MATLAB贯穿于整个数字信号处理课程的学习,采取理论密切联系实际的方法。一个不那么直观的理论或公式,我们都试图将其直观起来,用MATLAB运行得到实际结果来说明问题。理论和实验是不分主次的,理论学得好的可以多花点时间做实验,而实验做得好的也可以多花点时间学习理论。
下面以圆周率的仿真计算为例,说明MATLAB的强大威力。下面是用面积法计算圆周率的仿真程序,整个程序只有一行:
N = 10000000; pi = 4*length(find(sum(rand(2, N).^2)《 1))/N
把上述命令输入MATLAB的命令窗口运行,即得到圆周率的近似值3.1417(重复试验可以得到不同的结果,但都是围绕3.1416而变动的,偶然性中包含着必然性)。上述各个命令的含义可以在以后的学习中逐步熟悉。
总之,学习数字信号处理这门课,一定要密切结合MATLAB,做到理论联系实际,理性认识和感性认识相结合。下面举一个有趣的例子来结束本节。
例1 有高矮各不相同的100名同学,随机地排成一个10×10的方阵。每行取最高的一个同学,一共10个高个子,记为集合T;每列取最矮的一个同学,一共10个矮个子,记为集合S。问题:(1) T中最矮的同学(记为T[S])和S中最高的同学(记为S[T])相比谁更高?(2) 如果T[S]和S[T]一样高(即为同一个人),求其概率为多少?
分四种情况讨论:T[S]和S[T]既不在同一行,也不在同一列;T[S]和S[T]在同一行;T[S]和S[T]在同一列;T[S]和S[T]为同一个人。容易知道,前三种情形,都是高个子中最矮的比矮个子中最高的要高,那么在100个人随机排列的情况下,T[S]和S[T]为同一个人的概率多大呢?只要做一下试验,只要试验的次数足够高,就可以得到充分准确的概率。如下代码进行10,000,000次试验,统计T[S]和S[T]为同一个人的频率。
clc,clear all;
tic
jj =0;
for ii= 1:10000000
A = randperm(100);
B = reshape(A, 10, 10);
C1 = max(B‘);
D1 = min(C1);
C2 = min(B);
D2 = max(C2);
if (D1-D2) 《= eps
jj = jj + 1;
end
end
rate =jj/10000000
time =toc
在Intel Celeron CPU G1820(2.70GHz)上运行结果为:
rate =
1.0990e-004
time =
169.1524
即T[S]和S[T]为同一个人的概率约为万分之一点一,在任一次试验中,几乎可以肯定地说,高个子中的矮个子比矮个子中的高个子高。同时,10,000,000次重复试验所花的机器时间约为169秒,即不到3分钟。
原文标题:学习数字信号处理的诀窍:运用MATLAB
文章出处:【微信公众号:数字信号处理辅导】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
全部0条评论
快来发表一下你的评论吧 !