Bilbili视频:MATLAB 编写简易电子琴

声音模型

声音本质是机械振动产生的波通过介质传播至人耳,这一振动可由函数x ( t ) x(t)x(t)表示,离散化后即为向量x n x_nxn​以及采样率f s f_sfs​,且满足x n = x ( t n ) , t n = n / f s x_n=x(t_n), t_n=n/f_sxn​=x(tn​),tn​=n/fs​.

而MATLAB 中可用sound(x,fs)函数发出一段声音,如下面的代码运行后将发出一段白噪声:

x=normrnd(0,1,1,10000);

fs=5000;

sound(x,fs)1

2

3

琴弦则近似以如下方式振动(数学物理方法等教材有介绍):

x ( t ) = ∑ n = 1 N A n s i n ( 2 π f n t + ϕ n ) x(t)=\sum_{n=1}^{N}A_nsin(2\pi f_nt+\phi_n)x(t)=n=1∑N​An​sin(2πfn​t+ϕn​)

其中基频 f 1 f_1f1​ 决定声音的音高,f n , n > 1 f_n, n>1fn​,n>1决定音色。基频与音阶的部分对应表如下(没有加升降音):

E4 329.63

F4 349.23

G4 392

A4 440

B4 493.88

C5 523.25

D5 587.33

E5 659.25

F5 698.46

G5 783.99

A5 880

B5 987.77

C6 1046.5

D6 1174.66

E6 1318.51

F6 1396.91

G6 1567.98

A6 1760

B6 1975.53

于是,在MATLAB中发出A4音的代码如下:

fs=5000;

t=0:1/fs:1;

f=440;

x=sin(2*pi*f*t);

sound(x,fs)1

2

3

4

5

音色

除基频f 1 f_1f1​外,还有由高阶模式振动产生的倍频,各本征频频的振幅 A n A_nAn​以及相位ϕ n \phi_nϕn​确定了声音的音色,简单起见,假定ϕ 0 = 0 \phi_0=0ϕ0​=0。并加入一个衰减:

x ( t ) = e − t 2 / 2 t 0 2 ∑ n = 1 N A n s i n ( 2 π f n t ) x(t)=e^{-t^2/2t_0^2}\sum_{n=1}^{N}A_nsin(2\pi f_nt)x(t)=e−t2/2t02​n=1∑N​An​sin(2πfn​t)

从网上找到一段任意音高的钢琴音,傅里叶变换后频谱如下:

记录下前八个本征频率对应的振幅A n A_nAn​如下:

645.4

183.7

30

20

20

20

20

56

简易电子琴

编写函数piano(f,amp),其中f 为基频,amp为最低的数个本征频率对应的振幅,其中f通过查找键盘输入的音阶对应的频率得到。再循环运行此函数即可

代码如下:

Amp=xlsread('Amp.xlsx');

Amp=1/max(Amp)*Amp;

n=length(Amp);

f=xlsread('frequency.xlsx','B:B');

%To input "exit" to exit

IN=0;

or=1;

while 1 IN=input('','s'); switch IN case 's' or=1; case 'a' or=0; case 'd' or=2; case '1' piano(f(or*7+1),Amp); case '2' piano(f(or*7+2),Amp); case '3' piano(f(or*7+3),Amp); case '4' piano(f(or*7+4),Amp); case '5' piano(f(or*7+5),Amp); case '6' piano(f(or*7+6),Amp); case '7' piano(f(or*7+7),Amp); case 'exit' break otherwise disp('Again'); end

end

function p=piano(f,amp)

fs=32000;

t=0:1/fs:1;

x=0*t;

n=length(amp);

for i=1:n x=x+amp(i)*sin(2*pi*f*i*t);

end

x=x.*exp(-1/(2*0.3^2)*t.^2);

sound(x,fs)

p=1;

end1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

这一电子琴小程序是写着玩的,非常简陋,一个较大的问题就是弹奏很难连续。如果有改进建议欢迎留言

文章来源: blog.csdn.net,作者:certate,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/certate/article/details/113736573

matlab电子琴,MATLAB 编写简易电子琴相关推荐

  1. MATLAB 编写简易电子琴(二)

    前几天用MATLAB做了一个简易电子琴,链接: MATLAB 编写简易电子琴 这个电子琴输入用的input函数,每按一个字符要敲回车,现在用另一种方法解决了这个问题: 使用 set(gcf,'KeyP ...

  2. 用matlab编程简单电子琴,基于MATLAB的数字信号发生器及简易电子琴设计论文.doc...

    基于MATLAB的数字信号发生器及简易电子琴设计论文 基于MATLAB的数字信号发生器及简易电子琴设计 摘 要 数字信号发生器是一种基于软硬件结合实现的函数波形产生仪器.在工程实践中需要检测和分析的各 ...

  3. 基于matlab的数字信号发生器及简易电子琴设计,简易电子琴电路的设计仿真与实现课程设计...

    简易电子琴电路的设计仿真与实现课程设计 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 信息工程学院 题 目: 简易电子琴电路的设计仿真与实现 初始条件: 可选元件:集成运算放大器LM ...

  4. 基于VHDL的FPGA简易电子琴(实现三音阶切换与弹奏)

    目录 一.设计内容简介 二.系统框图 1.简易框图 2.总电路图(quarters软件自动生成) 三.代码说明 1.总体代码 2.代码思路 四.仿真实现结果与分析总结 1.仿真思路 2.仿真建立过程 ...

  5. 基于AT89C52单片机的简易电子琴设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853299?spm=1001.20 ...

  6. [Verilog HDL]简易电子琴_北京邮电大学2019级信通院数字电路实验

    摘要: 本次实验使用硬件描述语言 Verilog HDL,针对以 Altera 公司的 MAX II 系列可编程器 件 EPM1270T144C5 为核心芯片的可编程器件实验板设计实验简易电子演奏琴, ...

  7. 基于8086简易电子琴系统仿真设计、基于8086红外自动门控制胸设计-全套设计资料【转发】

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  8. 基于8086简易电子琴系统仿真设计-基于8086红外自动门控制系统设计-基于单片机8x8矩阵键盘两机串口通信-基于单片机8层电梯控制系统仿真设计-基于单片机ADC0809和DAC0832模数和数模设计

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  9. VHDL简易电子琴的设计

    主要内容:本课程设计主要是利用硬件描述语言VHDL的设计思想,采用自顶向下的方法,划分模块来设计简易电子琴中的几个模块.通过课程设计深入理解和掌握计算机的基本知识,并且掌握课堂上所学到的理论知识,达到 ...

最新文章

  1. 明早10点大讲堂 | 一种新型光幕传感器在机器人避障和无人驾驶中的应用
  2. 2018 年值得关注的 Web 设计趋势
  3. 发布 项目_第十八期科创基金项目发布会圆满结束
  4. C/C++预处理指令
  5. Entropay(欧贝通)
  6. WordPress网站迁移数据最佳解决方案
  7. 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt
  8. LeetCode004-寻找两个正序数组的中位数(Median of two sorted arrays)-Rust语言实现
  9. 如何在openGauss 2.1.0中使用Job?
  10. pytorch: Tensor的创建与调整
  11. Bailian2935 有未知数的表达式【递归】
  12. AES、DES加解密方法(Java和JS编程)
  13. 3.4实训任务 Hadoop环境搭建与安装
  14. U盘量产工具_修复、U盘写保护无法格式化、U盘文件乱码格式
  15. SpringMVC中get请求中文乱码问题
  16. 利用ESP8266与米思齐从零制作模拟温室大棚--接线篇
  17. 要点初见:Stable Diffusion NovelAI模型优质文字Tag汇总与实践【魔咒汇总】
  18. vue3视频播放插件vue3-video-play的具体使用方法
  19. MSTP多实例配置实验
  20. 全面理解云上网络技术

热门文章

  1. 跨境大卖通拓获2241万退税补助;Shopee发布2022年春节放假安排;亚马逊全球开店公布2022年战略...|洞悉跨境
  2. 计算机主机箱的合格标准,计算机主机箱的制作方法
  3. c#.net淘宝客基础api练手日记
  4. 2019 vs 安装odt_2019年12月10日罗马协会直播预告
  5. 酷睿处理器(cpu)的型号分别代表什么?
  6. 以太坊可用RPC节点列表
  7. 单机电机并联接线方式的区别?
  8. 工作效率咋提升?还得看这几款可以做思维导图的软件
  9. 塔吊塔机远程告警监测设备
  10. 关于windows无法连接网络打印机的可能原因之一