盛群单片机学习心得 本文关键词:单片机,学习心得
盛群单片机学习心得 本文简介:随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时/数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,因此单片机早期的含义称为单片微型计算机,直译为单片机。单片机是微型计算机应用技术的一个重要分支,近年来在工业智能仪器仪表、光机电设备、自动检测、信息处理、家电等的得到广
盛群单片机学习心得 本文内容:
随着大规模集成电路的出现及其发展,将计算机的CPU
、RAM
、
ROM
、定时/数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,因此单片机早期的含义称为单片微型计算机,直译为单片机
。
单片机是微型计算机应用技术的一个重要分支,近年来在工业智能仪器仪表、光机电设备、自动检测、信息处理、家电等的得到广泛应用和迅速发展。单片机是自动地进行运算和控制,把实现计算和控制的步骤一步步地用命令的形式,即一条条指令预先存入到存贮器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行,得到你要的东西。
这学期在老师的带领下,我从对单片机一无所知的到现在终于有点了解,这期间虽然没有在这方面下很大的功夫,但是也学到了一点知识,从点亮一个灯,到流水灯再到数码管的显示以及后面独立按键。这都是我以前无法想象的。
单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书。单片机并不象传统的数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”的原因使得许多初学者怎么也弄不懂单片机的工作过程,怎么也不明白为什么将几个数送来送去就能让数码管显示一串字符或控制一个电机的变速。对初学单片机的人来说,需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥乏味而半途而废。简单的说,使用单片机实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器。再简单些,就是控制单片机哪些引脚的电平什么时候输出高电平,什么时候输出低电平。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。
学习单片机首先用到c语言,提到C语言源文件,大家都不会陌生。因为我们平常写的程序代码几乎都在这个XX.C文件里面。编译器也是以此文件来进行编译并生成相应的目标文件。作为模块化编程的组成基础,我们所要实现的所有功能的源代码均在这个文件里。理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内部的实现细节。在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。
谈及到模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。
假设我们有一个LCD.C文件,其提供最基本的LCD的驱动函数
。在当前位置输出一个字符
而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢?
头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体,好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。
接着我学习到了中断系统。中断装置和中断处理程序统称为中断系统。中断即单片机在执行某一段程序的过程中,由于单片机系统内部或者外部的某种原因,有必要中止原程序的执行,而去执行相应的处理程序,待处理结束后,再返回来继续执行原程序的过程。中断处理过程分为中断请求、中断响应、中断处理和中断返回。中断使单片机对外部或内部随机发生的事件具有实时处理的能力。大多数中断系统都具有如下几方面的操作,这些操作是按照中断的执行先后次序排列的。①接收中断请求。②查看本级中断屏蔽位,若该位为1则本级中断源参加优先权排队。③中断优先权选择。④处理机执行完一条指令后或者这条指令已无法执行完,则立即中止现行程序。接着,中断部件根据中断级去指定相应的主存单元,并把被中断的指令地址和处理机当前的主要状态信息存放在此单元中。⑤中断部件根据中断级又指定另外的主存单元,从这些单元中取出处理机新的状态信息和该级中断控制程序的起始地址。⑥执行中断控制程序和相应的中断服务程序。⑦执行完中断服务程序后,利用专用指令使处理机返回被中断的程序或转向其他程序。
接着又了解了定时器。定时/计数器是单片机的一个重要组成部分,为设计者提供了与时间有关的功能的实现方法。定时、计数是同一个部件不同功能的体现:定时,是对单片机内部系统时钟作用下产生的固定时间间隔的脉冲进行计数来实现定时;计数,是对单片机外部引脚上触发的脉冲进行计数。HT46R232
有两个定时/计数器(TMR0,TMR1)。定时/计数器0
是16
位向上计数的,其时钟来源可以是外部信号输入或内部时钟,内部时钟为fSYS。定时/计数器1
是16
位向上计数的,其时钟来源可以是外部信号输入或内部时钟,内部时钟为fSYS/4。定时器有几种工作模式。1、定时模式(即普通的定时器)用来定时固定的时间间隔,当定时器溢出时,产生一个内部中断信号。写入TMR0L(TMR1L)只能将数据写到低字节缓冲器(8
位)
,而写入TMR0H(TMR1H)会把指定数据和低字节缓冲器的数据分别写到TMR0H(TMR1H)和TMR0L(TMR1L)预置寄存器中,定时/计数器0/1
预置寄存器的内容只有在写入TMR0H(TMR1H)时才会被改变。读取TMR0H(TMR1H)会把TMR0H(TMR1)的内容送至目标单元,而TMR0L(TMR1L)的值被送至低字节缓冲器中;读TMR0L(TMR1L)将读取低字节缓冲器的值。无论是定时模式还是外部事件计数模式,一旦开始计数,定时/计数器会从寄存器当前值向上计到0FFFFH。一旦发生溢出,定时/计数器会从预置寄存器中重新加载初值,并开始计数;同时置位中断请求标志。T0ON/T1ON只能用指令清除。在定时/计数器停止计数时,写数据到定时/计数器的预置寄存器中,同时会将该数据写入到定时/计数器。但如果在定时/计数器运行时这么做,数据只能写入到预置寄存器中,直到发生溢出时才会将数据从预置寄存器加载到定时/计数器寄存器。读取定时/计数器时,计数会被停止,以避免发生错误;计数停止会导致计数错误。2、外部事件计数模式,测量外部引脚的逻辑电平改变的次数。3、脉冲宽度测量模式,一次测量一个外部引脚的脉冲宽度。
后来还学习了A/D转换。即将模拟量转换为数字量。首先将输入的模拟电压信号按照某一时间节拍进行采样,并将采样结果进行保持,在保持的时间内将采样的电压量化为数字量,并按一定的编码形式给出转换结果。HOLTEK
MCU的A/D转换器采用的是逐次逼近式A/D转换方式。逐次逼近法的A/D转换器是由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成。基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码进行试探。逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为
Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo Vo再与Vi比较,若Vo 接着又学到了PWM输出,脉宽调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。简而言之,PWM是一种对模拟信号电平进行数字编码的的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。HT46R232(28脚封装)有2个通道(6+2)/(7+1)位的PWM输出(由掩膜选项决定),与PD0/PD1共用引脚。PWM 计数器的时钟来源为系统时钟(fSYS),由数据寄存器PWM0(1AH)、PWM1(1BH) 来控制输出。。一旦PD0/PD1选择为PWM 输出,并且PD0/PD1为输出模式(PDC.0/PDC.1=“0”),则向PD0/PD1 寄存器写“1”能够产生PWM 输出,向PD0/PD1 寄存器写“0”会使PD0 输出保持为“0”。 通过这一学期的学习,从面临的问题的模糊认识到最后能够对该问题有深刻的认识,我体会到实践对于学习的重要性,以前只是知道一点很表面、很狭隘的知识,没有经过实践考察,对知识的理解不够明确,通过这次从网上找这方面的材料、科研论文,以及仿照编程,真正体会到单片机的无穷魅力与博大精深。要做好一个完整的事情,需要有系统的思维方式和方法,对待要解决的问题,要耐心、要善于运用已有的资源,以及主动搜集资料来解决问题、从而深化学习、充实自己。同时我也深刻的认识到,在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样才能更加有效。
篇2:avr单片机中使用MODBUS协议的方法
avr单片机中使用MODBUS协议的方法 本文关键词:机中,协议,方法,avr,MODBUS
avr单片机中使用MODBUS协议的方法 本文简介:Avr单片机中使用modbus协议的方法有幸做了个项目,其中使用到了单片机和上位机通讯的程序,上位机用组态实现功能,探索了些方法,写出来和大家分享一下,这些知识本不是什么秘密,本人参考了许多资料,自己整合了一下。每种程序都是算法多样,最终功能实现就行。大家做单片机串口通讯时是不是总想有一种以不变应万
avr单片机中使用MODBUS协议的方法 本文内容:
Avr单片机中使用modbus协议的方法
有幸做了个项目,其中使用到了单片机和上位机通讯的程序,上位机用组态实现功能,探索了些方法,写出来和大家分享一下,这些知识本不是什么秘密,本人参考了许多资料,自己整合了一下。每种程序都是算法多样,最终功能实现就行。
大家做单片机串口通讯时是不是总想有一种以不变应万变的思想,就是在底层单片机硬件和软件不变的情况下,去适应任何上位机软件系统,当然可以实现,这就需要用到标准的通讯协议了,以下我就和大家分享一下我做的modbus协议(单片机端),如果上位机用组态软件的情况下,你直接使用通讯协议就行它会自动和单片机通讯。
大家在设计单片机程序时首先要定义好数据结构,先构想一下需要哪些采集数据,上位机需要查询什么数据,数据的类型和全局与否,运算的精度等等。然后把上位机需要采集的数据用一个数组管理起来,便于modbus协议的实现。单片机里串口通讯程序尽量用查询发送,中断接收的方式,要定义发送缓冲区和接收缓冲区,以便提高系统效率。以下程序用gcc实现,单片机用avr单片机。
ISR(USART0_RX_vect)//串口0接收中断服务程序
{
volatile
unsigned
char
status,data;
cli();//关中断
status
=
UCSR0A;//ucsr0a赋值状态标志
data
=
UDR0;//接收的数据放入data变量
usart0_rx_complete=0;//接收完成标志赋值0,还没有完成
if
((status
//接收缓冲区指针加一
switch
(usart0_rx_count)
{
case
1:
if(data==add//第一个字节是地址,读入内部本机地址进行比较
{
usart0_rx_buf[0]=data;
TIMSK0=0x01;//启动定时器0,进行超时控制
}
else
{
usart0_rx_count=0;
}
break;
case
2:
if
(((data==0x03)||(data==0x01)||(data==0x05)||(data==0x10))==0)//如果第一位不等于读指令0x03,01,05,10功能码,则清接收缓冲区指针
{
usart0_rx_count=0;
}
else//等于这几个功能码则进行,则将他放入接收数组,并预计接收数组长度,不是10码时都是8个字节
{
usart0_rx_buf[1]=data;
if
(data!=0x10)
{
rx0_buf_size=8;
}
}
break;
case
3:
usart0_rx_buf[2]=data;
break;
case
4:
usart0_rx_buf[3]=data;
break;
case
5:
usart0_rx_buf[4]=data;
break;
case
6:
usart0_rx_buf[5]=data;
break;
case
7:
usart0_rx_buf[6]=data;//10码时接收的字节计数
if
(usart0_rx_buf[1]==0x10)
{
rx0_buf_size=9+usart0_rx_buf[6];
}
break;
case
8:
usart0_rx_buf[7]=data;//1,用10功能码时有效的数据位,system_reg_data的数据,这里规定最多接收26个字节(不带crc)
break;
case
9:
usart0_rx_buf[8]=data;//2
break;
case
10:
usart0_rx_buf[9]=data;//3
break;
case
11:
usart0_rx_buf[10]=data;//4
break;
case
12:
usart0_rx_buf[11]=data;//5
break;
case
13:
usart0_rx_buf[12]=data;//6
break;
case
14:
usart0_rx_buf[13]=data;//7
break;
case
15:
usart0_rx_buf[14]=data;//8
break;
case
16:
usart0_rx_buf[15]=data;//9
break;
case
17:
usart0_rx_buf[16]=data;//10
break;
case
18:
usart0_rx_buf[17]=data;//11
break;
case
19:
usart0_rx_buf[18]=data;//12
break;
case
20:
usart0_rx_buf[19]=data;//13
break;
case
21:
usart0_rx_buf[20]=data;//14
break;
case
22:
usart0_rx_buf[21]=data;//15
break;
case
23:
usart0_rx_buf[22]=data;//16
break;
case
24:
usart0_rx_buf[23]=data;//17
break;
case
25:
usart0_rx_buf[24]=data;//18
break;
case
26:
usart0_rx_buf[25]=data;//19
break;
case
27:
usart0_rx_buf[26]=data;//20
break;
case
28:
usart0_rx_buf[27]=data;//21
break;
case
29:
usart0_rx_buf[28]=data;//22
break;
case
30:
usart0_rx_buf[29]=data;//23
break;
case
31:
usart0_rx_buf[30]=data;//24
break;
case
32:
usart0_rx_buf[31]=data;//25
break;
case
33:
usart0_rx_buf[32]=data;//26
break;
case
34:
usart0_rx_buf[33]=data;//27
break;
case
35:
usart0_rx_buf[34]=data;//28
break;
}
if(usart0_rx_count>=rx0_buf_size)//串口0接收到了指定个数的数组则
{
usart0_rx_count=0;//接收缓冲区指针清零
usart0_rx_complete=1;//串口0接收完标志
time0_num=0;//串口0的中断次数清零。它是超时控制的依据
TIMSK0=0x00;//收到数据后则停止定时器0不进行超时控制
}
}
else
{
usart0_rx_count=0;
}
sei();
//开中断
}
以上中断接收程序可以实现上位机发来的0x03,01,05,10功能码指令,并且可以自动判断上位机发来10功能码的包长。大家首先要深入了解modbus通讯协议的内涵,仔细体会各行程序的含义。其中本人加入了对通讯的超时控制,实际应用中很有必要。
前面已经将上位机发来的命令,用中断接收的方式存入了单片机的接收缓冲区,中断服务程序不能执行太长时间,所以要将对指令的解读放入了主程序里。
把对modbus指令的解读程序列出,如下,只给出框架,因为每种应用是不一样的,需自己加入。
void
run_modbus(void)
{
switch
(usart0_rx_buf[1])
{
//判断主机发来的modbus
功能码是什么
case
0x01://读继电器输出的当前状
要加入回传数据
break;
case
0x03://功能码03
要加入回传数据
break;
case
0x05://05功能码
要加入回传数据
break;
case
0x10://10功能码
要加入回传数据
break;
}
}
以上程序完全依赖一个提供给上位机数据的数组,自己要仔细排列好数据顺序,定义好长度。
这里的程序使用一年有余完全正确和稳定。
以上是基于串口实现的,信息高速发达的今天串口已经力不从心了。关于通讯,建议大家面向未来,了解一下can总线网络通信,嵌入式工业以太网网络通信、zigbee无线网络通信、IrDA无线遥控通信、wifi无线网络通信、gprs通信等等,本人喜欢zigbee,精力有限不能全学啊。有心得会继续分享。
篇3:单片机实现MIDI音乐知识介绍
单片机实现MIDI音乐知识介绍 本文关键词:单片机,知识,介绍,音乐,MIDI
单片机实现MIDI音乐知识介绍 本文简介:单片机实现MIDI音乐相关知识介绍1.乐音基础知识2.midi知识3.乐理知识4.乐器分类和波形乐音基础知识:从听觉角度来讲,声音主要由四种属性——高低、长短、强弱、色彩(即常说的音色)。其中:1.音的高低是由发音源在一定时间内的振动次数(频率)来决定的。振动次数越多,频率越高,音也就越高。反之则低
单片机实现MIDI音乐知识介绍 本文内容:
单片机实现MIDI音乐相关知识介绍
1.
乐音基础知识
2.
midi知识
3.
乐理知识
4.
乐器分类和波形
乐音基础知识:
从听觉角度来讲,声音主要由四种属性——高低、长短、强弱、色彩(即常说的音色)。其中:
1.
音的高低是由发音源在一定时间内的振动次数(频率)来决定的。振动次数
越多,频率越高,音也就越高。反之则低;
2.
音的长短是由发音源振动时所持续的时间来决定的。持续的时间越长,音越长,反之则短;
3.
音的强弱取决于由发音源的振动幅度(振幅),幅度越大,音越强,幅度小音就弱;
4.
而发音源的材质、形状及泛音数的多少则决定了音色。
声音的以上这四种属性,在音乐的表现中都是非常重要的,其中又以“高低”和“长短”最为重要。比如一首歌曲,本来是由人声演唱的,但是如果我们把它改编为器乐曲、并且减小音量,虽然改变了音的长短和音色,但是仍然可以很容易地分辨出它的旋律。但是,如果我们把这首乐曲中每个声音的长短、高低随意的改变
,其原来的旋律马上会受到严重的破坏——面目全非呀!由此可见,无论是创作、演奏、歌唱的时候都应该对声音的高低(音高)和长短(即后面
要谈到的“时值”、“节奏”)加以特别的注意。
由于物体在振动的时候并不是总是规则的,所以声音又有“乐音”和“噪音”之分。规则振动发出的是乐音,反之则称为噪音。在音乐中,用的最多的是乐音,但是这并不代表噪音就不属于音乐的组成部分,乐队中的大部分节奏打击乐
器所发出的声音就属于噪音,但它同样具有非常丰富的音乐表现力,甚至成为了现代通俗音乐中不可缺少的部分。
最后,还需要再提到的一点是——我们平时听到的某一个音都不只是一个单独的纯正的音在响,而是许多个声音的结合,我们称之为“复合音”。这是因为物体在振动的时候不仅整体在振动,而且各个部分也在振动。以吉他为例,在我们拨响一根琴弦地的同时,这根琴弦的1/2、1/3、1/4……各个部分也都在分别振动。这种由琴弦(发音源)整体振动产生的声音称为“基音”,是最容易被人耳听到的音。其它部分振动产生的音,称为“泛音”在与基音同时发声的时候是不容易被听到的,除非我们刻意地抑制基音,突出泛音
MIDI知识:
了解midi这部分实际是对和弦音樂程式在EM78806
C上的谱子部分了解。
可以进行这样的想象:如果我们听到一首音乐是一个人独奏吉它发出来的,MIDI则相当于该独奏曲的乐谱。虽然乐谱本身不能产生出任何实际的声音来,但是乐谱确定了音乐演奏得有多快,拨哪个音符,以及应该用多大的力度弹奏吉它。MIDI技术的一大优点是它送到和存储在你电脑里的数据量相当小就MIDI信号(或数据)本身而言,不过只是一堆数据而已,没有任何的声音。是Music
Instrument
Digital
Interface的缩写,意思是:音乐设备的数字化界面(或连接)。我们可以把一大堆乐器的音色先录下来,然后每个音色给它一个编号。比如Acoustic
Piano编号为00。接着再给所有的音高也用一串编号表示(因为我们通常用的是12平均律),比如C3音我们编号为00。剩下就是音符的时值问题,我们可以把8分音符编号为60。好,
现在如果要一个原声钢琴8分音符的C3音,就可以用一串数字“00
00
60”来表示。
乐理知识:
聲音三要素:
(一):音高(pitch)聲波頻率的高低
(二):音量(volume)聲波振幅的高低
(三):音色(timbre)基音和泛音所組合的頻率成分
樂曲組成要素:
(一):Tempo:
beat
per
minute(拍子)
每分鐘的拍數(其中beat為樂譜中表示音符長度的單位)
一般可見beat長度-1/16,1/8,1/4,1/3,1/2,1,2,4
(二):Pitch
Scale(音阶)每個八度有12個半音(12平均率)
-C,C#,D,D#,E,F,F#,G,G#,A,A#,B每個八度音高差兩倍
-A3:
220Hz,A4:
440Hz,A5:
880Hz每個半音之間音高相差12√2
下面描写了2-7个频段中个音符的频率
2
3
4
5
6
7
C
32.70
65.41
130.81
261.63
523.25
1046.50
C#
34.65
69.30
138.59
277.18
554.37
1108.73
D
36.71
73.42
146.83
293.66
587.33
1174.66
D#
38.89
77.78
155.56
311.13
622.25
1244.51
E
41.20
82.41
164.81
329.63
659.26
1318.51
F
43.65
87.31
174.61
349.23
698.46
1396.91
F#
46.25
92.50
185.00
369.99
739.99
1479.98
G
49.00
98.00
196.00
392.00
783.99
1567.98
G#
51.91
103.83
207.65
415.30
830.61
1661.22
A
55.00
110.00
220.00
440.00
880.00
1760.00
A#
58.27
116.54
233.08
466.16
932.33
1864.66
B
61.74
123.47
246.94
493.88
987.77
1975.53
乐音的四要素
乐音四要素是:音强、音高、音色和波形包络。现将它们的含义分述如下:
1.音强
音强就是人们在听闻时感到的响度,也就是我们通常说的声音的强弱或大、小,重,轻。它是人耳对声音稳弱的主观评价尺度之一。其客观评价尺度——也即物理量的测量,是声波的振幅。
声频范围也就是人们可以听到的声振动频率范国,为20赫到20千赫。20赫以下称为次声,20千赫以上称为超声。在声频频率范围内,人耳对中频段1~3千赫的声音最为灵敏,对高、低频段的声音,特别是低频段的声音则比较迟钝。人耳还有一种特征,对很强的声音,感觉其响度与频率的关系不大,或者说同振幅的各频率的声音,听起来响度差不多.但对低声级信号(即很轻的声音),感觉到它的响度与频率关系甚大:对于同样振幅的声音,低、高频段的声音听起来响度比中频段的轻。
2.音高
音高或称音调,是人耳对声音调子高低的主观评价尺度。它的客观评价尺度是声波的频率。和音强与振幅的关系不一样,音高与频率基本上是一致的。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程。音乐中的1(do)与i,正好相差一个倍频程,在音乐学中也称相差一个八度音。在一个八度音内,有12个半音。以1—i八音区为例,
12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#—5、5一#5、#5—6、6—#6、#6—7、7—i。请注意,这12个音阶的分度基本上是以对数关系来划分的。
各种不同的乐器,当演奏同样的频率的音符时,人们感觉它们的音高相同,这里指的演奏的声音具有同样的基频。但乐器每发一个音,这个音除了具有基频fo,以外,还有与fo成正
整数倍关系的谐波。前面说过,每个音的音高感觉由fo决定,而每种乐器的不同各次谐波成分,则决定乐器特有的音色
3音色
人们除对响度、音高有明显的都别力外,还能准确地判断声音的“色调”。单簧管、圆号虽然演奏同一音高(基频)的音符,但人们能够明确分辨出哪个是单管管,哪个是圆号,而不会混淆。这是由于它们的音色、波形包络不同。音色决定于乐音的泛音(谐波)频谱,也可以说是乐音的波形所确定的。因为乐音的波形(可由电子示波器上看到)绝大多数都不是简单的正弦波,而是一种复杂的波。分析表明这种复杂的波形,可以分解为一系列的正弦波,这些正弦波中有基频f0,还有与f0成整数倍关系的谐波:f1、f2、f3、f4,它们的振幅有特定的比例。这种比例,赋予每种乐器以特有的“色彩”一—音色。如果没有谐波成分,单纯的基音正弦信号是毫无音乐感的。因此,乐器乐音的频率范围,决非只是基频的频率范围,应把乐器乐音的各次谐波都包括在内,甚至很高次数的泛音,对乐器音色影响仍很大。
4.波形包络
乐音的波形包络指乐音演奏(弹、吹、拉,拨)每一音符时,单个乐音振幅起始和结束的瞬态,也就是波形的包络。有些乐器,在弹、吹、拉、拨的开始一瞬间,振幅马上达到最大值,然后振幅逐步衰减,有的乐器则相反,在开始的瞬间振奋较小,然后逐渐加大,再逐渐衰减。这些波形包络变化也影响乐器的音色。
樂器及波形:
一、
樂器分類:
一般樂器大致可以分成三類
1.
銅管樂器:
如
小號,法國號,長號,上低音號與低音號等
2.
木管樂器
如
長笛,豎笛,薩克斯風等
3.
打擊樂器(分有調打擊樂器跟無調打擊樂器)
無調打擊樂器(音高不變的):
如
大鼓,小鼓,鈸,三角鐵,響板等
有調打擊樂器(音高富於變化):
如
定音鼓,木琴,鐵琴等
二、
波形:
钢琴
钢琴放大图
小号
小号放大