本文给出了前两次信号与系统作业中的视频讲解。大家可以参考,在此基础上自行探索完成实验。
第二次作业第 10小题
作业的第10小题是MATLAB的实验题。要求使用MATLAB对于两段音乐所表示的信号进行变换,生成相应的音频信号。通过聆听生成的音乐来体会信号变化所制造出的听觉效果。从而拓展对于信号变化的感知空间。
在课堂上,介绍了十种常见到的信号操作卷积和相关运算将会在第二章进行进一步的讲解,所以,在这次作业中仅仅对其他八种信号操作进行练习。在MATLAB中,对于音频信号的操作的命令,最常见的是audioread,和audiowrite,这两个命令分别完成音频数据文件的读取和存储。在MATLAB中对于信号处理实际上都是通过对存储离散时间信号的矩阵来完成。因此,在尺度变换的时候,需要满足整数倍数的关系。但是,可以通过改变采样频率参数,在音频数据重新播放的时候产生相同的尺度效果。
下面来具体看一下在MATLAB中对这两个命令如何对音频文件进行操作的。
假设音频文件存储在d:盘中temp目录下,文件名称为by.mp3.使用audioread命令,可以读取该MP3文件,返回音频数据f1,和采用率参数fs.如果音频文件是立体声音乐,则返回的数组是两列的矩阵.可以使用mean,求数组列平均将立体声两个通道数据转换成 一个通道数据。这只是为了使得后面的变化语句更加的简洁而已。使用相类似的过程,完全可以对立体声进行操作。
使用audiowrite命令,可以将生成的新的音频文件重新写入磁盘中的数据文件。请注意,MATLAB所能够接受的存储音频文件格式只包括有:.wav, .mp4等几类格式。建议大家在做实验的时候存储成.wav文件。
当然,这个作业题,也可以对二维图像信号进行相应的变换,观察信号变换后的效果。在MATLAB重视使用imread,imshow,imwrite等命令对于图像数据进行读写和显示。下面,我们同时展现一下音乐和图片在上述八种信号操作中所得到的结果。对比一下人类的听觉和视觉对于信号感知方面的差异。
作业中第一种信号运算是对因变量,即信号的幅值进行运算。这反映在信号的放大与衰减方面。在放大时,信号的幅度乘以一个大于1的常数,信号衰减时,则乘以一个小于1的常熟。如果常熟小于0,则信号不仅幅值变化,同时上下反褶。下面听一下信号幅值乘以0.5时的效果;可以觉察出,声音只是在音量上略微减小,其他方面没有变化。需要说明一点,人在感知声音的时候,声音的大小与声音的幅值的对数成正比。如果想使得声音挺起来减少一倍,声音的幅值应该减少10倍左右。对于图像中的交流成分缩小一半,可以感到图像对比度下降了。
听一下信号幅度增加50%的音效。仍然由于听觉的强度对数原理,幅度放大
的音乐听起来感到是增加了一点,并不是增加了50%的强度。将图片中交流成分的幅度增加50%,图像看起来对比度增加了。将音频的幅度乘以-1,听听声音的变化。听出变化了吗?我是没有听出任何变化。
如果震动的信号幅值上下翻转,可以看成其相位改变了180度。人的耳朵对于相位并不敏感。对于声音信号,乘以-1,人的耳朵是感知不到的。但对于图片中的交流信号乘以-1,则原来的图片就变成了照相底片了。对于这以变化,人的
视觉是很容易感知的。
对于信号的幅度改变,人的耳朵和眼睛具有不同的特性。而且人的耳朵对于声音的感知是一个非线性的关系,即对数关系。这个能力是人类经过长期的进化过程演变而来的。
第二个信号运算是对信号的自变量进行改变,包括有尺度、平移和反褶。这一小题是对信号的尺度变化。请注意,连续时间信号和离散时间信号在尺度变化方面有一定的差异。离散时间信号,通常情况下采用补零拉伸和抽样压缩的方式。这就要求离散时间信号的尺度变化是整数倍数的变化。对于非整数倍数的变化,可以采用近似,或者插值的方式进行逼近。在MATLAB中,可以采用这个命令,直接对于数组进行抽取压缩两倍。相应的说明,请大家参见MATLAB中的基本操作命令帮助文件。对于数组进行扩展,为了不影响信号的连续性,
往往采用插值,或者取最近邻的方法来产生新的信号。
而不再使用插零的方式进行拉伸。这个命令就是将原来的信号拉伸1.5倍。其中
当拉伸后的下标不位于整数点上的时候,则取前面相连数据值。下面听听尺度变化所带来的音效效果。这是压缩两倍后声音效果。节奏变快,音高增加。声音拉伸之后,节奏变慢,音高降低。
同样的音乐,在压缩后感觉变的欢快。在拉伸后,则感到忧伤。对于图片来讲,拉伸和压缩只是带来了大小的变化,人们对于图片本身的信息并没有感到太多的改变。这方面也反映了人类在听觉和视觉方面的差异。
对于信号进行反褶,在MATLAB可以使用flip来简单实现。有一点请注意,flip只是沿着信号中心进行反褶,而不是沿着坐标的 原点进行反褶。下面听听声音反褶后的效果。怎么样?时间反褶后,声音听起来就怪怪的了。如果将语言信号进行反褶,则一般情况下,就很难理解了理解了。
下面听取一个声音信号在反褶后的效果。它对应的反褶之后是这样的。应该说,声音反褶后就无法理解了。利用这种方法可以对语音进行加密。将来学习傅里叶变换后,还可以通过对于频谱的高低频的对调,也可以完成对于声音的加密。对于图片进行反褶,则情形比较复杂。这里显示了图片沿着水平和垂直方向进行反褶后的结果。
对于信号的平移,表现就是信号延迟,或者提前,它本身并没有什么变化。刚才的音频实际上在播放之后,延迟了两秒钟,听起来只是延迟了。对于图片的平移,表现在图片在空间中的位置的改变。
对于连续时间信号可以进行微分和积分运算,对于离散时间信号则对应的是差分和累加运算。在MATLAB中可以使用数组和它的延迟进行相减完成差分;也可以直接使用diff命令进行查复。下面听听音频信号差分后的变化。听觉上,可以感到声音变的比较尖锐了。原来丰富的低频部分消失了。这说明信号的微分、差分突出了信号中的变化部分,对于平缓部分,或者直流分量则进行了衰减。对于图片也可以使用diff进行差分;可以看到查分后,图片中只剩下边缘部分的信息了。将差分后放大五倍,可以更加明显的看出图频差分后是提取了边缘信息。
信号的积分,在离散时间信号中表现为对信号的累加操作。在MATLAB中使用COMSUM进行数组的累加。如果使用这个函数对音频信号进行累加,会发现输出结果范围会大大超出了0至1所允许的取值范围。数值溢出1的范围之后,则在播放的时候就会饱和,听不到任何声音。因此,可以使用MOVSUM命令进行信号的窗口累加。这里使用了前后100个数据进行累加平均。可以听出来,声音中的高频分量被大大衰减了。积分、累加抑制了信号中的变化快的成分。对于图片使用MOVSUM则起到了对于图像进行模糊的作用。
两个信号之间可以进行相加。声音中可以听到他们叠加后的效果。信号中的噪声也通常以叠加的形式加在了信号的上面。将来,可以知道一些滤波的方法去除这些叠加的噪声。同样,将来也会有一些方法,能够使得我们能够尽可能精确的将叠加在一起的信号进行分离。图片也可以通过叠加重合在一起。
信号也可以通过相乘运算作用在一起。这是两个声音信号相乘之后的结果,显得比较凌乱。当一个高频信号和一个低频信号相乘的时候,则会听到幅度在变换中的音调。这是音乐演奏中的技巧。这两两个图片中的交流成分相乘后的结果。
信号的基本运算为我们打开了操作信号的大门。这也为设计和实现更复杂信号处理系统提供了基础手段。在未来的课程中,将会学习更多,更基本的信号处理方法,为迎接工程挑战打下良好的基础。
第二次作业第11小题
作业第11题,是根据信号的波形,求取信号表达式中的参数。
在实际测量得到的信号数据中,通常包含有大量的加性噪声。为了获得更加精确的信号参数,往往需要更多的信号测量数据来估计信号的参数。获取信号波形数据可以通过示波器、计算机的AD采集卡。对于变化缓慢的信号,还可以通过手工的方式进行采集数据。
作业第11题,是假定需要测量一个未知电容的容值。可以使用一个已知阻值的电阻与其串联,然后再施加一个正弦交流信号,通过测量RC串联电路的输入信号U和分压后信号V的参数,便可以求得电容的容值。这是根据电路原理中关于稳定交流电路分析方法,所得到的RC电路的分压公式。
利用上面公式,便可以求出交流信号在RC分压电路上的幅度分压比与R、C、F之间的关系。RC电路也会引起输入输出信号之间的相位变化。这是相位差与R、C、F之间的关系。因此,可以通过测量信号的幅度、或者相位差,再加上信号的频率和已知的电阻,计算出电容的容值。作业中的数据是使用一个可以联网的示波器直接测量实际RC电路所获得的信号波形数据。电路中电阻通过5位半数字万用表测量,阻值为1009欧姆。使用标准的信号源给出幅度为1V,频率为400Hz左右的正弦信号,使用示波器测量输入信号和RC分压后的信号波形,并通过网络读入MATLAB内存。最终存储在CH12.MAT数据文件中供作业使
用。
可以使用load命令将数据文件读入MATLAB工作区;其中两列数据分别是分压后,和分压前交流信号数值。在前面分析中,由于只需要获得信号前后分压比,或者相位差便可以进行求解,所以,并不需要信号波形的绝对数值。信号的采样率,可以从示波器设置上读出,是10微妙,这个参数对于测量信号频率非常重要。在MATLAB中,可以通过fit命令,来对测量信号波形进行参数估计。其中第三个参数,指明信号函数类型。这里fourier参数,说明信号是一个带有直流量、相位角的正弦信号。
fit命令可以根据测量数据获得该正弦信号的直流、cos、sin、以及角频率等参数。关于MATLA中fit指令,大家可以通过MATLAB的联机帮助,或者其它参考书进行学习。在这里就不再累述了。
这里给出了具体实验的步骤。使用load命令调入示波器读取的波形数据;得到数据维度:两个通道,每个通道1400个采样数据;采样频率为10微妙;使用x表示采样时间点向量;使用plot绘制出两个通道的信号波形。使用fit命令对于两个通道波形分别计算出它们的参数;这是第一通道的波形参数这是第二通道的波形参数;根据这些参数,可以分别是算出两个通道内正弦波参数;这是对应的表达式;他们各自的幅值;相位。以及信号的频率。这是RC电路的分压比值。
再往后便可以通过信号幅度的比值,或者相位差计算电容容值了。
这是根据测量的频率、电阻以及RC分压比值计算出电容的大小。这与电容上标称值基本一致。这是一个无极性的电解电容,容值为1微分左右。
这个题目本应该是在第一次作业给出,说明信号的波形可以传递出很多的信息。不仅可以告诉我们信号的种类,同时开可以进一步获得信号参数。在此基础上,可以进行进一步的计算测量,获得更多的信息。
在这里,再给出另外一个信号波形参数估计的应用例子。在智能车比赛的时候,使用法拉电容存储从无线接收线圈获得的电能。使用普通的电容表,是无法测量法拉电容的容值的。可以使用RC放电电路来测量法拉电容的容值。比如右边的电路,给被测法拉电容充上一定电能,然后在已知阻值的电阻上放电,测量电阻放电曲线。根据电路原理可知,放电曲线是一个指数衰减的信号,指数衰减信号的时间常数与RC成正比。这是通过能够联网的万用表测量得到的法拉电容放电曲线,的确是一个指数衰减的形式。下面一个问题,就是如何通过信号波形曲线,获得精确的信号参数呢?
这里给出了实验的步骤。使用fit命令,对于数据进行曲线拟合,曲线的种类选择一个指数衰减信号的形式。指数信号的幅值a和参数b;参数b是衰减时间常数取倒数,再乘以-1.由此,可以根据已经知道的放电电阻R,计算出对应的法拉电容的数值。法拉电容大约为20法拉,这与它的标称值基本一致。
掌握信号参数估计的方法,是未来利用实际数据的基础。当然,这只是信号分析的一种方法。在第三章将要学习的傅里叶变换,是对信号进行分析的另外一个重要的手段。这道题将分析到这里。
第一次作业第6小题
作业第六小题是应用MATLAB中的信号短时傅里叶变换获得信号的时频联合分析。
电话中的双音频编码是BELL实验室提出的电话拨码方案;它是利用声音中的两组不同频率信号的组合传递电话拨码信息;低频群中包括了四个频域,分别是697赫兹;770赫兹;852赫兹以及941赫兹;高频群众定义了三个频率,包括1209赫兹;1336赫兹;1477赫兹。
这样就可以组合成12个编码;对于一个声音,如果能够检测出其中高频和低
频的频率;就可以指出对应的按键编码。现在可以通过专用的数字处理芯片直接获得双音频解码;也可以通过计算软件进行解码。
下面为了介绍信号的时频联合分析所能够带来的信息。我们使用MATLAB录制一段塑料喇叭的音节,来看一下对应的时频分布。在MATLAB中使用audiorecorder命令建立录音对象。然后使用命令recordblocking开始录制五秒
中的声音;现在已经录制完毕,使用play命令回放一下;使用getaudiodata命令获得录音数据,使用plot命令绘制录制声音的波形;下面使用spectrogram命令绘制声音信号的短时傅里叶变换,即信号的时频联合分析。
下面介绍一下实验中所使用的几个常用命令。通过audioread读取录制好的音频文件。可以是wav格式文件,也可以MP3格式的音频文件。函数返回两个参数;
前面的是音频文件对应的数据,如果是立体声音频,则数据是2维数组;后一个参数是音频的采样频率。使用spectrogram命令可以获得信号的短时傅里叶变换。第一个参数是进行变换的数据;
第二个参数是短时傅里叶变换的窗口数据长度;第三个参数是相邻窗口重叠数据长度;第四个参数指明显示频率范围。第五个参数为数据的采样频率。最后一个说明频谱数据显示的格式。
作业第一个音频是使用MATLAB合成的双音频数据,先听一下对应的声音。这个音频总共包括了23个按键编码声音。通过对照可以看到,它实际上是圆周率前23位有效数字。
第二个音频中嵌入了一个首先的“信号”文字。大家听一下对应的音频。这个声音是我使用MATLAB合成的音响。
第三个音频中嵌入了图片,如果使用2048,1024作为变换参数。会发现图像不是特别清楚。如果提高一下短时傅里叶变换的数据帧长度,时频联合分布中的图像就会清晰起来。将图片的对比度增加一下,可以看清声音中的人物肖像的模样了。
关于信号的频谱分析,将会在信号与系统课程的第三章进行重点学习。