fs=8000;
NFFT = 2^nextpow2(length(y));
Y = fft(y,NFFT)/length(y);
g = fs/2*linspace(0,1,NFFT/2+1);
plot(g,2*abs(Y(1:NFFT/2+1)))
运行后获得的成果为
经由过程增添can的周期性显示出离散化水平高的幅值谱 , 即让can在时域反复多次后在进行傅里叶变换 。
操纵repmat函数将can在时域内反复 。 法式可点窜为:
clear;clc;
WAV= audioread('can.wav');
fs=8000;
wave2proc =repmat(WAV,20,1); %将 can反复20次
NFFT = 2^nextpow2(length(WAV));
Y = fft(WAV,NFFT)/length(WAV);
g = fs/2*linspace(0,1,NFFT/2+1);
plot(g,2*abs(Y(1:NFFT/2+1)))
由图读出can的基频为329.1Hz , 幅值为2.451 , 高次谐波幅值别离为:
2.2 按照快速傅里叶变换合当作音乐
将法式中的波形幅度矩阵
m=[1 0.3 0.2 0.1]
改为
m=[2.0912 4.0597 4.7156 7.5215 5.6484 4.9845 3.4894 2.4568];
即可
法式如下
clear;clc;
fs=8000; %抽样频率
part1=[fre(67) fre(72) fre(72) fre(74) fre(76) fre(72) fre(76) fre(74) fre(71)];
part2=[fre(72) fre(72) fre(74) fre(76) fre(72) fre(71) fre(67)];
part3=[fre(72) fre(72) fre(74) fre(76) fre(77) fre(76) fre(74) fre(72) fre(71) fre(67) fre(69) fre(71) fre(72) fre(72)];
part4=[fre(69) fre(71) fre(69) fre(67) fre(69) fre(71) fre(72)];
part5=[fre(67) fre(69) fre(67) fre(65) fre(64) fre(65) fre(67)];
part6=[fre(69) fre(71) fre(69) fre(67) fre(69) fre(71) fre(72)];
part7=[fre(67) fre(72) fre(71) fre(74) fre(72) fre(72)];
para1=[part1 part2 part3 ];
para2=[part4 part5 ];
para3=[part6 part7 ];
f=[para1 para2 para3]; %各个乐音对应的频率
part1time=[0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25];
part2time=[0.25 0.25 0.25 0.25 0.5 0.25 0.25];
part3time=[0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5];
part4time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];
part5time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];
part6time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];
part7time=[0.25 0.25 0.25 0.25 0.5 0.5];
para1time=[part1time part2time part3time ];
para2time=[part4time part5time ];
para3time=[part6time part7time ];
time=fs*[para1time para2time para3time];%各个乐音的抽样点数
N=length(time); %这段音乐的总抽样点数
east=zeros(1,N); %用east标的目的量来储存抽样点
n=1;
for num=1:N %操纵轮回发生抽样数据 , num暗示乐音编号
t=1/fs:1/fs:time(num)/fs; %发生第num个乐音的抽样点
baoluo=zeros(1,time(num)); %P为存储包络数据的标的目的量
for j=1:time(num)
if(j<0.2*time(num))
y=7.5*j/time(num);
else
if(j<0.333*time(num))
y=-15/4*j/time(num)+9/4;
else
if(j<0.666*time(num))
y=1;
else
y=-3*j/time(num)+3;
baoluo(j)=y;
h=[2.0912 4.0597 4.7156 7.5215 5.6484 4.9845 3.4894 2.4568];
xiebo=zeros(1,length(t));
for i=1:length(n)
xiebo=xiebo+h(i)*sin(2*i*pi*f(num)*t);
east(n:n+time(num)-1)=xiebo.*baoluo(1:time(num));
n=n+time(num);
sound(east,8000) %播放音乐
plot(east) %图像
推荐阅读
- 怎样使用支付宝中的财富王者
- 怎么用PR2018将视频做成电影风格的上下白边
- wps演示中如何制作出草地纹理效果的字体
- php如何取得指定索引位置上的元素内容
- 电脑上的图标不见了怎么恢复
- 念念手帐怎么删除手帐本里面的内容
- 钉钉如何拒收未知联系人的消息
- 隔夜茶的8种妙用方法
- 大麦茶的功效
- 白醋加茶叶有美容的功效