(44)MATLAB读取语音信号进行频谱分析

文章目录


前言

语音信号是我们最常见的一种信号,本文使用MATLAB读取一段语音信号画出其波形,然后使用FFT变换给出其频谱,对其频谱进行分析。


一、MATLAB代码

读取语音数据并得出频谱的代码如下:

c 复制代码
%% 读取语音数据
load('speech_8ksps.mat', 'speech_8k')     % load variable data

L = length(speech_8k);
fs = 8000;                                % 语音信号采样率8ksps
t = (0:1/fs:(length(speech_8k)-1)/fs);    % 语音信号的时间刻度

figure()
plot(t,speech_8k)
grid on
title('一段语音信号(fs=8kSPS)')
xlabel('Time(s)')
ylabel('Amplitude')

%% 频域(FFT)结果解析
N = length(speech_8k);
Y = fft(speech_8k,N);                     % 信号的傅里叶变换

% 信号的双边幅度频谱
P2 = abs(Y/L);

% 信号的双边幅度频谱
figure()
plot(0:(fs/N):(fs-fs/N),P2(1:N),'LineWidth',1)
grid on
title(['语音的双边幅度频谱(fs=',num2str(fs),' samples/s)'])
xlabel('频率/Hz')
ylabel('幅度|Y(n)|')

%% 信号的单边幅度频谱
% 计算信号的单边幅度频谱
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);

figure()
plot(0:(fs/N):(fs/2),P1(1:N/2+1),'LineWidth',1)
grid on
title(['语音的单边幅度频谱(fs=',num2str(fs),' samples/s)'])
xlabel('频率(Hz)  (单边谱的频率范围0Hz到fs/2)')              % 频率范围0Hz到fs/2
ylabel('频谱幅度|Y|')

二、仿真结果画图

语音信号的时域波形图:

语音信号的双边幅度谱:

语音信号的单边幅度谱:

三、频谱分析

语音信号我们一般取300Hz-3000Hz的频率范围。一般情况下,男子的语音频谱处于相对较低的范围,如上面图中所示,处于300Hz-1500Hz的频率范围。女子的语音频谱处于相对较高的范围。


相关推荐
luweis18 小时前
企智孪生 ETA (3.5 执行层技术落地)【浙江联保网络 卢伟舜】
网络·人工智能·程序人生·职场和发展·学习方法
OpenVINO 中文社区18 小时前
飞桨黑客松Intel赛道Meetup×Intel龙虾Skills城市巡回首场·上海站
人工智能·openvino·英特尔
手写码匠18 小时前
华为云Flexus+DeepSeek征文|万字实战:MaaS 推理服务 + Dify 高可用部署 + AI Agent 开发全流程
人工智能·深度学习·算法·aigc
yu859395818 小时前
基于卡尔曼滤波器的集中式机器人轨迹定位算法
算法·机器人
zhangfeng113318 小时前
tesla P100显卡使用体验&AI部署小结
人工智能
OpenCSG18 小时前
OpenCSG全程赋能2026 WAIC Future Tech OPC 先锋挑战赛:以开放AI平台助力“全民Agent创业时代”
人工智能·开源·opencsg·waic
“码”力全开18 小时前
架构师深改:基于 Docker 与边缘计算的百路 AI 视频高并发中台架构 —— 解耦 GB28181/RTSP 异构协议,支持全套源码交付
人工智能·docker·边缘计算
赴山海bi18 小时前
Amazon新品冷启动:SP广告投放结构与DeepBI增长策略
人工智能
进击的荆棘18 小时前
优选算法——栈
数据结构·c++·算法·leetcode·
@you_12318 小时前
深度学习中的混合精度训练
人工智能·深度学习