一、简介
语音信号预处理程序:消除线性趋势项、数字滤波器设计、预加重功能测试等。
二、源代码
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