实验1 用MATLAB进行信号频谱分析(推荐文档)
实验1用MATLAB进行信号频谱分析

实验用进行信号频谱分析一、实验目的㈠初步掌握产生常用离散时间信号的编程方法。
㈡学习编写简单的算法程序,对离散信号进行幅频谱分析。
㈢观察离散时间信号频谱的特点。
二、实验原理㈠常用的离散时间信号在语言主要是研究离散信号的。
常用的离散信号有:.单位取样序列001)(n n n .单位阶跃序列0001)(n n n u .实指数序列Ra n a n x n ;)(.复指数序列ne n x n j )(0)(.正(余)弦序列)c o s ()(0n n x n.周期序列nN n x n x )()(㈡离散信号的产生离散信号的图形显示使用指令。
在中的信号处理工具箱中,主要提供的信号是离散信号。
由于对下标的约定为从开始递增,例如[],表示()()()…因此要表示一个下标不由开始的数组(),一般应采用两个矢量,如[,,,,,,,,];[,,,,,,,,];这表示了一个含个采样点的矢量:(){(),(),(),(),(),(),(),(),()}。
.单位取样序列001)(n n n 这一函数实现的方法有二:方法一:可利用的函数。
(,);建立一个一行列的全零数组();对()赋方法二:可借助于关系操作符实现;[]; 等于时逻辑关系式结果为真,;不等于时为假,如要产生202100100)(10)(n n n n n n n n n n n n 则可采用实现:;[()];时逻辑关系式结果为真,;≠时为假,.单位阶跃序列001)(n n n u 这一函数可利用的函数实现:(,);。
matlab离散频谱分析实验报告

matlab离散频谱分析实验报告Matlab离散频谱分析实验报告引言:离散频谱分析是一种重要的信号处理技术,用于研究信号的频域特性。
在本次实验中,我们使用Matlab软件进行离散频谱分析,旨在通过实践掌握离散频谱分析的基本原理和方法,并通过实验结果验证其有效性。
一、实验目的本次实验的主要目的是研究信号的频谱特性,具体包括以下几个方面:1. 了解离散傅里叶变换(DFT)的原理和计算方法;2. 掌握Matlab中进行离散频谱分析的基本函数和操作;3. 分析不同信号的频谱特性,并通过实验结果验证分析的准确性。
二、实验步骤1. 生成测试信号首先,我们需要生成一个测试信号,以便进行后续的频谱分析。
在Matlab中,我们可以使用randn函数生成高斯白噪声信号,或者使用sin函数生成正弦信号。
根据实验要求,我们选择生成一个正弦信号作为测试信号。
2. 离散傅里叶变换(DFT)DFT是一种将时域信号转换为频域信号的方法。
在Matlab中,我们可以使用fft 函数进行DFT计算。
通过对测试信号进行DFT计算,我们可以得到信号的频谱。
3. 频谱图绘制为了更直观地观察信号的频谱特性,我们可以使用Matlab的plot函数将频谱绘制成图形。
通过观察频谱图,我们可以分析信号的频率分布、频谱幅值等特性。
4. 频谱分析根据实验要求,我们需要对测试信号进行频谱分析。
通过分析频谱图,我们可以得到信号的主要频率成分、频率分布情况等信息。
在实际应用中,频谱分析可以用于信号识别、滤波器设计等领域。
三、实验结果与分析在本次实验中,我们生成了一个频率为f的正弦信号,并进行了离散频谱分析。
通过观察频谱图,我们可以明显看到信号在频率为f处存在一个峰值,这表明信号主要由频率为f的成分组成。
同时,我们还观察到信号的频谱幅值随频率的变化而变化,这说明信号的不同频率成分具有不同的能量。
通过对不同频率信号的频谱分析,我们可以进一步研究信号的频率特性。
例如,对于周期信号,我们可以通过分析其频谱图确定其基频和谐波成分;对于非周期信号,我们可以通过分析其频谱图了解其频率分布情况。
基于Matlab的频谱分析

基于Matlab 的频谱分析一、实验目的1、掌握时域抽样定理。
2、通过实验加深对FFT 的理解。
3、熟悉应用FFT 对典型信号进行频谱分析的方法。
二、实验原理1、时域抽样定理时域抽样定理给出了连续信号抽样过程中信号不失真的约束条件:对于基带信号,信号抽样频率 大于等于2倍的信号最高频率 ,即 。
时域抽样是把连续信号 变成适于数字系统处理的离散信号 。
对连续信号以间隔T 抽样,则可得到的离散序列为 。
图1 连续信号抽样的离散序列若 ,则信号 与 的频谱之间存在:其中: 的频谱为, 的频谱为 。
可见,信号时域抽样导致信号频谱的周期化。
(rad/s))e (j ΩX ()∑∞-∞=-=n n X T)(j 1samωω)e (j ΩX []k X )e (j ωX )j (ωX T sam/2πω=[]k X ()t X []()kTt kT X X ==k ()t X []k X ()t X []()kT t kT X X ==k m sam f f 2≥samf m f为抽样角频率, 为抽样频率。
数字角频率Ω与模拟角频率ω的关系为:Ω=ωT 。
2、 离散傅立叶变换(DFT )有限长序列)(n x 的离散傅立叶变换(DFT )为10,)()]([)(10-≤≤==∑-=-N n W n x n x DFT k X N n kn N逆变换为10,)(1)]([)(10-≤≤==∑-=-N n W k X N k X IDFT n x N n kn N3、快速傅立叶变换(FFT )在各种信号序列中,有限长序列占重要地位。
对有限长序列可以利用离散傅立叶变换(DFT)进行分析。
DFT 不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。
有限长序列的DFT 是其z 变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。
FFT 是DFT 的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。
使用Matlab进行频谱分析

使用 FFT 进行频谱分析1. 快速傅里叶变换(FFT )按照被变换的输入信号类型不同,傅立叶变换可以分为 4种类型: 1)非周期性连续信号傅立叶变换(Fourier Transform ) 2)周期性连续信号傅立叶级数(Fourier Series )3)非周期性离散信号离散时域傅立叶变换(Discrete Time Fourier Transform ) 4)周期性离散信号离散傅立叶变换(Discrete Fourier Transform )因为计算机只能处理离散的数值信号,对于连续信号要先离散化,我们的最终目的是运用计算机来处理信号的。
对于离散信号的变换只有离散傅立叶变换(DFT )才能被适用,对于计算机来说只有离散的和有限长度的数据才能被处理,对于其它的变换类型只有在数学演算中才能用到。
快速傅里叶变换(Fast Fourier Transform ,FFT )是DFT 的一种快速算法。
DFT 的运算过程是这样的:1j /01()()eN nt Nn X k x n Nπ−−==∑可见,在计算机上进行的DFT ,使用的输入值是经过ADC (Analog-to-Digital Conversion )后采集到的采样值,也就是时域的信号值,输入采样点的数量决定了转换的计算规模。
变换后的频谱输出包含同样数量的采样点,但是其中有一半的值是冗余的,通常不会显示在频谱中,所以真正有用的信息是N /2+1个点。
FFT 是1965年由T. W. Coody 和J. W. Tukey 提出的,采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N 越多,FFT 算法计算量的节省就越显著。
2. MATLAB 中FFT 的使用方法1)语法说明 Y = fft(X)说明:用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。
• 如果 X 是向量,则 fft(X) 返回该向量的傅里叶变换。
信号谱分析matlab实验

clear all ;close all ;clc;cd F:\MATLAB\spectralanalysis ;%file path of experiment_data.mat; load experiment_data ;figure;plot(data);N1=64;%data length;N2=256;data64=[data(65:65+N1-1) data(129:129+N1-1) data(193:193+N1-1)];%the three statistical samples of data using starting points of 64,128,and 192 for N=64;data256=[data(257:257+N2-1) data(513:513+N2-1)data(769:769+N2-1)];%the three statistical samples of data using starting points of 256,512,and 768 for N=256;Ts=1;%sampling interval is 1s;%1.Periodogram Methods%9-6aK=8;figure(1);for time1=1:3plot(linspace(0,1/Ts,K*N1),10*log10(abs(fft(data64(:,time1),K*N1)).^2/length(data64(:,time1))));hold on ;endhold off ;xlabel('frequency');ylabel('spectral density estimate(dB)');xlim([0 (1/Ts/2)]);ylim([-20 20]);title('9-6a periodogram,N=64,rect window,no smooth');%9-6(b)我们对这个模型采样,获得1024个采样点,结合极限谱密度的图,我们可以知道我们的数据中包含三个sine 波形以及附加的高斯有色噪声(colored Gaussian noise )wn1=2*hanning(N1);figure(2);for time1=1:3datatapering64(:,time1)=data64(:,time1).*wn1;plot(linspace(0,1/Ts,K*N1),10*log10(abs(fft(datatapering64(:,time1),K *N1)).^2/length(datatapering64(:,time1))));hold on;endhold off;xlabel('frequency');ylabel('spectral density estimate(dB)');xlim([0 (1/Ts/2)]);ylim([-20 20]);title('9-6b periodogram,N=64,hanning window,no smooth');%--------------------------------------------------------------------%9-6cfigure(3);for time1=1:3Sf=(abs(fft(data64(:,time1),K*N1)).^2/length(data64(:,time1)));for n=1:(length(Sf)-16)Sfmat(n,:)=Sf(n:n+15,:);endSfsmooth=Sfmat*ones(16,1)./16;plot(linspace(0,1/Ts,n),10*log10(Sfsmooth));hold on;endhold off;xlabel('frequency');ylabel('spectral density estimate(dB)');xlim([0 (1/Ts/2)]);ylim([-20 20]);title('9-6c periodogram,N=64,rect window,smooth M=2');%9-6dwn1=2*hanning(N1);figure(4);for time1=1:3datatapering64(:,time1)=data64(:,time1).*wn1;Sf=(abs(fft(datatapering64(:,time1),K*N1)).^2/length(datatapering64(: ,time1)));for n=1:(length(Sf)-16)Sfmat(n,:)=Sf(n:n+15,:);endSfsmooth=Sfmat*ones(16,1)./16;plot(linspace(0,1/Ts,n),10*log10(Sfsmooth));hold on;endhold off;xlabel('frequency');ylabel('spectral density estimate(dB)');xlim([0 (1/Ts/2)]);ylim([-20 20]);title('9-6d periodogram,N=64,hanning window,smooth M=2');从图9-6a中的周期图中可以看出,频谱假峰很多,可靠性差、分辨力低,难以从中得到正确的频谱信息。
matlab信号分析实验报告

matlab信号分析实验报告Matlab信号分析实验报告引言:信号分析是一门重要的学科,它涉及到信号的获取、处理和解释。
在现代科学和工程领域中,信号分析被广泛应用于各种领域,如通信、图像处理、音频处理等。
本实验报告将介绍在Matlab环境下进行信号分析的实验过程和结果。
1. 实验目的本实验旨在通过Matlab软件对不同类型的信号进行分析,包括时域分析、频域分析和滤波处理。
通过实验,我们可以深入了解信号的特性和分析方法,并掌握Matlab在信号分析中的应用。
2. 实验材料和方法本实验使用了Matlab软件和一些信号处理工具箱。
实验中使用的信号包括正弦信号、方波信号和噪声信号。
我们首先通过Matlab生成这些信号,并对其进行采样和量化。
然后,我们进行时域分析,包括信号的时域波形绘制和功率谱密度估计。
接下来,我们进行频域分析,包括信号的傅里叶变换和频谱绘制。
最后,我们对信号进行滤波处理,包括低通滤波和高通滤波。
3. 实验结果和讨论在实验中,我们首先生成了一个正弦信号,并对其进行采样和量化。
通过时域分析,我们可以观察到信号的周期性和振幅。
通过频域分析,我们可以观察到信号的频谱分布。
我们还对正弦信号进行了低通滤波和高通滤波,观察到滤波后信号的变化。
接下来,我们生成了一个方波信号,并对其进行采样和量化。
通过时域分析,我们可以观察到信号的周期性和方波特征。
通过频域分析,我们可以观察到信号的频谱分布。
我们还对方波信号进行了低通滤波和高通滤波,观察到滤波后信号的变化。
最后,我们生成了一个噪声信号,并对其进行采样和量化。
通过时域分析,我们可以观察到信号的随机性和波动性。
通过频域分析,我们可以观察到信号的频谱分布。
我们还对噪声信号进行了低通滤波和高通滤波,观察到滤波后信号的变化。
通过以上实验结果,我们可以得出以下结论:- 时域分析可以帮助我们观察信号的波形和特征。
- 频域分析可以帮助我们观察信号的频谱分布和频率成分。
实验用MATLAB进行信号频谱分析

实验1 用MATLAB 进行信号频谱分析一、实验目的㈠ 初步掌握MATLAB 产生常用离散时间信号的编程方法。
㈡ 学习编写简单的FFT 算法程序,对离散信号进行幅频谱分析。
㈢ 观察离散时间信号频谱的特点。
二、实验原理㈠ 常用的离散时间信号在 MATLAB 语言主要是研究离散信号的。
常用的离散信号有:1.单位取样序列⎩⎨⎧≠==0001)(n n n δ 2.单位阶跃序列⎩⎨⎧<≥=0001)(n n n u 3.实指数序列R a n a n x n∈∀=;)( 4.复指数序列n e n x nj ∀=+)(0)(ωσ5.正(余)弦序列)c o s ()(0θω+=n n x n ∀6.周期序列n N n x n x ∀+=)()(㈡ 离散信号的产生离散信号的图形显示使用stem 指令。
在 MATLAB 中的信号处理工具箱中,主要提供的信号是离散信号。
由于MATLAB 对下标的约定为从1开始递增,例如x=[5,4,3,2,1,0],表示x(1)=5,x(2)=4,X(3)=3…因此要表示一个下标不由1开始的数组x(n),一般应采用两个矢量,如 n=[-3,-2,-1,0,l ,2,3,4,5];x=[1,-l ,3,2,0,4,5,2,1];这表示了一个含9个采样点的矢量:X(n)={x(-3),x(-2),x(-1),x(0),x(1),x(2),x(3),x(4),x(5)}。
1.单位取样序列⎩⎨⎧≠==δ0001)(n n n 这一函数实现的方法有二:方法一:可利用MATLAB 的zeros 函数。
x=zeros(1,N); %建立一个一行N 列的全零数组x(1)=1; %对X (1)赋1方法二:可借助于关系操作符实现n=1:N;x=[n==1]; %n 等于1时逻辑关系式结果为真,x=1;n 不等于1时为假,x=0如要产生 ⎪⎩⎪⎨⎧≤<<=≤≤=-δ202100100)(10)(n n n n n n n n n n n n则可采用MATLAB 实现:n=n1:n2;x=[(n-n0)==0];%n=n0时逻辑关系式结果为真,x=1;n ≠n0时为假,x=02.单位阶跃序列⎩⎨⎧<≥=0001)(n n n u这一函数可利用MATLAB 的ones 函数实现:x=ones(1,N);还可借助于关系操作符“>=”来实现。
用matlab对信号进行频谱分析及滤波

华东交通大学课程设计(论文)任务书专业 xxx 班级 xx 姓名 xxx一、课程设计(论文)题目应用Matlab对信号进行频谱分析及滤波二、课程设计(论文)工作:自 xxx 年 x 月 x 日起至 xxx 年 x 月 x 日止。
三、课程设计(论文)的内容要求:学生签名:20 年月日课程设计(论文)评阅意见评阅人职称20 年月日目录设计过程步骤(5)2.1 语音信号的采集(5)2.2 语音信号的频谱分析(6)2.3 设计数字滤波器和画出其频谱响应(7)2.4 用滤波器对信号进行滤波(9)2.5滤波器分析后的语音信号的波形及频谱(10)●心得和经验(11) ●参考文献 (12)设计过程步骤2.1 语音信号的采集我们利用Windows下的录音机,录制了一段开枪发出的声音,时间在1 s内。
接着在C盘保存为WAV格式,然后在Matlab软件平台下.利用函数wavread对语音信号进行采样,并记录下了采样频率和采样点数,在这里我们还通过函数sound引入听到采样后自己所录的一段声音。
通过wavread函数和sound的使用,我们完成了本次课程设计的第一步。
其程序如下:[x,fs,bite]=wavread('c:\alsndmgr.wav',[1000 20000]);sound(x,fs,bite);2.2 语音信号的频谱分析首先我们画出语音信号的时域波形;然后对语音信号进行频谱分析,在Matlab中,我们利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性性。
到此,我们完成了课程实际的第二部。
其程序如下:n=1024;subplot(2,1,1);y=plot(x(50:n/4));grid on ;title('时域信号')X=fft(x,256); subplot(2,1,2);plot(abs(fft(X))); grid on ;title('频域信号');运行程序得到的图形:2.3 设计数字滤波器和画出其频谱响应紧接着着我们做了一个数字滤波器:采样频率10Hz,通带截止频率fp=3Hz,阻带截止频率fs=4Hz通带衰减小于1dB,阻带衰减大于20dB,我们主要使用双线性变换法由模拟滤波器原型设计数字滤波器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 用MATLAB 进行信号频谱分析
一、实验目的
㈠ 初步掌握MATLAB 产生常用离散时间信号的编程方法。
㈡ 学习编写简单的FFT 算法程序,对离散信号进行幅频谱分析。
㈢ 观察离散时间信号频谱的特点。
二、实验原理
㈠ 常用的离散时间信号
在 MATLAB 语言主要是研究离散信号的。
常用的离散信号有:
1.单位取样序列
⎩⎨⎧≠==0
001)(n n n δ 2.单位阶跃序列
⎩⎨⎧<≥=0001)(n n n u
3.实指数序列
R a n a n x n
∈∀=;)( 4.复指数序列
n e n x n
j ∀=+)(0)(ωσ
5.正(余)弦序列
)cos()(0θω+=n n x n ∀
6.周期序列
n N n x n x ∀+=)()(
㈡ 离散信号的产生
离散信号的图形显示使用stem 指令。
在 MATLAB 中的信号处理工具箱中,主要提供的信号是离散信号。
由于MATLAB 对下标的约定为从1开始递增,例如x=[5,4,3,2,1,0],表示x(1)=5,x(2)=4,X(3)=3…
因此要表示一个下标不由1开始的数组x(n),一般应采用两个矢量,如 n=[-3,-2,-1,0,l ,2,3,4,5];
x=[1,-l ,3,2,0,4,5,2,1];
这表示了一个含9个采样点的矢量:X(n)={x(-3),x(-2),x(-1),x(0),x(1),x(2),x(3),x(4),x(5)}。
1.单位取样序列
⎩⎨⎧≠==δ0
001)(n n n 这一函数实现的方法有二:
方法一:可利用MATLAB 的zeros 函数。
x=zeros(1,N); %建立一个一行N 列的全零数组
x(1)=1; %对X (1)赋1
方法二:可借助于关系操作符实现
n=1:N;
x=[n==1]; %n 等于1时逻辑关系式结果为真,x=1;n 不等于1时为假,x=0
如要产生 ⎪⎩⎪⎨⎧≤<<=≤≤=-δ202100100)(10)(n n n n n n n n n n n n
则可采用MATLAB 实现:
n=n1:n2;
x=[(n-n0)==0];%n=n0时逻辑关系式结果为真,x=1;n ≠n0时为
假,x=0
2.单位阶跃序列
⎩⎨⎧<≥=0001)(n n n u
这一函数可利用MATLAB 的ones 函数实现:
x=ones(1,N);
还可借助于关系操作符“>=”来实现。
如要产生在n1≤n0≤n2上的单位阶跃序列
⎩⎨⎧<≥=-00
001)(n n n n n n u
则可采用MATLAB 实现:
n=n1:n2;
x=[(n-n0)>=0]; %n-n0≥0为真,x=1;n-n0<0时为假,x=0
3.实指数序列
为任意实数a a n x n =)(
采用MATLAB 实现:
n=0:N-l ;
x=a.^n ;
4.复指数序列
n j e n x )(0)(ω+σ=
采用MATLAB 实现:
n=0:N-1;
x=exp((lu+j*w0)*n);
5.正(余)弦序列
)cos()(0θω+=n n x
采用MATLAB 实现:
n=0:N-l ;
x=cos(w0*n+Q);
6.随机序列
MATLAB 中提供了两类(伪)随机信号:
rand(1,N)产生[0,1)上均匀分布的随机矢量;
randn(1,N)产生均值为0,方差为1的高斯随机序列,也就是白噪声序列。
其它分布的随机数可通过上述随机数的变换而产生。
7.周期序列
)()(N n x n x +=
例如,设t1表示T 序列中一个周期的序列,要产生4个周期的T 序列,用MATLAB 实现:
T =[t1 t1 t1 t1];
三、实验任务
㈠ 运行实验原理中介绍的例题程序,读懂每一条程序的含义,熟悉MATLAB 中离散信号和频谱分析常用的子函数。
㈡ 编写求解例1中单位阶跃序列频谱的程序,并显示其信号及其频谱曲线。
n0=0;nf=10;ns=3;N=32;M=100;
n2=n0:nf;x2=[(n2-ns)>=0];
subplot(3,1,1),stem(n2,x2); %画出x2的单位阶跃序列
i=0:N-1; j=0:M-1; %样点自0开始
y1=fft(x2,N); %对x2进行32点傅里叶变换y2=fft(x2,M); %对x2进行100点傅里叶变换aw1=abs(y1); aw2=abs(y2); %求幅度谱
subplot(3,1,2);plot(i,aw1) %32点傅里叶变换的频谱图subplot(3,1,3);plot(j,aw2) %100点傅里叶变换的频谱图
㈢已知一个用square产生的方波信号频率为100Hz,幅度为2V,对其进行32点的采样并进行FFT运算,显示采样后的信号及其频谱图。
(可参考例5)f=100;Um=2;nt=1; %输入信号频率100、振幅为2和显示一个周期个数
N=32;T=nt/f; %N为32个采样点数,T为窗口显示时间dt=T/N; %采样时间间隔
n=0:N-1;
t=n*dt;
xn=Um*square(2*f*pi*t,50); %产生时域信号
subplot(2,1,1);stem(t,xn); %显示时域信号
axis([0 T 1.1*min(xn) 1.1*max(xn)]);
ylabel('x(n)');
i=0:N-1;
y=fft(xn,N);
AW=abs(y); %用FFT子函数求信号的频谱
subplot(2,1,2);stem(i,AW); %显示信号的频谱
ylabel('|X(k)|');
(四) 一无限长序列x(n)=)(8.0n u n
① 截取序列长度M=10点,用FFT 计算其频谱,并与理论计算的结果进行比较,观察频谱泄漏现象.
② 截取序列长n0=0;nf=9;
n3=n0:nf;x3=(0.8).^n3; %实数指数序列 subplot(3,1,1);stem(n3,x3);
N=10;i=0:N-1;
M=50;j=0:M-1;
y1=fft(x3,N);
y2=fft(x3,M);
aw1=abs(y1);aw2=abs(y2); %求幅度谱
subplot(3,1,2);plot(i,aw1);
subplot(3,1,3);plot(j,aw2);
四、实验总结
3.我们知道抽样时间间隔越小,此时显示的频谱越是准确。
因此,当我们在利用fft计算频谱的时候,我们应该尽量提高取样点数,在任务一中发现32个采样点比100个采样点的频谱泄露严重,同时在任务三中也可以发现在M=10的时候频谱泄露比M=50的时候严重。
4 连续信号的频谱是非周期的,一旦我们将其离散,那么依据“一个域的离散必定导致另一个域的周期延拓”,因此我们可以知道离散时间信号的频谱是周期的。