数字信号处理翻转课堂笔记6
The Flipped Classroom6 of DSP
对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著
一、要点
1、离散傅里叶变换(DFT)的定义;
2、DFT与傅里叶变换、z变换之间的关系(重点);
3、DFT与周期序列DFS之间的关系,即DFT的隐含周期性(难点);
4、利用MATLAB求序列DFT的基本方法。
二、问题与解答
1、根据DFT、z变换、序列傅里叶变换(FT)的定义式,分析3者之间的数学关系,并据此说明DFT的物理含义(DFT是否能反映序列的频谱特性?)。
2、
3、
4、任意取一个周期实序列,分别截取该序列的1个周期和2个周期长度,用MATLAB求各自的DFT,比较两者所得结果的联系和区别。相关原理分析参见第四版教材P102页(第三版P99页)。
5、利用MATLAB平台,以适当的采样频率,用电脑自带麦克风采集不同的人说某一个单音节(比如数字“1”)的语音信号(基于MATLAB平台的语音采集方法或程序,请自行查阅相关资料。比如可以利用audiorecorder来录音)。然后用DFT分析所采集语音信号的频谱(注意首先要对采集到的语音信号进行适当的截取),说明该频谱所对应的模拟频率,对比不同人说同一个音节的频谱的差异(最好分别用男声和女声进行采集)。需汇报如下内容:语音采集的方法、所采集的语音信号波形、单音节语音信号的截取方式、DFT频谱分析方法及其程序设计思路、对频谱分析结果的比较和讨论等等。
6、假设某长度为8的序列 ,其24点DFT的模如图所示,试分别画出 的8点和12点DFT的模。
7、
1、DFT与z变换和DTFT的关系及DFT的物理含义
根据DFT、z变换、序列傅里叶变换(FT)的定义式,分析3者之间的数学关系,并据此说明DFT的物理含义(DFT是否能反映序列的频谱特性?)。
数学关系:
物理意义:
1、
2、
物理意义1的图形解释:
2、不同长度的DFT的分析
代码:
%% 代码:
%% 幅度:
xn=[1,1,1,1];
Xk4=fft(xn,4);
N=4;
k=0:N-1;
w=k*2*pi/N;
subplot(3,1,1)
stem(w/pi,abs(Xk4));
xlabel('w/\pi')
ylabel('幅度')
title('Xk4')
axis([0 2 0 5])
subplot(3,1,2)
Xk8=fft(xn,8);
N=8;
k=0:N-1;
w=k*2*pi/N;
stem(w/pi,abs(Xk8));
xlabel('w/\pi')
ylabel('幅度')
title('Xk8')
axis([0 2 0 5])
subplot(3,1,3)
Xk32=fft(xn,32);
N=32;
k=0:N-1;
w=k*2*pi/N;
stem(w/pi,abs(Xk32));
xlabel('w/\pi')
ylabel('幅度')
title('Xk32')
axis([0 2 0 5])
%% 相位:
figure(2)
xn=[1,1,1,1];
Xk4=fft(xn,4);
N=4;
k=0:N-1;
w=k*2*pi/N;
subplot(3,1,1)
stem(w/pi,angle(Xk4));
xlabel('w/\pi')
ylabel('相位')
title('Xk4')
axis([0 2 -2 2])
subplot(3,1,2)
Xk8=fft(xn,8);
N=8;
k=0:N-1;
w=k*2*pi/N;
stem(w/pi,angle(Xk8));
xlabel('w/\pi')
ylabel('相位')
title('Xk8')
axis([0 2 -2 2])
subplot(3,1,3)
Xk32=fft(xn,32);
N=32;
k=0:N-1;
w=k*2*pi/N;
stem(w/pi,angle(Xk32));
xlabel('w/\pi')
ylabel('相位')
title('Xk32')
axis([0 2 -2 2])
运行结果:
幅度谱:
相位谱:
分析:
1、区别与联系:同一序列,采样点数不同,DFT的结果不同但其包络形状相同。
2、DFT与FT的关系:X(k)为x(n)的傅里叶变换在区间[0,2п]上的N点等间隔采样。
3、4点DFT时,DFT的隐含周期为4。从x(n)周期延拓为x(n)4,可以看做单位阶跃序列,它的DFS(k)只在k+4m取值,取其主值序列X(k)。是直流序列,只有直流成分,它的频谱上只有零频率成分。(教材99页解释如下)
3、DFT的隐含周期性
关系:
有限长序列x(n) 的N点离散傅里叶变换X(k)正好是x(n)的周期延拓序列的离散傅里叶级数系数的主值序列。
即R4(n)的4、8、32点DFT=相应周期为4、8、32的周期序列的DFS
总结:
联系就是:
4、同一周期序列不同周期长度的DFT
任意取一个周期实序列,分别截取该序列的1个周期和2个周期长度,用MATLAB求各自的DFT,比较两者所得结果的联系和区别。
代码:
%% 代码:
% DFT的MATLAB计算
xn=[1 1 1 1]; %输入时域序列向量xn=R4(n)
Xk16=fft(xn,16); %计算xn的16点DFT
Xk32=fft(xn,32); %计算xn的32点DFT
%以下为绘图部分
k=0:15;wk=2*k/16; %产生16点DFT对应的采样点频率(关于π归一化值)
subplot(2,2,1);
stem(wk,abs(Xk16),'.'); %绘制16点DFT的幅频特性图
title('(a)16点DFT的幅频特性图');
xlabel('ω/π');
ylabel('幅度')
subplot(2,2,3);
stem(wk,angle(Xk16),'.'); %绘制16点DFT的相频特性图
line([0,2],[0,0]);
title('(b)16点DFT的相频特性图')
xlabel('ω/π');
ylabel('相位');
axis([0,2,-3.5,3.5])
k=0:31;
wk=2*k/32; %产生32点DFT对应的采样点频率(关于π归一化值)
subplot(2,2,2);
stem(wk,abs(Xk32),'.'); %绘制32点DFT的幅频特性图
title('(c)32点DFT的幅频特性图');
xlabel('ω/π');
ylabel('幅度')
subplot(2,2,4);
stem(wk,angle(Xk32),'.'); %绘制32点DFT的相频特性图
line([0,2],[0,0]);
title('(d)32点DFT的相频特性图');
xlabel('ω/π');
ylabel('相位');
axis([0,2,-3.5,3.5])
运行结果:
联系:各自的DFT幅频响应还是都能反应傅里叶变换的包络变化;
区别:截取二者的不同周期时,二者DFT幅频响应发生变化。可以看成是两个不同的的DFT,也可以看做是不同部分的叠加求和。
5、语音采集的频谱分析
利用MATLAB平台,以适当的采样频率,用电脑自带麦克风采集不同的人说某一个单音节(比如数字“1”)的语音信号(基于MATLAB平台的语音采集方法或程序,请自行查阅相关资料。比如可以利用audiorecorder来录音)。然后用DFT分析所采集语音信号的频谱(注意首先要对采集到的语音信号进行适当的截取),说明该频谱所对应的模拟频率,对比不同人说同一个音节的频谱的差异(最好分别用男声和女声进行采集)。需汇报如下内容:语音采集的方法、所采集的语音信号波形、单音节语音信号的截取方式、DFT频谱分析方法及其程序设计思路、对频谱分析结果的比较和讨论等等。
代码:
%% 代码:
%%进行语音信号的采集
n=8000; %采样个数
fs=11025; %采样频率
y=audiorecorder(n,16,2); %样本大小为16,2为立体声道
disp('Start speaking.')
recordblocking(y,2); %录制2秒
disp('End of Recording.');
g=getaudiodata(y); %得到以n*2列数字矩阵存储的刚录制的音频信号
filename='C:\luyin\luyin2s.wav';
audiowrite('voice.wav',g,fs); %将采集到的音频信号存入文件'voice.wav'
%%语音信号的采集并绘图分析
[y1,Fs]=audioread('voice.wav'); %读取音频文件
t=(0:length(y1)-1)/Fs;
figure(1);
plot(y1);
legend('时域波形图');
title('原语音信号时域波形图');
xlabel('时间(s)');
ylabel('幅度');
%%DFT分析
figure(2);
N=length(y1); %序列长度
f=(0:N-1)*Fs./N; %真实频率值
y2=fft(y1,N)
plot(f,abs(y2));
axis([0 1000 0 120]);
title('原语音信号DFT波形图');
xlabel('频率(Hz)');
ylabel('幅度');
进行了两次发声,第一次为“1”(正常男声),第二次为“啊”(男生的假声),结果如下:
由图可知:原始语音信号的频率大致分布在0-1000hz之中。
第二次的声音频率比第一次高。
6、不同长度的DFT的频谱
假设某长度为8的序列 ,其24点DFT的模如图所示,试分别画出 的8点和12点DFT的模。
代码:
%% 代码:
clf
x=[0 3 6 9 12 15 18 21];
y=[2 2 5 3 0 3 5 2];
stem(x,y)
title('N=8')
figure(2)
x=[0 2 4 6 8 10 12 14 16 18 20 22];
y=[2 1 3 5 4 2 0 2 4 5 3 1];
stem(x,y)
title('N=12')
运行结果:
7、有限长序列经周期延拓后的DFS以及截取一段后的DFT
代码:
%% 代码:
clf
clear
xn=[0 1 2 1 1 0 0 0]; %构造序列
xn=ifft(xn,8);
N=8;
n = 0:1:N-1;
k = 0:1:N-1;
WN = exp(-1i*2*pi/N); %DFS的准备(具体见教材式2.3.6)'1i'等价于虚数单位'j'
nk = n'*k; %n转置后成了一个方阵
WNnk = WN .^ nk; %次方
Xk = xn * WNnk; %相乘
figure(1) %x((n))8的DFS
stem(k,abs(Xk))
title('DFS')
figure(2) %x(n)*R16(n)的16点的DFT
N=16;
k = [0:1:15];
xn1=[xn,xn];
Xk=fft(xn1,N); %DFT用fft函数来求
stem(k,abs(Xk))
title('DFT')
运行结果:
分析规律:
三、反思总结
1、DFT和DTFT的matlab计算方法:
2、第7题DFS的matlab求法
N=8; %DFS的准备(具体见教材式2.3.6)
n = 0:1:N-1;
k = 0:1:N-1;
WN = exp(-1i*2*pi/N); %'1i'等价于虚数单位'j'
nk = n'*k; %n转置后成了一个方阵
WNnk = WN .^ nk; %次方
Xk = xn * WNnk; %相乘
教材式2.3.6