语音信号的滤波与频谱分析Word文件下载.docx

上传人:b****3 文档编号:13826390 上传时间:2022-10-13 格式:DOCX 页数:11 大小:352.90KB
下载 相关 举报
语音信号的滤波与频谱分析Word文件下载.docx_第1页
第1页 / 共11页
语音信号的滤波与频谱分析Word文件下载.docx_第2页
第2页 / 共11页
语音信号的滤波与频谱分析Word文件下载.docx_第3页
第3页 / 共11页
语音信号的滤波与频谱分析Word文件下载.docx_第4页
第4页 / 共11页
语音信号的滤波与频谱分析Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

语音信号的滤波与频谱分析Word文件下载.docx

《语音信号的滤波与频谱分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《语音信号的滤波与频谱分析Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

语音信号的滤波与频谱分析Word文件下载.docx

用设计的滤波器对信号滤波,画出滤波后时域波形。

用sound函数回放语音信号。

(3)求出特征频段语音信号随时间变化的曲线(每隔0.05秒求一次功率谱,连接成曲线)。

(4)选做:

语谱图:

横轴为时间,纵轴为频率,灰度值大小表示功率谱值的大小。

(提示,可以采用spectrogram函数)

(1)读入语音文件并画出其时域波形和频域波形,实现加窗fft并求出其功率谱。

clc

clearall;

closeall;

[x,Fs,bits]=wavread('

C:

\Users\刘冰\Desktop\数字信号处理\liubing'

);

x0=x(:

1);

%将采集来的语音信号转换为一个数组

sound(x0,Fs,bits);

y=fft(x);

figure;

plot(x,’b’);

title('

原始语音信号时域波形'

y1=fft(x0);

y1=fftshift(y1);

d=Fs/length(x);

plot([-Fs/2:

d:

Fs/2-d],abs(y1),’b’);

原始语音信号的频域信号'

%画出原始语音信号的频谱图

N=length(x);

w1=window(@hann,N);

w2=window(@blackman,N);

x1=x0.*w1;

%对原始信号加汉宁窗处理

x2=x0.*w2;

%对原始信号加布兰克曼窗处理

figure,plot(x1);

title(加汉宁窗后的语音信号)%显示加窗后的时域语音信号

s=floor(length(x0)/Fs);

%计算原始语音信号的时间长度,这里得到的结果是18秒,因为floor是向下取整,所以信号的末尾一点会被去掉,但是因为最后一点没有声音信号,所以影响可以忽略。

%加汉宁窗后功率谱,加布兰克曼窗后又可以得到一组图,只需要将下列循环中的x1改为x2,这里就不再显示

%每两秒对语音信号求一次功率谱并显示

fori=1:

1:

s/2

f=x1((i-1)*Fs*2+1:

i*Fs*2);

%每两秒取出一段信号

l=length(f);

q=fft(f,l);

E=abs(q).*abs(q);

%傅里叶变换结果取模的平方

figure,plot(E(1:

3000),'

b'

title(['

第'

num2str(i*2-1),'

~'

num2str(i*2),'

秒语音功率谱'

]);

%因为语音信号主要集中在低频段,所以这里只需要显示低频段即可,取(1:

3000)

end

加窗后的时域波形

频谱分析:

人说话的频率基本集中在1200Hz以内的低频段,但我这里可以在高频段(2000Hz左右)可以观察到部分能量,这应该是在录音的时候电脑本身的噪音以及录音设备的误差造成

(2)根据功率谱线,大致可观察到语音信号在150~400和500~650之间有两个波峰,因此取这两个频宽作为我语音信号的特征频带,根据要求选择汉宁窗作为滤波器滤波。

1)汉宁窗滤波器的幅频特性显示

%汉宁窗

f1=150;

%通带上下两个频率

f2=400;

%带通滤波器的通带范围

w1=2*pi*f1/Fs;

%归一化

w2=2*pi*f2/Fs;

w=[w1,w2];

N=ceil(4*pi/(2*pi*200/Fs));

%求出所需滤波器的阶数

Windows=HANNING(N);

b1=FIR1(N-1,w,Windows);

%带通滤波器

freqz(b1,1,512);

汉宁窗带通(150~400)滤波器的频率响应'

%数字滤波器频率响应

f1=500;

f2=650;

Nw=N;

b2=FIR1(N-1,w,Windows);

%带通滤波器

freqz(b2,1,512);

汉宁窗带通(500~~650)滤波器的频率响应'

2)将原始语音信号分别通过两个频带,以下是滤波后的时域波形

band1=fftfilt(b1,x0);

sound(band1,Fs,bits);

%滤波后听到的声音有了明显的变化

subplot(2,1,1);

plot(band1);

汉宁窗(150~400)滤波后的时域波形'

band2=fftfilt(b2,x0);

sound(band2,Fs,bits);

subplot(2,1,2);

plot(band2);

汉宁窗(500~650)滤波后的时域波形'

(3)特征频段语音信号随时间变化的曲线,分别作出150~400和500~650特征频带的语音信号曲线

a=zeros(s/0.05,1);

%这一步是为了求出所画信号曲线的长度,并定义空数组

s/0.05

f=x0((i-1)*Fs*0.05+1:

i*Fs*0.05);

%每0.05秒取出一段数据

E=q.*conj(q)/l;

%求出该段的功率

a(i)=mean(E(150~400));

%求平均

figure,plot(0:

0.05:

s-0.05,a);

150~400Hz汉宁窗滤波后的功率谱曲线'

b=zeros(s/0.05,1);

b(i)=mean(E(500:

650));

s-0.05,b);

500~650Hz汉宁窗滤波后的功率谱曲线'

(4)语谱图,

也叫频谱分析视图,如果针对语音数据的话,叫语谱图。

语谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。

由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。

所有函数:

spectrogram

功能:

使用短时傅里叶变换得到信号的频谱图。

语法:

[S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)

x---输入信号的向量。

默认情况下,即没有后续输入参数,x将被分成8段分别做变换处理,

如果x不能被平分成8段,则会做截断处理。

默认情况下,其他参数的默认值为

window---窗函数,默认为nfft长度的海明窗Hamming

noverlap---每一段的重叠样本数,默认值是在各段之间产生50%的重叠

nfft---做FFT变换的长度,默认为256和大于每段长度的最小2次幂之间的最大值。

fs---采样频率,默认值归一化频率

程序:

figure,spectrogram(x0,512,500,512,Fs,'

yaxis'

colormap('

gray'

colorbar;

语谱图'

这里由于语谱图的数据量太大,很容易造成死机,因此这里采用截屏得到。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1