%% 声音的采集
clc;
clear;
close all;
filename = '三狮.wav';
[y,Fs] = audioread(filename);
y = y(:,1); % 取单声道
L = length(y); % 采样点
T = 1/Fs; % 周期
t = (0:L-1)*T;
info = audioinfo(filename); % wav详细信息
disp(info); % 输出音频信号 采样频率,采样位数 等信息
sound(y,Fs); %以采样率 Fs 向扬声器发送音频信号 y
i = 0;
%% 绘图
i = i+1;
s = '原音频信号时域波形图';
plot_time(t,y,s,i); % 绘制时域波形图
i = i+1;
s = '原音频信号频域波形图';
plot_freq(Fs,L,y,s,i); % 绘制频域波形图
%% 窗函数对频谱分析的影响
%% 矩形窗
win_r = boxcar(length(y));
y_win_r = y.*win_r; % 时域乘积
sound(y_win_r,Fs);
i = i+1;
s = '矩形窗时域波形图';
plot_time(t,y_win_r,s,i);
i = i+1;
s = '矩形窗频率域波形图';
plot_freq(Fs,L,y_win_r,s,i);
% 矩形窗 1/2
win_r_2 = boxcar(floor(length(y)/2)); % 取语音长度1/2为窗口长度
win_r_2 = [win_r_2;zeros(ceil(length(y)/2),1)]; % 对齐补0
y_win_r_w = y.*win_r_2;
sound(y_win_r_w,Fs);
i = i+1;
s = '矩形窗(N = L/2)时域波形图';
plot_time(t,y_win_r_w,s,i);
i = i+1;
s = '矩形窗(N = L/2)频率域波形图';
plot_freq(Fs,L,y_win_r_w,s,i);
%% 汉宁窗
win_h = hann(length(y));
y_win_h = y.*win_h;
sound(y_win_h,Fs);
i = i+1;
s = '汉宁窗时域波形图';
plot_time(t,y_win_h,s,i);
i = i+1;
s = '汉宁窗频率域波形图';
plot_freq(Fs,L,y_win_h,s,i);
% 汉宁窗 1/2
win_h_2 = hann(floor(length(y)/2));
win_h_2 = [win_h_2;zeros(ceil(length(y)/2),1)]; % 对齐补0
y_win_h_2 = y.*win_h_2;
sound(y_win_h_2,Fs);
i = i+1;
s = '汉宁窗(N = L/2)时域波形图';
plot_time(t,y_win_h_2,s,i);
i = i+1;
s = '汉宁窗(N = L/2)频率域波形图';
plot_freq(Fs,L,y_win_h_2,s,i);
%% 哈明窗
win_hm = hamming(length(y));
y_win_hm = y.*win_hm;
sound(y_win_hm,Fs);
i = i+1;
s = '哈明窗时域波形图';
plot_time(t,y_win_hm,s,i);
i = i+1;
s = '哈明窗频率域波形图';
plot_freq(Fs,L,y_win_hm,s,i);
% 哈明窗 1/2
win_hm_2 = hamming(floor(length(y)/2));
win_hm_2 = [win_hm_2;zeros(ceil(length(y)/2),1)]; % 对齐补0
y_win_hm_2 = y.*win_hm_2;
sound(y_win_hm_2,Fs);
i = i+1;
s = '哈明窗(N = L/2)时域波形图';
plot_time(t,y_win_hm_2,s,i);
i = i+1;
s = '哈明窗(N = L/2)频率域波形图';
plot_freq(Fs,L,y_win_hm_2,s,i);
%% 布莱克曼窗
win_blk = blackman(length(y));
y_win_blk = y.*win_blk;
sound(y_win_blk,Fs);
i = i+1;
s = '布莱克曼窗时域波形图';
plot_time(t,y_win_blk,s,i);
i = i+1;
s = '布莱克曼窗频率域波形图';
plot_freq(Fs,L,y_win_blk,s,i);
% 布莱克曼窗 1/2
win_blk_2 = blackman(floor(length(y)/2));
win_blk_2 = [win_blk_2;zeros(ceil(length(y)/2),1)]; % 对齐补0
y_win_blk_2 = y.*win_blk_2;
sound(y_win_blk_2,Fs);
i = i+1;
s = '布莱克曼窗(N = L/2)时域波形图';
plot_time(t,y_win_blk_2,s,i);
i = i+1;
s = '布莱克曼窗(N = L/2)频率域波形图';
plot_freq(Fs,L,y_win_blk_2,s,i);
%% 截取2s
time = 2;
samples = [1,floor(L/2)];
[y_cut,Fs_cut] = audioread(filename,samples);
y_cut = y_cut(:,1); % 取单声道
L_cut = length(y_cut); % 采样点
T_cut = 1/Fs_cut; % 周期
t_cut = (0:L_cut-1)*T_cut;
sound(y_cut,Fs_cut);
i = i+1;
s = '音频信号截取2s时域波形图';
plot_time(t_cut,y_cut,s,i); % 绘制时域波形图
i = i+1;
s = '音频信号截取2s频域波形图';
plot_freq(Fs_cut,L_cut,y_cut,s,i); % 绘制频域波形图
%% 降采样对频谱分析的影响
Fs_res = Fs/2;
y_res=resample(y,Fs_res,Fs);%信号降采样处理
% y_res = downsample(y,2);
L_res = length(y_res);
sound(y_res,Fs_res);
t_res = 1/(Fs_res) * (0:L_res-1);
i = i+1;
s = '降采样时域波形图';
plot_time(t_res,y_res,s,i);
i = i+1;
s = '降采样频率域波形图';
plot_freq(Fs_res,L_res,y_res,s,i);
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab【信号处理】基于窗函数实现数字信号频谱分析附matlab代码.zip
共27个文件
jpg:22个
m:3个
wav:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 194 浏览量
2022-11-10
20:21:59
上传
评论
收藏 1015KB ZIP 举报
温馨提示
1.版本:matlab2019a,内含运行结果,不会运行可私信 2.领域:基础教程 3.内容:matlab基础算法 4.适合人群:本科,硕士等教研学习使用
资源推荐
资源详情
资源评论
收起资源包目录
Matlab【信号处理】基于窗函数实现数字信号频谱分析附matlab代码.zip (27个子文件)
Matlab【信号处理】基于窗函数实现数字信号频谱分析附matlab代码
运行结果22.jpg 27KB
Speech2.m 3KB
三狮.wav 963KB
运行结果8.jpg 23KB
运行结果21.jpg 28KB
运行结果4.jpg 27KB
运行结果3.jpg 28KB
运行结果19.jpg 24KB
运行结果9.jpg 19KB
运行结果17.jpg 19KB
plot_time.m 179B
plot_freq.m 680B
运行结果10.jpg 23KB
运行结果6.jpg 24KB
运行结果11.jpg 25KB
运行结果16.jpg 22KB
运行结果1.jpg 28KB
运行结果12.jpg 23KB
运行结果5.jpg 21KB
运行结果13.jpg 19KB
AD 1B
运行结果2.jpg 27KB
运行结果7.jpg 25KB
运行结果20.jpg 30KB
运行结果14.jpg 23KB
运行结果15.jpg 23KB
运行结果18.jpg 22KB
共 27 条
- 1
资源评论
天天Matlab科研工作室
- 粉丝: 3w+
- 资源: 7251
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功