(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的频率范围。女子的语音频谱处于相对较高的范围。


相关推荐
xrgs_shz2 分钟前
直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和MATLAB实现
人工智能·计算机视觉·matlab
hoiii1874 分钟前
CSTR反应器模型的Simulink-PID仿真(MATLAB实现)
开发语言·matlab
向上的车轮7 分钟前
如何定制大模型——工业场景下大模型定制与私有化部署选型
人工智能
无小道29 分钟前
算法——暴力+优化
算法·优化·暴力
Free Tester33 分钟前
如何判断 LeakCanary 报告的严重程度
java·jvm·算法
让学习成为一种生活方式39 分钟前
海洋类胡萝卜素生物合成的乙酰转移酶--文献精读217
人工智能
QQ6765800843 分钟前
服装计算机视觉数据集 连衣裙数据集 衣服类别识别 毛衣数据集 夹克衫AI识别 衬衫识别 裤子 数据集 yolo格式数据集
人工智能·yolo·计算机视觉·连衣裙·衣服类别·毛衣数据集·夹克衫ai
冰糖葫芦三剑客43 分钟前
人工智能生成合成内容文件元数据隐式标识说明函要怎么填写
人工智能
CV-杨帆1 小时前
ICLR 2026 LLM安全相关论文整理
人工智能·深度学习·安全
zyq99101_11 小时前
DFS算法实战:经典例题代码解析
python·算法·蓝桥杯·深度优先