当前位置:文档之家› 应用MATLAB对信号进行频谱分析

应用MATLAB对信号进行频谱分析

数字信号处理课程设计报告书
课题名称
应用MATLAB 对信号进行频谱分析
姓 名 张炜玮 学 号 20086377 院、系、部 电气系 专 业 电子信息工程 指导教师
刘鑫淼
※※※※※※※※※ ※
※ ※
※ ※

2008级数字信号处
理课程设计
2011年7 月1日
应用MATLAB对信号进行频谱分析
20086377 张炜玮
一、设计目的
用MATLAB语言进行编程,绘出所求波形,并且运用FFT求对连续信号进行分析。

二、设计要求
1、用Matlab产生正弦波,矩形波,并显示各自的时域波形图;
2、进行FFT变换,显示各自频谱图,其中采样率、频率、数据长度自选,要求注明;
3、绘制三种信号的均方根图谱;
4、用IFFT回复信号,并显示恢复的正弦信号时域波形图。

三、系统原理
用FFT对信号作频谱分析是学习数字信号处理的重要内容。

经常需要进行频谱分析的信号是模拟信号和时域离散信号。

频谱分辨率直接和FFT的变换区间N 有关,因为FFT能够实现频率分辨率是2π/N。

x(n)是一个长度为M的有限长序列,则x(n)的N点离散傅立叶变换为:
X(k)=DFT[x(n)]=
kn
N
W
N
n
n
x

-
=
1
)
(
,k=0,1,...,N-1
N
j
e
N
Wπ2-
=
逆变换:x(n) =IDFT[X(k)]=
kn
N
W
k
X
N
n
N
-

-
=
1
)
(
1
,k=0,1,...,N-1
但FFT是一种比DFT更加快速的一种算法,提高了DFT的运算速率,为数字信号处理技术应用于各种信号处理创造了条件,大大提高了数字信号处理技术的发展。

本实验就是采用FFT,IFFT对信号进行谱分析。

四、程序设计
fs=input('please input the fs:');%设定采样频率
N=input('please input the N:');%设定数据长度
t=0:0.001:1;
f=100;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f*t);
figure(1);
subplot(211);
plot(t,x);%作正弦信号的时域波形
axis([0,0.1,-1,1]);
title('正弦信号时域波形');
z=square(50*t);
subplot(212)
plot(t,z)
axis([0,1,-2,2]);
title('方波信号时域波形');grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; figure(2);
subplot(211);
plot(f,mag);%做频谱图
axis([0,1000,0,200]);
title('正弦信号幅频谱图');
y1=fft(z,N);%进行fft变换
mag=abs(y1);%求幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212);
plot(f,mag);%做频谱图
axis([0,1000,0,200]);
title('方波信号幅频谱图');grid;
%求功率谱
sq=abs(y);
power=sq.^2;
figure(3)
subplot(211);
plot(f,power);
title('正弦信号功率谱');grid;
sq1=abs(y1);
power1=sq1.^2;
subplot(212);
plot(f,power1);
title('方波信号功率谱');grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(4);
subplot(211);
plot(ti,magx);
axis([0,0.1,-1,1]);
title('通过IFFT转换的正弦信号波形');
zifft=ifft(y1);
magz=real(zifft);
ti1=[0:length(zifft)-1]/fs;
subplot(212);
plot(ti1,magz);
title('通过IFFT转换的方波信号波形');grid;
五、仿真结果及分析
由图可以看出正弦波周期T=0.01,采样点N=1024.程序为: t=0:0.001:1;f=100;%设定正弦信号频率 x=sin(2*pi*f*t);figure(1); subplot(211);
plot(t,x);%作正弦信号的时域波形 axis([0,0.1,-1,1]); title('正弦信号时域波形'); z=square(50*t); subplot(212) plot(t,z)
axis([0,1,-2,2]);
title('方波信号时域波形');grid;
01002003004005006007008009001000
50100150
200正弦信号幅频谱图
100
200
300
400
500
600
700
800
900
1000
050100150
200方波信号幅频谱图
2、对正弦波、方波信号进行FFT 变换程序: y=fft(x,N);%进行fft 变换 mag=abs(y);%求幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; figure(2); subplot(211);
plot(f,mag);%做频谱图
axis([0,1000,0,200]); title('正弦信号幅频谱图'); y1=fft(z,N);%进行fft 变换 mag=abs(y1);%求幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212);
plot(f,mag);%做频谱图 axis([0,1000,0,200]);
title('方波信号幅频谱图');grid;
050100150200250300350400450500
5
10
15
4
正弦信号功率谱
050100150200250300350400450500
1234
5
方波信号功率谱
正弦信号、方波信号功率谱程序: sq=abs(y); power=sq.^2; figure(3) subplot(211); plot(f,power);
title('正弦信号功率谱');grid; sq1=abs(y1); power1=sq1.^2; subplot(212);
plot(f,power1);
title('方波信号功率谱');grid;
00.010.020.030.040.050.060.070.080.090.1
-1
-0.500.5
1通过IFFT 转换的正弦信号波形
0.5
1
1.5
2
2.5
-2-101
2通过IFFT 转换的方波信号波形
对两个信号进行恢复程序: xifft=ifft(y); magx=real(xifft);
ti=[0:length(xifft)-1]/fs; figure(4); subplot(211); plot(ti,magx); axis([0,0.1,-1,1]);
title('通过IFFT 转换的正弦信号波形'); zifft=ifft(y1); magz=real(zifft);
ti1=[0:length(zifft)-1]/fs; subplot(212); plot(ti1,magz);
title('通过IFFT 转换的方波信号波形');grid;
当采样频率小于2fc 或N 小于M 时恢复信号就会出现失真,频谱会发生馄叠。

六、设计总结
通过对本次应用MATLAB语言对信号进行频谱分析及滤波设计,使更加系统的理解了FFT,IFFT功能,对采样频谱分析及恢复功能掌握有了进一步提高,如果序列x(n)主值序列长度为M,最高频率为fc只有当频率采样点N≥M,采样频率fs≥2fc时,才有x(n)=IDFT[X(k)]=x(n)可有频域采样X(k)恢复原序列x(n),否则产生时域混叠失真现象。

七、参考文献
[1]丁玉美,高西全.数字信号处理.2版.西安:西安电子科技大学出版社,2001
[2] 胡广书.数字信号处理.北京:清华大学出版社,1998
[3] 刘毅成,孙祥娥.数字信号处理.北京:电子工业出版社,2004
[4] 陈亚勇等.MATLAB信号处理详解.人民邮电出版社,2001。

相关主题