数字信号处理设计报告
课题名称 应用 MATLAB 对信号进行频谱分析及滤波
姓
学
名
号
毛路生
B08040827
院、系
电气工程与自动化
专
业
自动化
指导教师
宋丽君
1
应用 MATLAB 对信号进行频谱分析及滤波
一、 设计目的
用 MATLAB 语言进行编程,绘出所求波形,并且运用 FFT 求对连续信号进行分
析。
二、设计要求
1、用 Matlab 产生正弦波,矩形波,并显示各自的时域波形图;
2、进行 FFT 变换,显示各自频谱图,其中采样率、频率、数据长度自选,要
求注明;
3、绘制三种信号的均方根图谱;
4、用 IFFT 回复信号,并显示恢复的正弦信号时域波形图。
三、系统原理
用 FFT 对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行频
谱分析的信号是模拟信号和时域离散信号。频谱分辨率直接和 FFT 的变换区间 N
有关,因为 FFT 能够实现频率分辨率是 2π/N。
x(n)是一个长度为 M 的有限长序列,则 x(n)的 N 点离散傅立叶变换为:
1
N
nx
(
n
0
kn
)
NW
NW
j
2
N
e
,k=0,1,...,N-1
X(k)=DFT[x(n)]=
逆变换:x(n) =IDFT[X(k)]=
1
X
N
1
nN
0
)(
NWk
kn
,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;%设定正弦信号频率
%生成正弦信号
2
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);
3
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;
五、仿真结果及分析
1
0.5
0
-0.5
-1
0
2
1
0
-1
-2
0
正 弦 信 号 时 域 波 形
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
方 波 信 号 时 域 波 形
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
由图可以看出正弦波周期 T=0.01,采样点 N=1024.程序为:
t=0:0.001:1;f=100;%设定正弦信号频率
4
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;
200
150
100
50
0
0
200
150
100
50
0
0
正 弦 信 号 幅 频 谱 图
100
200
300
400
500
600
700
800
900
1000
方 波 信 号 幅 频 谱 图
100
200
300
400
500
600
700
800
900
1000
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变换
5
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;
x 104
正 弦 信 号 功 率 谱
15
10
5
0
0
50
100
150
200
250
300
350
400
450
500
x 105
方 波 信 号 功 率 谱
0
50
100
150
200
250
300
350
400
450
500
4
3
2
1
0
正弦信号、方波信号功率谱程序:
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;
6
1
0.5
0
-0.5
-1
0
2
1
0
-1
-2
0
通 过 IFFT转 换 的 正 弦 信 号 波 形
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
通 过 IFFT转 换 的 方 波 信 号 波 形
0.5
1
1.5
2
2.5
对两个信号进行恢复程序:
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时恢复信号就会出现失真,频谱会发生馄叠。
7
六、设计总结:
通过对本次应用 MATLAB 语言对信号进行频谱分析及滤波设计,使更加系统
的理解了 FFT,IFFT 功能,对采样频谱分析及恢复功能掌握有了进一步提高,如
果序列 x(n)主值序列长度为 M,最高频率为 fc 只有当频率采样点 N≥M,采样频
率 fs≥2fc 时,才有 x(n)=IDFT[X(k)]=x(n)可有频域采样 X(k)恢复原序列 x(n),
否则产生时域混叠失真现象。
8