文章目录
前言
语音信号是我们最常见的一种信号,本文使用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的频率范围。女子的语音频谱处于相对较高的范围。