基于MATLAB的信号频谱分析及实现
数 字 信 号 处 理
课程设计
题目: 基于MATLAB的信号频谱分析及实现
学院: 信息工程
专业: 通信工程
班级: 1001
学号: 2010013448, 2010013466
姓名: 常珍珍 , 彭婷
指导教师: 符茂胜
目录
1、背景3
2、设计目的3
3、设计原理3
4、设计过程4
5、实验代码及结果4
5.1 MATLAB源程序4
5.2 比较结果分析8
6、实验体会及总结8
参考文献9
1、背景
信号的频谱分析就是利用傅里叶分析的方法,求出与时域描述相对应的频域描述,从中找出信号频谱的变化规律,以达到特征提取的目的。实际的待分析信号一般没有解析式,直接利用公式进行傅里叶分析非常困难。DFT是一种时域和频域均离散化的傅里叶变换,适合数值计算且有快速算法,是分析信号的有力工具。本文以连续时间信号为例,介绍利用DFT分析信号频谱的基本流程,实例列出MATLAB环境下频谱分析的实现程序。
2、设计目的
1、进一步掌握数字信号处理课程的基本理论、基本方法和基本技术。
增进对MATLAB的认识,利用MATLAB加深对理论知识的理解。
3、了解和掌握使用MATLAB的应用过程和方法,为以后的设计打下良好基础。
4、通过课程设计,培养我们能根据设计要求,进行理论知识分析、设计方法总结、典型实例设计等方面的设计综合能力。
3、设计原理
时域抽样定理:时域抽样定理给出了连续信号抽样过程中信号不失真的约束条件:对于基带信号,信号抽样频率大于等于2倍的信号最高频率,即。时域抽样是把连续信号变成适于数字系统处理的离散信号。对连续信号以间隔T抽样,则可得到的离散序列为。
若,则信号与的频谱之间存在:
其中,的频谱为,的频谱为。
② 离散傅立叶变换(DFT):有限长序列的离散傅立叶变换(DFT)为
逆变换为
③ 快速傅立叶变换(FFT):离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。 在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT且和x相同长度;若x为一矩阵,则y是对矩阵的每一列向量进行FFT。如果x长度是2的幂次方,函数fft执行高速基-2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数。函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数截短x使之长度为N;若x 为矩阵,按相同方法对x进行处理。
4、设计过程
1、利用MATLAB中的wavread命令来读入(采集)语音信号,将它赋值给某一向量。再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析。对于波形图与频谱图都可以用 MATLAB画出。我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音变化。
2、DFT:已知一个语音信号,数据采样频率为100Hz,试分别绘制N=128点DFT的幅频图和N=1024点DFT幅频图。
3、通过改变系统函数的分子与分母系数比,来观察信号滤波前后的幅值与相位。
5、5.1 MATLAB源程序
(1)编程如下:
[x,fs,bits]=wavread('1.wav',[1024 5120]);
sound(x,fs,bits);
X=fft(x,4096);
magX=abs(X);
angX=angle(X);
subplot(2,2,1);plot(x);title('原始信号波形');
subplot(2,2,2);plot(X); title('原始信号频谱');
subplot(2,2,3);plot(magX);title('原始信号幅值');
subplot(2,2,4);plot(angX);title('原始信号相位');
程序运行可以听到声音,得到的图形为:
图(1)原始信号波形和频谱图
(2)编程如下:
x=wavread('1.wav');
sound(x);
fs=100;N=128;
y=fft(x,N);
magy=abs(y);
f=(0:length(y)-1)'*fs/length(y);
subplot(2,2,1);plot(f,magy);
xlabel('频率(Hz)');ylabel('幅值');
title('N=128(