注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

清风笑

开始,就是未来

 
 
 

日志

 
 

信号处理学习之语音信号处理MATLAB实现  

2013-01-07 22:48:21|  分类: 信号处理及算法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前段时间花两天时间做的,学习信号处理的一个简单的小项目,主要遇到的问题是在设计FIR滤波器的时候选择了矩形窗,后来指标达不到,看下课本才知道问题(上课经常走神惭愧!),根据阻带衰减分贝值选择了凯泽窗。有时间要要研究下MP3编解码实现,这个难度大点,涉及的知识点也更全点。要考试了,昨晚赶了下论文,贴出主要部分。

具体实现

3.1语音信号的采集

利用cooledit软件,录制一段自己的话音,时间在3秒左右,然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数,采样率8000Hz,单通道,格式*.wav。

3.2语音信号的时频分析

利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。再对其进行采样,记住采样频率和采样点数。下面介绍Wavread函数几种调用格式。

(1) y=wavread (file)

功能说明:读取file所规定的wav文件,返回采样值放在向量y中。

(2) [y, fs, nbits]=wavread(file)

功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。

(3) y=wavread (file,N)

功能说明:读取钱N点的采样值放在向量y中。

(4) y=wavread (file, [NI, N2])

功能说明:读取从N1到N2点的采样值放在向量y中。

接下来,对语音信号进行采样。然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:Xk=fft (xn,N)参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,可以得到信号的频谱特性。具体程序如下:

% --- 选择音频文件消息响应函数.

function pushbutton9_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton9 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

[fn,pn,fi]=uigetfile('*.wav','select a wav-file')%调用选择文件对话框,返回fn代表名字,pn代表路径

name=strcat(pn,fn)

[x1,Fs,bits]=wavread(name);

sound(x1,Fs,bits);%播放声音

figure(1);

subplot(211);

plot(x1); %做原始语音信号的时域图形

title('原始语音信号');

xlabel('时间 n');

ylabel('音量 n');

y1=fft(x1); %做length(x1)点的FFT

y1=fftshift(y1);%平移,是频率中心为0

derta_Fs = Fs/length(x1);%设置频谱的间隔,分辨率 。

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(y1));%画出原始语音信号的频谱图,这里保证了x轴的点数必须和y轴点数一致

title('原始语音信号的频谱');

grid on;

程序结果如下图:

clip_image002

3.3设计FIR和IIR数字滤波器对语音信号进行滤波

IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H (s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比斡采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。对于线性相位滤波器,经常采用FIR滤波器。

对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。具体设计步骤如下:

(1)确定所需类型数字滤波器的技术指标。

(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Q =2/T tan(0.5w)

(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。

(4)设计模拟低通滤波器。

(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。

(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。

我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。为了克服之一缺点,可以采用双线性变换法。

下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:

(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。

(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。

(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。

(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。

如前所逑,IIR滤波器和FIR滤波器的设计方法有很大的区别。下面我们着重介绍用窗函数法设计FIR滤波器的步骤。如下:

(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。先按照阻带衰减选择窗函数类型。原则是在保证阻带衰减满足要求的情况下,尽量选择相同阶数下主瓣窄的窗函数。

(2)构造希望逼近的频率响应函数。

(3)计算h(n)。

(4)加窗得到设计结果。

给定滤波器的性能指标如下:

(1)低通滤波器的性能指

fb=1000Hz,fc=1200Hz,As=100dB,Ap=1dB.

(2)高通滤波器的性能指标:

fb=2700Hz, fc=3000Hz,As=100dB,Ap=1dB.

(3)带通滤波器的性能指标:

fb1=1200Hz, fb2=3000Hz, As=100dB,Ap=1dB.

fc1=1000Hz, fc2=3200Hz,As=100dB, Ap=1dB.

由以上指标查表得满足阻带衰减为指标中的100dB的窗可以选择凯泽窗。

在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,chebyl和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各滤波器的频率响应。hn=frI(M,wc,window),可以指定窗函数向量window。如果缺省window参数,则firl默认为哈明窗。这里我们可以选择window= kaiser(N,beta)以实现凯泽窗。N为窗的点数,N=M+1,其中M为滤波器阶,可由过渡带带宽BW和阻带衰减分贝值As估算得到,公式为M=((As-7.95)/(2.286*BW)+1; beta参数决定凯泽窗,可由公式beta=0.1102*(As1-8.7)确定; (若是矩形窗公式为BW=1.8pi/M,得出M)

MATLAB信号处理工具箱函数buttp buttor butter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式周于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。MATLAB信号处理工具箱函数cheblap,cheblord和cheebyl是切比雪夫I型滤波器设计函数。我们用到的是cheebyl函数,其调用格式如下:

[B,A]=chebyI(N,Rp,wpo,’Rypr’)

[B,A]=chebyI(N,Rp,wpo,’ttypr’,’s’)

函数butter,chebyl和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。

用自己设计的各滤波器分别对语音信号进行滤波,在Matlab中,滤波器利用函数filter对信号进行滤波。

函数filter的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。其中xn是输入信号向量,yn输出信号向量。

下面我们将给出FIR和IIR数字滤波器对语音信号滤波的主要程序和结果:

% --- FIR低通按钮消息响应函数.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

fp1=1000;

fs1=1200;

As1=100;

wp1=2*pi*fp1/fs; %

ws1=2*pi*fs1/fs; %

BF1=ws1-wp1;

wc1=(wp1+ws1)/2;

M1=ceil((As1-7.95)/(2.286*BF1))+1;%按凯泽窗计算滤波器阶数

N1=M1+1;

beta1=0.1102*(As1-8.7);

Window=(kaiser(N1,beta1)); %求凯泽窗窗函数

b1=fir1(M1,wc1/pi,Window);% wc1/pi为归一化,窗函数法设计函数

figure(2);

freqz(b1,1,512);

title('FIR低通滤波器的频率响应');

x1_low = filter(b1,1, x1);%对信号进行低通滤波

sound(x1_low,Fs,bits);

figure(3);

subplot(211);

plot(x1_low);

title('信号经过FIR低通滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_low))));

title('信号经过FIR低通滤波器(频域)');

clip_image004

clip_image006

% ---FIR高通按钮消息响应函数.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

As2=100;

fp2=3000;

fs2=2700;

wp2=2*pi*fp2/fs;

ws2=2*pi*fs2/fs;

BF2=wp2-ws2;

wc2=(wp2+ws2)/2;

M2=ceil((As2-7.95)/(2.286*BF2))+1;%按凯泽窗计算滤波器阶数

N2=M2+1;

beta2=0.1102*(As2-8.7);

Window=(kaiser(N2,beta2)); %求凯泽窗窗函数

b2=fir1(M2,wc2/pi,'high',Window);

figure(4);

freqz(b2,1,512);%数字滤波器频率响应

title('FIR高通滤波器的频率响应');

x1_high = filter(b2,1,x1);%对信号进行高通滤波

sound(x1_high,Fs,bits);

figure(5);

subplot(211);

plot(x1_high);

title('信号经过FIR高通滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_high))));

title('信号经过FIR高通滤波器(频域)');

clip_image008

clip_image010

% --- FIR带通按钮消息响应函数.

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

As3=100;

fp3=[1200,3000];fs3=[1000,3200];

wp3=2*pi*fp3/fs;

ws3=2*pi*fs3/fs;

BF3=wp3(1)-ws3(1);

wc3=wp3+BF3/2;

M3=ceil((As3-7.95)/(2.286*BF3))+1;%按凯泽窗计算滤波器阶数

N3=M3+1;

beta3=0.1102*(As3-8.7);

Window=(kaiser(N3,beta3)); %求凯泽窗窗函数

b3=fir1(M3,wc3/pi,'bandpass',Window);%带通滤波器

figure(6);

freqz(b3,1,512);%数字滤波器频率响应

title('FIR带通滤波器的频率响应');

x1_daitong = filter(b3,1,x1);%对信号进行带通滤波

sound(x1_daitong,Fs,bits);

figure(7);

subplot(211);

plot(x1_daitong);

title('信号经过FIR带通滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_daitong))));

title('信号经过FIR带通滤波器(频域)');

clip_image012

clip_image014

% ---FIR带阻按钮消息响应函数.

function pushbutton7_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton7 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

As4=100;

fs4=[1200,3000];fp4=[1000,3200];

wp4=2*pi*fp4/fs;

ws4=2*pi*fs4/fs;

BF4=ws4(1)-wp4(1);

wc4=ws4+BF4/2;

M4=ceil((As4-7.95)/(2.286*BF4))+1;%按凯泽窗计算滤波器阶数

N4=M4+1;

beta4=0.1102*(As4-8.7);

Window=(kaiser(N4,beta4)); %求凯泽窗窗函数

b4=fir1(M4,wc4/pi,'stop',Window);%带阻滤波器

figure(8);

freqz(b4,1,512);%数字滤波器频率响应

title('FIR带阻滤波器的频率响应');

x1_daizu = filter(b4,1,x1);%对信号进行带阻滤波

sound(x1_daizu ,Fs,bits);

figure(9);

subplot(211);

plot(x1_daizu);

title('信号经过FIR带阻滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_daizu))));

title('信号经过FIR带阻滤波器(频域)');

clip_image016

clip_image018

% ---IIR低通按钮消息响应函数.

function pushbutton4_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton4 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

fp1i=1000;

fs1i=1200;

wp1i=2*pi*fp1i/fs;

ws1i=2*pi*fs1i/fs;

Rp1i=1;

Rs1i=100;

Ts=1/fs;

Wp1i=2/Ts*tan(wp1i/2);

Ws1i=2/Ts*tan(ws1i/2); %按频率转换公式进行转换,预畸变

[N1i,Wn1i]=cheb1ord(Wp1i,Ws1i,Rp1i,Rs1i,'s'); %计算模拟滤波器的最小阶数

[B1i,A1i]=cheby1(N1i,Rp1i,Wn1i,'s');%设计模拟原型滤波器

[bz1i,az1i]=bilinear(B1i,A1i,fs); %运用双线性变换法得到数字滤波器传递函数

figure(10);

freqz(bz1i,az1i,512,fs);

title('切比雪夫1型低通滤波器的频率响应');

x1_lowi = filter(bz1i,az1i, x1);

sound(x1_lowi,Fs,bits);

figure(11);

subplot(211);

plot(x1_lowi);

title('信号经过IIR低通滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_lowi))));

title('信号经过IIR低通滤波器(频域)');

clip_image020

clip_image022

% ---IIR高通按钮消息响应函数.

function pushbutton5_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton5 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

fp2i=3000;%通带截止频率

fs2i=2700;%组带截止频率

Rp2i=1;

Rs2i=100;

Wp2i2=2*pi*fp2i/fs;

Ws2i2=2*pi*fs2i/fs;

Wp2i=tan(Wp2i2/2);

Ws2i=tan(Ws2i2/2);

wphi=1 ; %归一化

wshi=Wp2i/Ws2i;%高通频率转换成低通频率指标

%估计滤波器的阶数

[N2i,Wn2i]=cheb1ord(wphi,wshi,Rp2i,Rs2i,'s');

%设计滤波器

[B2i,A2i]=cheby1(N2i,Rp2i,Wn2i,'s');

[numi2,deni2]=lp2hp(B2i,A2i,Wp2i);

[bz2i,az2i]=bilinear(numi2,deni2,0.5)

figure(12);

freqz(bz2i,az2i,512,fs);

title('切比雪夫1型IIR高通滤波器的频率响应');

x1_highi = filter(bz2i,az2i, x1);

sound(x1_highi,Fs,bits);

figure(13);

subplot(211);

plot(x1_highi);

title('信号经过IIR高通滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_highi))));

title('信号经过IIR高通滤波器(频域)');

clip_image024

clip_image026

% --- 带通IIR按钮消息响应函数.

function pushbutton6_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton6 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

fdp1i=1200;fdp2i=3000;%通带截止频率

fds1i=1000;fds2i=3200;%组带截止频率

Rp3i=1;

Rs3i=100;

wdp1i=2*pi*fdp1i/fs;wdp2i=2*pi*fdp2i/fs;

wds2i=2*pi*fds1i/fs;wds2i=2*pi*fds2i/fs;

Wdp1i=tan(wdp1i/2);Wdp2i=tan(wdp2i/2);

Wds1i=tan(wds2i/2); Wds2i=tan(wds2i/2); %按频率转换公式进行转换,预畸变

B=Wdp2i-Wdp1i;

W3i = Wdp1i*Wdp2i/Wds1i; %调整截止频率参数。

W0 = (Wdp1i*Wdp2i)^0.5;

wp3i = 1; %归一化,求低通原型的参数。

ws3i = -((Wdp1i*Wdp2i)-Wds2i^2)/(B*Wds2i);

[N3i,Wn3i]=buttord(wp3i,ws3i,Rp3i,Rs3i,'s'); %计算模拟滤波器的最小阶数

[B3i,A3i]=butter(N3i,Wn3i,'s');%设计模拟原型滤波器

[numi3,deni3]= lp2bp(B3i,A3i,W0,B);

[bz3i,az3i] = bilinear(numi3,deni3,0.5); %双线性变换

[H,W] = freqz(bz3i,az3i,512);

figure(14);

subplot(211);

plot(W/pi,20*log10(abs(H)));

grid; ylabel('gain');

title('巴特沃兹IIR带通滤波器')

axis([0 1 -80 5]);

subplot(212);

plot(W/pi,angle(H));grid; xlabel('w/pi'),ylabel('phase');

x1_daitongi = filter(bz3i,az3i, x1);

sound(x1_daitongi,Fs,bits);

figure(15);

subplot(211);

plot(x1_daitongi);

title('信号经过IIR带通滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_daitongi))));

title('信号经过IIR带通滤波器(频域)');

clip_image028

clip_image030

% ---带阻IIR按钮消息响应函数.

function pushbutton8_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton8 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global x1;

global Fs;

global derta_Fs;

global bits;

fs=Fs;

Fp1 = 1000;

Fp2 = 3200;

Fs1 = 1200;

Fs2 = 3000;

Ap = 1;

As = 100;

wp1 = 2*pi*Fp1/fs;

wp2 = 2*pi*Fp2/fs;

ws1 = 2*pi*Fs1/fs;

ws2 = 2*pi*Fs2/fs;

Wp1 = tan(wp1/2); %按频率转换公式进行转换,预畸变

Wp2 = tan(wp2/2);

Ws1 = tan(ws1/2);

Ws2 = tan(ws2/2);

Bw = Ws2 - Ws1;

Wp1 = Ws1*Ws2/Wp2; %调整截止频率参数。

W0 = (Ws1*Ws2)^0.5;

Ws = 1; %归一化,求低通原型的参数。

Wp = (Bw*Wp1)/((Ws1*Ws2)-Wp1^2);

[N, WN] = buttord(Wp,Ws,Ap,As,'s');

[B, A] = butter(N, WN,'s'); %低通原型

[BT,AT] = lp2bs(B,A,W0,Bw);

[num,den] = bilinear(BT,AT,0.5); %双线性变换

figure(16);

[Hz,Wz] = freqz(num,den,512);

subplot(211);

plot(Wz/pi,20*log10(abs(Hz)));

grid; title('巴特沃兹IIR带阻滤波器')

xlabel('w/pi'),ylabel('gain');

axis([0 1 -80 5]);

subplot(212);

plot(Wz/pi,angle(Hz));

grid;

xlabel('w/pi'),ylabel('phase');

x1_daizui = filter(num,den,x1);%对信号进行带阻滤波

sound(x1_daizui,Fs,bits);

figure(17);

subplot(211);

plot(x1_daizui);

title('信号经过IIR带阻滤波器(时域)');

subplot(212);

plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_daizui))));

title('信号经过IIR带阻滤波器(频域)');

clip_image032

clip_image034

3.4回放语音信号

经过以上的处理后,可在Matlab中用函数sound对声音进行回放。其调用格式:sound(y,Fs),sound(y)和sound(y,Fs,bits)。可以察觉滤波前后的声音有明显的变化。

3.5设计系统界面

3.5.1系统界面设计工具-GUI概述

图形用户界面(graphical user interfaces,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。在MAl'LAB中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。GUIDE主要是一个界面设25计工具集,MAYLAB将所有GUI支持度控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。FIG文件:包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。它是一个二进制文件调用hsave课保存图形窗口时将生车该文件。M文件包括GUI设计、控件函数以及定义为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。GUI创建包括界面设计和控件编程两部分,主要步骤如下。第一步:通过设置GUIDE应用程序的选项来运行GUIDE;第二步:使用界面设计编辑器进行面设计;第三步:编写控件行为响应控制(即回调函数)代码。

3.5.2界面设计及使用说明

首先我们新建一个GUI文件:Filef New/GUI如下图所示:

clip_image036

选择 Blank GUI(Default) 。

其次,进入GUI开发环境以后添加九个按钮控件,两个框架控件布置如下图所示:

clip_image037

布置好各控件以后,我们就可以来为这些控件编写程序来实现相应的功能了。

最后单击相应的按钮,便跳出对应的界面,如按下选择文件按钮就得到如图所示结果。

clip_image038

  评论这张
 
阅读(20959)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017