【基础处理】基于matlab语音信号预处理【含Matlab源码 364期】

137 阅读2分钟

一、简介

语音信号预处理程序:消除线性趋势项、数字滤波器设计、预加重功能测试等。

二、源代码

clear all; clc; close all;
[x,fs,nbit]=wavread('C2_5_y_1.wav');     % 读入语音文件
len=length(x);
n=0.5:0.3/(len-1):0.8;                      %设置线性曲线
x=x+n';                                         %叠加线性趋势线
t=(0:length(x)-1)/fs;                       % 设置时间
y=detrend(x);                               % 消除线性趋势项
y=y/max(abs(y));                          % 幅值归一化
subplot 211; plot(t,x,'k');               % 画出带有趋势项的语音信号x
title('带趋势项的语音信号');
xlabel('时间/s'); ylabel('幅值');
subplot 212; plot(t,y,'k');               % 画出消除趋势项的语音信号y
xlabel('时间/s'); ylabel('幅值');
title('消除趋势项的语音信号');

%消除多项式趋势项
clear all; clc; 
[x,fs,nbit]=wavread('C2_5_y_1.wav');         % 读入C2_5_y_1.wav文件
len=length(x);
n=0:1/(len-1):1;
nn=n.^2-0.5;
x=x+nn';
[y,xtrend]=detrendN(x, fs, 2);          % 调用detrendN消除趋势项
t=(0:length(x)-1)/fs;                        % 设置时间
figure
subplot 211; plot(t,x,'k');                 % 画出带有趋势项的语音信号x
line(t,xtrend,'color','r','linewidth',2); % 画出趋势项曲线
ylim([-1.5 1]);
clc
clear all
fs=8000;
%把截止频率转成弧度表示
wp=550*2/fs;
ws=500*2/fs;        
rp=3;
rs=80;
Nn=512;
clc
clear all
close all
[s,fs]=wavread('C2_5_y_3.wav');
e=s(2000:2225);                                 %提取一段进行分析,容易看出变化
un=filter([1,-0.95],1,e);                       %预加重信号b=[1,-0.95];

%原始信号频谱
N=512;
pinlv=(0:1:N/2-1)*fs/N;
x=fft(e,N);
r1=abs(x);
t1=20*log10(r1);
signal=t1(1:N/2);

%预加重信号频谱
[h1,w1]=freqz([1,-0.95],1,256,fs);
pha=angle(h1);
H1=abs(h1);
r2=r1(1:N/2);
u=r2.*h1;
u2=abs(u);
signalPre=20*log10(u2);

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、备注

版本:2014a