赞
踩
实验内容大致如下:
1、语音信号的获取;
2、语音信号的运算,包括平移和反褶、相加、相乘;
3、周期信号的有限项傅里叶级数合成;
4、语音信号的频谱分析;
5、连续时间信号的抽样;
6、语音信号的抽样。
注:本文中matlab中所用来存储的位置为D:\M(D盘中一个名叫M的文件夹中);
matlab版本为2021。
一、语音信号波形
1、语音录制
录制一个wav格式的录音文件
- fs=44100; %录制频率
- recobj=audiorecorder(fs,16,1);
- disp('Start speaking.');
- recordblocking(recobj,5); % 时间为5秒
- disp('End speaking.');
- myrecording=getaudiodata(recobj);
- filename='D:\M\1.wav'; %录音的地址和名字
- audiowrite(filename,myrecording,fs);
2、显示原始语音信号波形
- [y1,fs] = audioread('D:\M\1.wav'); %读取语音信号
- plot( y1 ); %绘制波形
- title( '原语音信号时域波形图' ); %标题
- xlabel( '单位' ); %横坐标
- ylabel( '幅度' ); %纵坐标
3、反褶与平移
- [m,Fs]=audioread('D:\M\1.wav'); %读取语音信号
- L=size(m,1); %语音信号的长度
- t0=(L-1)/Fs; %语音信号的持续时间,等于总点数除以采样率
- ts=1/Fs; %语音信号时间采样间隔,等于信号抽样频率的倒数
- k=(0:ts:t0); % k 为向量 m 的时间自变量的取值范围
- n=1:L;
- Q=m(L-n+1,1); %实现语音信号的反褶和平移
- audiowrite('D:\M\1fan.wav',Q,Fs); %将平移反褶后的信号输出为wav格式--如果没有要去可以不写这行
- plot(k,Q); %绘制
- title('反褶和平移后语音的波形图'); %标题
- xlabel('时间/s'); %横坐标
4、与正弦信号相加波形图
- [m,Fs]=audioread('D:\M\1.wav');
- L=size(m,1);
- t0=(L-1)/Fs;
- ts=1/Fs;
- k=(0:ts:t0);
- n=1:L;
- f=10;
- W=m(n)+sin(2*pi*f*k); %与正弦相加
- audiowrite('D:\M\1jia.wav',W,Fs);
- plot(k,W);
- title('与正弦信号相加的波形图');
- xlabel('时间/s');
5、与正弦信号相乘波形图
- [m,Fs]=audioread('D:\M\1.wav');
- L=size(m,1);
- t0=(L-1)/Fs;
- ts=1/Fs;
- k=(0:ts:t0);
- n=1:L;
- f=10;
- E=m(n).*sin(2*pi*f*k);
- audiowrite('D:\M\1cheng.wav',E,Fs);
- plot(k,E);
- title('与正弦信号相乘的波形图');
- xlabel('时间/s');
注:如果在波形相乘与相加时出现超出数组的问题,建议改一改频率或是录制其他格式的录音文件改为wav格式不进行第一个步骤。
二、频谱
1、方波信号
- t=-2:0.001:2; % 信号的时间取值范围
- E=1; % 方波的峰峰值
- T=2; % 方波的周期
- N=input('N='); % 输入级数的项数
- sn=zeros(1,length(t)); % 定义级数求和向量,初始值为零向量,长度等于时间长度
- for n=1:N
- sn=sn+2*E/pi*(1/n)*sin(n*pi/2)*cos(n*2*pi/T*t); %傅里叶求和
- end
- figure(1)
- plot(t,sn);%绘制有限项傅里叶基数合成图
- title('方波信号');
注:格式简介
fft
2、语音信号频谱
- [m,Fs]=audioread('D:\M\1.wav');
- L=size(m,1);
- f=[0:(L-1)]*Fs/L-Fs/2;
- X=fft(m(:,1),L);
- Y=fftshift(X);
- plot(f,abs(Y));
- title('原始语音信号的频谱图');
- xlabel('频率/Hz');
3、与正弦信号相加的频谱
- [m,Fs]=audioread('D:\M\1jia.wav');
- L=size(m,1);
- f=[0:(L-1)]*Fs/L-Fs/2;
- X=fft(m(:,1),L);
- Y=fftshift(X);
- plot(f,abs(Y));
- title('原始语音正弦加信号的频谱图');
- xlabel('频率/Hz');
4、与正弦信号相乘
- [m,Fs]=audioread('D:\M\1cheng.wav');
- L=size(m,1);
- f=[0:(L-1)]*Fs/L-Fs/2;
- X=fft(m(:,1),L);
- Y=fftshift(X);
- plot(f,abs(Y));
- title('原始语音正弦乘信号的频谱图');
- xlabel('频率/Hz');
三、抽样
1、余弦信号抽样
- t0 = 0:0.001:0.1; % 信号持续的时间范围
- x0 = cos(2*pi*40*t0); % 连续余弦信号,频率为 40Hz
- L0 = length(t0); % 信号在 MATLAB 中存储的点数
- f=80; % 抽样频率 更改来控制频率
- Fs =4* f; % 抽样信号的离散时间定义域和抽样间隔
- t = 0:1/Fs:0.1; % 抽样信号的离散时间定义域和抽样间隔
- x = cos(2*pi*40*t);
- plot(t0,x0,'r'),hold on % 绘制连续时间信号的图形
- stem(t,x),hold off % 绘制抽样后的离散时间信号的图形
- title('连续时间信号及其抽样信号');
2、门信号抽样
- t0 = -10:0.001:10; %门信号持续时间 起始结束时间
- x0 = rectpuls(t0,5);
- f=1/5; %可以更改来控制抽样频率
- Fs = 4*f; %抽样频率
- t = -10:Fs:10;
- x = rectpuls(t,5);
- stem(t,x);
- title('抽样信号 抽样频率为4*fHz')
3、语音信号的抽样
- [m,Fs]=audioread('D:\M\1.wav'); %读取信号
- y=m(:,1);
- L=size(y);
- fs1=Fs/8; %更改此处控制抽样间隔
- y1=y(1:8:L); %同上
- audiowrite('D:\M\1chou8.wav',y1,fs1);
- plot(y1);
- title('抽样间隔为8的语音信号的波形');
仅供参考,如有错误麻烦各位帮忙指正一下,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。