实验六 频域抽样定理和音频信号的处理实验报告
(一)频域抽样定理
给定信号
1.利用DTFT计算信号的频谱
,一个周期内角频率离散为M=1024点,画出频谱图,标明坐标轴。
n=0:100; %设定n及其取值范围
for n1=0:13 %对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
for n2=14:26
xn(n2+1)=27-n2;
end
for n3=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-1 M=1024时的信号频谱图像
2.分别对信号的频谱
在区间
上等间隔抽样16点和32点,得到
和
。离散傅里叶反变换后得到时域信号
和
。
M=16时:
n=0:100;%设定n及其取值范围
for n1=0:13 %对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
for n2=14:26
xn(n2+1)=27-n2;
end
for n3=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时:
function xn=idft(Xk,N)
N=length(Xk);
for n=0:N-1
sum=0;
for k=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及其取值范围
for n1=0:13 %对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
for n2=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-1 M=16时的时域信号图像
M=32时:
n=0:26; %设定n及其取值范围
for n1=0:13 %对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
for n2=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-2 M=32时的时域信号图像
x(n)原信号程序 :
n=0:100;%设定n及其取值范围
for n1=0:13%对于n处于不同的取值范围将n代入不同的表达式
x(n1+1)=n1+1;
end
for n2=14:26
x(n2+1)=27-n2;
end
for n3=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
M,满足频域抽样定理,所以不存在时域混叠失真,因此。
与x(n)相同。由此验证了频域抽样定理。
4.利用内插
公式
小学单位换算公式大全免费下载公式下载行测公式大全下载excel公式下载逻辑回归公式下载
,由
和
分别得到
的估计值,计算 均方误差,从频域角度验证频率抽样定理。
clc,clear
n=0:100;%设定n及其取值范围
for n1=0:13%对于n处于不同的取值范围将n代入不同的表达式
xn(n1+1)=n1+1;
end
for n2=14:26
xn(n2+1)=27-n2;
end
for n3=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序列初值均为零
for b=0:M-1 %外层循环,每次循环赋予sum初值为零
sum=0;
for k=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序列初值均为零
for b=0:M-1 %外层循环,每次循环赋予sum初值为零
sum=0;
for k=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-4 M=16时
的估计和M=32时
的估计
M=16时均方误差为 230.2131
M=32时均方误差为 1.2767e-26
当M小于序列长度时,均方误差较大,不能很好地恢复原序列。当M=32时,满足频域抽样定理,均方误差小到可以忽略不计,认为能不失真地恢复出原序列。由此验证了频域抽样定理。
(二)音频信号的处理
实验内容:
1、语音信号的采集
利用Windows 附件中的录音机,录制一段自己的话音,时间在1 s内。在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软件与所学知识相结合,让我们在亲身实践中体会数字信号处理带来的乐趣,同样受益匪浅。