数字信号处理实验课程设计.docx
《数字信号处理实验课程设计.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验课程设计.docx(14页珍藏版)》请在冰点文库上搜索。
数字信号处理实验课程设计
题目二、任意确定信号的频谱分析
分析:
信号在时域的离散化导致其频谱函数的周期化;信号在时域的周期化导致其频谱函数的离散化。
连续信号离散化过程中国的频谱混叠主要有两种方法:
对于带限连续信号,只要提高抽样频率使之满足时域抽样定理;对于非带限连续信号,可根据实际情况对其进行低通滤波,使之称为带限信号。
通过补0可以提高信号频谱的显示分辨率。
频谱混叠与连续信号的时域抽样间隔有关,频率泄漏与信号的时域加窗截短的长度有关,栅栏现象与DFT的点数有关,、、。
1.利用FFT分析有限长序列
的频谱,并绘出其幅度谱与相位谱。
程序:
P=256;
omega=[0:
P-1]*2*pi/P;
X=2+3*exp(-j*omega)+3*exp(-2*j*omega)+exp(-3*j*omega)+5*exp(-5*j*omega);
subplot(2,1,1);
plot(omega./pi,abs(fftshift(X)));
xlabel('以pi为单位的频率');
title('幅度谱');
ylabel('幅度');
subplot(2,1,2);
plot(omega./pi,angle(X));
xlabel('以pi为单位的频率');
title('相位谱');ylabel('弧度');
2.利用FFT分析无限长非周期序列
的频谱。
分析步骤为:
(1)确定序列的长度
及窗函数的类型(序列为无限长时,需要根据能量分布进行截短)。
(2)确定作FFT的点数
;根据频域取样定理,为使时域波形不产生混叠,必须
。
(3)使用fft函数作
点FFT计算
,并绘出其幅度谱与相位谱。
(4)进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。
程序:
信号无限长,因此需要对其进行截短。
该序列单调衰减,当k>=30时,序列已几乎衰减为0,因此只取序列在区间[0,30]上的数值进行分析。
k=0:
30;
x=(1/3).^k;
X=fftshift(fft(x,256));
subplot(2,1,1);
plot(abs(X));%画出序列频谱的幅度谱
title('幅度谱');ylabel('幅度');
subplot(2,1,2);
plot(angle(X));
title('相位谱');ylabel('弧度');
理论值:
3.利用FFT分析周期序列
的频谱,并绘出其幅度谱与相位谱。
分析步骤为:
(1)确定DFT计算的参数,即周期序列的基本周期N;
(2)利用fft函数求其一个周期的DFT;并绘出其离散幅频图和相频图。
若DFT的长度和周期N不等,结果如何?
试一试。
(3)进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。
程序:
该周期序列的周期N=32,基频Ω0=π/16。
N=32;n=0:
N-1;
x=cos(7*pi/16*n)+0.5*cos(9*pi/16*n)+0.75*cos(pi/2*n);
X=fft(x,N);
subplot(2,1,1);
stem(n-N/2,abs(fftshift(X)));
title('幅度谱');
ylabel('幅度');xlabel('n');
subplot(2,1,2);
stem(n-N/2,angle(fftshift(X)));
title('相位谱');
ylabel('相位');xlabel('n');
ylabel('相位');xlabel('n');
N与周期不同:
N=64;n=0:
N-1;
x=cos(7*pi/16*n)+0.5*cos(9*pi/16*n)+0.75*cos(pi/2*n);
X=fft(x,N);
subplot(2,1,1);
stem(n-N/2,abs(fftshift(X)));
title('幅度谱');
ylabel('幅度');xlabel('n');
subplot(2,1,2);
stem(n-N/2,angle(fftshift(X)));
title('相位谱');
ylabel('相位');xlabel('n');
ylabel('相位');xlabel('n');
4.利用FFT分析连续信号
的频谱,并绘出其幅度谱与相位谱。
分析步骤为:
(1)确定DFT计算的各参数(抽样间隔,截短长度,频谱分辨率等),计算DFT。
(a)根据时域抽样定理,确定时域抽样间隔
,得到离散序列
;
(b)确定信号截短的长度
及窗函数的类型,得到
点长序列
;
(c)确定频域抽样点数
,要求
;
(d)利用FFT函数进行N点FFT计算得到N点的
;
(e)由
可得连续信号频谱
样点的近似值
。
(2)比较理论值(即傅里叶变换
)与计算值,分析误差原因,提出改善误差的措施并重做
(1),使误差减小。
程序:
fsam=100;Tp=6;
N=256;T=1/fsam;
t=0:
T:
Tp;
x=exp(-2*t);
X=T*fft(x,N);
w=(-N/2:
N/2-1)*(2*pi/N)*fsam;
y=1./(j*w+2);
subplot(2,1,1);
plot(w,abs(fftshift(X)),w,abs(y),'r-.');
title('幅度谱');xlabel('w');
axis([-10,10,0,1.4]);
subplot(2,1,2);
plot(angle(fftshift(X)));
xlabel('w');title('相位谱');
plot(w,fftshift(X)-y);
axis([-10,10,0,0.01]);
可能会产生频谱混叠(增大抽样频率),频率泄漏(换窗函数就能减弱),栅栏等现象(增加DFT的点数就能有效解决)导致误差。
随着抽样频率的提高,有DFT近似计算出的连续信号频谱的误差逐渐减小。
5.假设实际测得的一段信号的长度为0.4s,表达式为
,其中
,
自定。
试确定一合适抽样频率
,利用FFT分析该信号的频谱。
在信号截短时要求:
(1)使用Hamming窗,由实验确定能够分辨最小谱峰间隔
和信号长度
的关系。
(2)采用不同参数的Kaiser窗,确定能够分辨最小谱峰间隔
和信号长度
的关系。
连续周期信号频谱分析步骤为:
(1)确定周期信号的基本周期
;
(2)计算一个周期内的抽样点数
。
若周期信号的最高次谐频为p次谐波
,则频谱中有2p+1根谱线;若周期信号的频谱无限宽,则认为集中信号90%以上(或根据工程允许而定)能量的前(p+1)次谐波为近似的频谱范围,其余谐波忽略不计。
所以一般取
;
(3)对连续周期信号以抽样间隔
进行抽样,得到
;
(4)利用FFT函数对
作N点FFT运算,得到
;
(5)最后求得连续周期信号的频谱为
。
程序:
信号基频ω=
,信号周期T=1s;
f1=8Hz,f2=9Hz;
最高次谐频为9次谐波,则一般取N≥2*9+1=19,取N=32;
抽样间隔
;
T0=1;N=32;
T=T0/N;
t=0:
T:
T0;
x=cos(2*pi*100*t)+0.75*cos(2*pi*150*t);
Xm=fft(x,N)/N;
stem(abs(fftshift(Xm)));
xlabel('f(Hz)');
ylabel('幅度');
title('幅度谱');
题目一、韵母"a"的频谱分析
1、利用Windows下的录音机,录制3秒左右自己的声音,发音为汉语韵母"a"(在Matlab软件平台下,利用函数wavread对其进行采样,记住采样频率和采样点数。
通过wavread函数的使用,要求理解掌握采样频率、采样位数等概念)。
设抽样率为8000Hz/s。
2、取8000个数据进行频谱分析(在Matlab中,函数fft可以对离散信号进行频谱分析,并用函数fftshift将fft计算输出的零频移到输出的中心位置),得到幅度和相位谱。
3、取16000个数据进行频谱分析,得到幅度和相位谱。
比较二者异同并分析原因。
4、针对电话信道(最高3500Hz),对所有数据进行插值和抽取处理,把抽样率转变为7000Hz/s,并进行频谱分析,得到幅度和相位谱。
5、再把处理后的所有数据储存为声音文件,与原始声音进行比较(在Matlab中,函数sound可以对声音进行回放,其调用格式:
sound(x,fs,bits))。
程序:
1、
[x,fs,bits]=wavread('E:
\ringout.wav');
sound(x,fs,bits);%回放该音频
得到:
fs=22500Hz
bits=8
2、
X=resample(x,8000);
Y=fftshift(fft(X));%进行傅立叶变换
subplot(2,2,1);
plot(X);
title('声音信号的波形');
subplot(2,2,2);
plot(abs(Y));
title('声音信号的频谱');
axis([0,10000,0,300]);
subplot(2,2,3);
plot(angle(Y));
title('声音信号的相位谱');
axis([0,10000,-4,4]);
3、
X=esample(x,16000);
Y=fftshift(fft(X));%进行傅立叶变换
subplot(2,2,1);
plot(X);
title('声音信号的波形');
subplot(2,2,2);
plot(abs(Y));
title('声音信号的频谱');
axis([0,20000,0,300]);
subplot(2,2,3);
plot(angle(Y));
title('声音信号的相位谱');
axis([0,20000,-4,4]);
4、
[x,fs,bits]=wavread('E:
\ringout.wav');
sound(y,7000,bits);
y=interpft(x,81250*7000/22500);
Y=fftshift(fft(y));
subplot(2,2,1);
plot(x);
subplot(2,2,2);
plot(y);
subplot(2,2,3);
plot(abs(Y));
subplot(2,2,4);
plot(angle(Y));