数字信号处理实验六报告讲解.docx
《数字信号处理实验六报告讲解.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验六报告讲解.docx(18页珍藏版)》请在冰豆网上搜索。
数字信号处理实验六报告讲解
实验六频域抽样定理和音频信号的处理实验报告
(一)频域抽样定理
给定信号
1.利用DTFT计算信号的频谱
,一个周期内角频率离散为M=1024点,画出频谱图,标明坐标轴。
n=0:
100;%设定n及其取值范围
forn1=0:
13%对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
forn2=14:
26
xn(n2+1)=27-n2;
end
forn3=27:
100
xn(n3+1)=0;
end
M=1024;%设定抽样离散点的个数
k=0:
M-1;%设定k的取值范围
w=2*pi*k/M;%定义数字角频率
[X,w]=dtft2(xn,n,M)%调用dtft2子程序求频谱
plot(w,abs(X));%画出幅度值的连续图像
xlabel('w/rad');ylabel('|X(exp(jw))|');title('M=1024时的信号频谱图像');%标明图像的横纵坐标和图像标题
function[X,w]=dtft2(xn,n,M)%定义x(n)的DTFT函数
w=0:
2*pi/M:
2*pi-2*pi/M;%将数字角频率w离散化
L=length(n);%设定L为序列n的长度
for(k=1:
M)%外层循环,w循环M次
sum=0;%每确定一个w值,将sum赋初值为零
for(m=1:
L)%内层循环,对n求和,循环次数为n的长度
sum=sum+xn(m)*exp(-j*w(k)*n(m));%求和
X(k)=sum;%把每一次各x(n)的和的总值赋给X,然后开始对下一个w的求和过程
end%内层循环结束
end%外层循环结束
M=1024时的信号频谱图像如图1-1所示:
图1-1M=1024时的信号频谱图像
2.分别对信号的频谱
在区间
上等间隔抽样16点和32点,得到
和
。
离散傅里叶反变换后得到时域信号
和
。
M=16时:
n=0:
100;%设定n及其取值范围
forn1=0:
13%对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
forn2=14:
26
xn(n2+1)=27-n2;
end
forn3=27:
100
xn(n3+1)=0;
end
M=16;%设定抽样点的个数
k=0:
M-1;%设定k的取值范围
w=2*pi*k/M;%定义数字角频率
[X,w]=dtft2(xn,n,M)%调用dtft2子程序求频谱
stem(w,abs(X),'.');%画出幅度值的抽样离散图像
xlabel('k');ylabel('X16(k)');title('X(exp(jw))的16点抽样');%标明横纵坐标和图像标题
M=32时只需将程序中的M值改变即可,子函数程序同实验一。
16点抽样的图形如图1-2-1所示:
图1-2
的16点抽样
32点抽样的图形如图1-2-2所示:
图1-2-2
的32点抽样
3.画出信号
和
的图形,计算
与
和
的均方误差。
从时域角度上进行对比和分析,验证频域抽样定理。
M=16时:
functionxn=idft(Xk,N)
N=length(Xk);
forn=0:
N-1
sum=0;
fork=0:
N-1
sum=sum+(1/N)*(Xk(k+1)*exp(j*2*pi*n*k/N));
end
xn(n+1)=sum;
end
n=0:
26;%设定n及其取值范围
forn1=0:
13%对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
forn2=14:
26
xn(n2+1)=27-n2;
end
M=16;%设定抽样点的个数
k=0:
M-1;%设定k的取值范围
w=2*pi*k/M;%定义数字角频率
[X,w]=dtft2(xn,n,M)%调用dtft2子程序求频谱
xn=idft(X,M)%调用idft求时域信号xn
m=0:
15;%限定m的取值范围
stem(m,xn);%画出xn16的离散图像
xlabel('m');ylabel('xn16');title('M=16时的时域信号图像');%标明图像的横纵坐标和图像标题
M=16时的时域信号图像如图1-3-1所示:
图1-3-1M=16时的时域信号图像
M=32时:
n=0:
26;%设定n及其取值范围
forn1=0:
13%对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
forn2=14:
26
xn(n2+1)=27-n2;
end
M=32;%设定抽样点的个数
k=0:
M-1;%设定k的取值范围
w=2*pi*k/M;%定义数字角频率
[X,w]=dtft2(xn,n,M)%调用dtft2子程序求频谱
xn=idft(X,M)%调用idft求时域信号xn
m=0:
31;%限定m的取值范围
stem(m,xn);%画出xn16的离散图像
xlabel('m');ylabel('xn32');title('M=32时的时域信号图像');%标明图像的横纵坐标和图像标题
M=32时的时域信号图像如图1-3-2所示:
图1-3-2M=32时的时域信号图像
x(n)原信号程序:
n=0:
100;%设定n及其取值范围
forn1=0:
13%对于n处于不同的取值范围将n代入不同的表达式
x(n1+1)=n1+1;
end
forn2=14:
26
x(n2+1)=27-n2;
end
forn3=27:
100
x(n3+1)=0;
end
stem(n,x);%画出原信号的时域离散图像
xlabel('n');ylabel('x(n)');title('原信号序列');%标明横纵坐标和图像标题
x(n)原信号图形如图1-3-3所示:
图1-3-3原信号序列时域图像
计算均方误差:
16时:
ans=3.9476
32时:
ans=0
对信号x(n)的频谱函数X(ejω)在[0,2π]上等间隔采样N=16时,N点IDFT[
]得到的序列正是原序列x(n)以16为周期进行周期延拓后的主值区序列:
由于N与x(n)不相同。
当N=32时,由于N>M,满足频域抽样定理,所以不存在时域混叠失真,因此。
与x(n)相同。
由此验证了频域抽样定理。
4.利用内插公式,由
和
分别得到
的估计值,计算均方误差,从频域角度验证频率抽样定理。
clc,clear
n=0:
100;%设定n及其取值范围
forn1=0:
13%对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
forn2=14:
26
xn(n2+1)=27-n2;
end
forn3=27:
100
xn(n3+1)=0;
end
M=1024;
N=16;%设定抽样点的个数
k=0:
M-1;%设定k的取值范围
w=2*pi*k/M;%定义数字角频率
[X,s]=dtft2(xn,n,N);%调用dtft2子程序求xn的频谱幅度值
Xe=zeros(1,M);%赋Xe序列初值均为零
forb=0:
M-1%外层循环,每次循环赋予sum初值为零
sum=0;
fork=0:
N-1%内层循环,对于k的每次循环,代入内插公式累计求和
sum=sum+X(k+1)*((1/N)*(sin(w(b+1)*N/2-k*pi)/sin(w(b+1)/2-k*pi/N))*exp(-j*(N-1)*w(b+1)/2+j*k*pi*(N-1)/N));
end
Xe(b+1)=sum;%将循环总值赋予Xe
end
k=0:
M-1;%重新设定k的取值范围
w=2*pi*k/M;%由于k取值范围改变w的取值范围随之改变
subplot(2,1,1);plot(w,abs(Xe));%画出Xe的连续图谱
xlabel('k');ylabel('X16(k)');title('M=16时X(exp(jw))的估计');%标明横纵坐标和图像标题
N=32;%设定抽样点的个数
k=0:
M-1;%设定k的取值范围
w=2*pi*k/M;%定义数字角频率
[X,s]=dtft2(xn,n,N);%调用dtft2子程序求xn的频谱幅度值
Xe=zeros(1,M);%赋Xe序列初值均为零
forb=0:
M-1%外层循环,每次循环赋予sum初值为零
sum=0;
fork=0:
N-1%内层循环,对于k的每次循环,代入内插公式累计求和
sum=sum+X(k+1)*((1/N)*(sin(w(b+1)*N/2-k*pi)/sin(w(b+1)/2-k*pi/N))*exp(-j*(N-1)*w(b+1)/2+j*k*pi*(N-1)/N));
end
Xe(b+1)=sum;%将循环总值赋予Xe
end
k=0:
M-1;%重新设定k的取值范围
w=2*pi*k/M;%由于k取值范围改变w的取值范围随之改变
subplot(2,1,2);plot(w,abs(Xe));%画出Xe的连续图谱
xlabel('k');ylabel('X32(k)');title('M=32时X(exp(jw))的估计');%标明横纵坐标和图像标题
M=16和M=32时的估计图形如图1-4所示:
图1-4M=16时
的估计和M=32时
的估计
M=16时均方误差为230.2131
M=32时均方误差为1.2767e-26
当M小于序列长度时,均方误差较大,不能很好地恢复原序列。
当M=32时,满足频域抽样定理,均方误差小到可以忽略不计,认为能不失真地恢复出原序列。
由此验证了频域抽样定理。
(二)音频信号的处理
实验内容:
1、语音信号的采集
利用Windows附件中的录音机,录制一段自己的话音,时间在1s内。
在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
通过wavread函数的使用,理解采样频率、采样点数等概念。
2、语音信号的频谱分析
画出语音信号的时域波形,然后对语音号进行快速傅里叶变换,得到原始模拟信号的频谱特性,画出频谱图,标注坐标轴。
3、用滤波器对信号进行滤波
在离散时间域,使信号通过冲激响应为
的低通滤波器,得到系统的输出。
4、比较滤波前后语音信号的波形及频谱
5、回放语音信号
在Matlab中,函数sound可以对声音进行回放,调用格式:
sound(x,fs,bits),感受滤波前后的声音的变化。
(输入时域波形)
x=wavread('1.wav');%调用wavread函数
n=0:
63487;%设定横坐标n和其取值范围
plot(n,x);%调用plot函数画出连续图像
xlabel('n');ylabel('x');title('语音时域波形图');%标明横纵坐标和标题
(输入频域波形)
x=wavread('1.wav');%调用wavread函数
n=0:
63487;
M=1024;%设定离散点个数
[X,w]=dtft2(x,n,M)%调用dtft函数
plot(w,X);%调用plot函数画出频谱的连续图像
xlabel('w');ylabel('X');title('语音频域波形图');%标明横纵坐标和图像标题
(滤波前后的时域波形)
clc,clear
N=63519;n=0:
N-1;%设定序列的总长度N,为n赋取值范围
M=63488;m=0:
M-1;%设定wavread函数序列长度及m的取值范围
B=32;b=0:
B-1;%设定h(n)序列的长度及b的取值范围
x=wavread('1.wav');%调用wavread函数
subplot(2,1,1);plot(m,x);%分配作图空间,调用plot函数画出滤波前的波形
xlabel('n');ylabel('x');title('输入时域波形图');%标明横纵坐标和图像标题
hn=0.5*(1-cos((2*pi*b)/(B-1)));%hn表达式
y=conv((x(:
1))',hn);%调用conv卷积函数求x与hn的卷积
a=0:
M+B-2;%设定m的取值范围
subplot(2,1,2);stem(a,y);%画出系统通过滤波器后输出的离散图像
xlabel('n');ylabel('y');title('输出时域波形图');%标明横纵坐标和图像标题
(滤波后的频域波形)
clc,clear
N=63519;n=0:
N-1;%设定序列的总长度N,为n赋取值范围
P=63488;m=0:
P-1;%设定wavread函数序列长度及m的取值范围
B=32;b=0:
B-1;%设定h(n)序列的长度及b的取值范围
x=wavread('1.wav');%调用wavread函数
hn=0.5*(1-cos((2*pi*b)/(B-1)));%hn表达式
y=conv((x(:
1))',hn);%调用conv卷积函数求x与hn的卷积
a=0:
P+B-2;%设定m的取值范围
M=1024;%设定离散点个数
[Y,w]=dtft2(y,a,M);%调用dtft函数
plot(w,abs(Y));axis([-pi,pi,-1000,1000])%调用plot函数画出频谱的连续图像
xlabel('w');ylabel('Y');title('语音输出频域波形图');%标明横纵坐标和图像标题
仿真图形:
见图2-1,图2-2,图2-3:
图2-1音频信号仿真图形
图2-2滤波前的频域波形图
图2-3滤波后的频域波形图
收获心得:
在编写程序时注意设定变量的位置(子程序还是主程序),这对于实验结果会产生直接的影响。
此外,这次有趣的音频信号实验巧妙地将windows软件与所学知识相结合,让我们在亲身实践中体会数字信号处理带来的乐趣,同样受益匪浅。