MATLAB离散傅立叶变换的应用

MATLAB离散傅立叶变换的应用
MATLAB离散傅立叶变换的应用

MATLAB 离散傅立叶变换的应用

一、序列的移位和周期延拓运算。

已知)()8.0()(8n R n x n =,利用MATLAB 生成并图示序列),(),(m n x n x -和)())((8n R n x N

),())((8n R m n x N -其中为周期的延拓。以表示8)())((,0,248n x n x N m N <<= 解:MATLAB 程序清单如下:

N=24;

M=8;

m=3;% 设移位值为3

n=0:N-1;

xn=0.8.^n.*(n>=0 & n

subplot(3,1,1);stem(n,xn,'.');grid;

axis([0 length(xn),0 1]);title('序列x(n)');

xc=xn(mod(n,8)+1); % 产生序列x(n)的周期延拓,求余后加1是因为

% MATLAB 矢量的下标从1开始

subplot(3,1,2);stem(n,xc,'.');grid;

axis([0 length(xc),0 1]);title('序列x(n)的周期延拓序列');

xm=[xn(m+1:M) xn(1:m)]; % 产生圆周移位序列xm=x((n+m))NRN (n)

xm=[xm zeros(1,N-length(xm))];

subplot(3,1,3);stem(n,xm,'.');grid;

axis([0 length(xm),0 1]);title('圆周移位序列x(n+m)');

二、利用MATLAB 验证N 点DFT 的物理意义。

ωω

j j jw e e n x DFT e X DTFT n R n x ----===11)]([)()

(),()(44其离散时间傅立叶变换已知有限长序列

试绘制出)(ωj e X 幅度频谱和相位频谱,并分别计算N=8和N=16时的DFT 。 解:MATLAB 程序清单如下:

clf % 清除所有的图形窗口

N1=8;N2=16; % 设置两种DFT 的长度

n=0:N1-1;

k1=n;k2=0:N2-1;

w=(0:2047)*2*pi/2048;

Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); % 对x(n)的频谱采样2048点

xn=[n>=0 & n<4]; % 产生序列x(n)

Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT

Xk2=fft(xn,N2); % 计算序列x(n)的16点DFT

subplot(3,1,1);

plot(w/pi,abs(Xw)); % 绘制序列x(n)的DTFT 的幅频曲线

grid;title('序列x(n)的幅频曲线|X(e^{j\omega})|');

subplot(3,1,2);

stem(k1*2/N1,abs(Xk1),'.');

grid;title('序列x(n)的8点DFT');

subplot(3,1,3);stem(k2,abs(Xk2),'.');

grid;title('序列x(n)的16点DFT');

% 也可以利用MATLAB 中的hold 命令,将上述3个图形绘制在一个图中,程序如下: clf % 清除所有的图形窗口

N1=8;N2=16; % 设置两种DFT 的长度

n=0:N1-1;

k1=n;k2=0:N2-1;

w=(0:2047)*2*pi/2048;

Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); % 对x(n)的频谱采样2048点

xn=[n>=0 & n<4]; % 产生序列x(n)

Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT

Xk2=fft(xn,N2); % 计算序列x(n)的16点DFT

plot(w/pi,abs(Xw)); % 绘制序列x(n)的DTFT 的幅频曲线

hold % 保持当前的图形窗口

H1=stem(k1*2/N1,abs(Xk1),'o');

set(H1,'color','r')

H2=stem(k2*2/N2,abs(Xk2),'*');

set(H2,'color','k');

% legend('|X(e^{j\omega})|','X_1(k)','X_2(k)');

上机练习题:

已知一个12点的离散序列}1,2,3,4,5,6,6,5,4,3,2,1{)(=n x ,要求:

(1) 利用MATLAB 计算序列的12点离散傅立叶变换(DFT ))(k X ,并绘出它的幅度和相

位图;

(2) 利用MATLAB 计算序列的离散时间傅立叶变换(DTFT )),(ωj e

X 并绘出它的幅度和相位图;

(3) 利用MATLAB 的hold 命令,将上述两张幅度频谱图合成一张,进行比较,以验证)

(k X 是)(ωj e X 的抽样。

三、验证DFT 的共轭对称性

分别以]5,4,3,2,1,0[)(],32,21,31,0,31,21,2,1[)(21=----++-+=n x j j j j j j n x 两个

序列为例,验证序列的DFT 的对称性质。

程序略。

四、利用MATLAB 验证两个序列的线性卷积和圆周卷积的关系

已知两个有限长序列:

()()2(1)3(2)4(3)5(4)x n n n n n n δδδδδ=+-+-+-+-

()()2(1)(2)2(3)h n n n n n δδδδ=+-+-+-

编写一个计算两个任意有限长序列的圆周卷积matlab 程序,计算这两个序列以下几种情况的圆周卷积,并与这两个序列的线性卷积结果相比较:

①()x n ⑤()h n ②()x n ⑥()h n ②()x n ⑨()h n ③()x n ⑩()h n

程序略。

五、利用快速卷积法计算两个序列的卷积

已知序列)(9.0)(),()4.0sin()(2015n R n h n R n n x n ==,试利用快速卷积法计算这两个序列的

卷积)(*)()(n h n x n y =。

解:快速卷积法的计算框图如下所示:

MAT L AB 程序清单如下:

Nx=15;Nh=20;

n1=1:Nx-1;n2=0:Nh-1;

xn=sin(0.4*n1).*(n1>=0 &n1

hn=0.9.^n2.*(n2>=0 &n2

L=pow2(nextpow2(Nx+Nh-1)); % 计算对序列x(n)和h(n) 卷积后得到序列yn 的长度 Xk=fft(xn,L); % 对序列x(n)作L 点DFT

Hk=fft(hn,L); % 对序列h(n)作L 点DFT

yn=ifft(Xk.*Hk);

短时傅里叶变换matlab程序

function [Spec,Freq]=STFT(Sig,nLevel,WinLen,SampFreq) %计算离散信号的短时傅里叶变换; % Sig 待分析信号; % nLevel 频率轴长度划分(默认值512); % WinLen 汉宁窗长度(默认值64); % SampFreq 信号的采样频率(默认值1); if (nargin <1), error('At least one parameter required!'); end; Sig=real(Sig); SigLen=length(Sig); if (nargin <4), SampFreq=1; end if (nargin <3), WinLen=64; end if (nargin <2), nLevel=513; end nLevel=ceil(nLevel/2)*2+1; WinLen=ceil(WinLen/2)*2+1; WinFun=exp(-6*linspace(-1,1,WinLen).^2); WinFun=WinFun/norm(WinFun); Lh=(WinLen-1)/2; Ln=(nLevel-1)/2; Spec=zeros(nLevel,SigLen); wait=waitbar(0,'Under calculation,please wait...'); for iLoop=1:SigLen, waitbar(iLoop/SigLen,wait); iLeft=min([iLoop-1,Lh,Ln]); iRight=min([SigLen-iLoop,Lh,Ln]); iIndex=-iLeft:iRight; iIndex1=iIndex+iLoop; iIndex2=iIndex+Lh+1; Index=iIndex+Ln+1; Spec(Index,iLoop)=Sig(iIndex1).*conj(WinFun(iIndex2)); end; close(wait); Spec=fft(Spec); Spec=abs(Spec(1:(end-1)/2,:));

matlab-离散信号傅里叶变换

1.请用MATLAB编写程序,实现任意两个有限长度序列的卷积和。要求用图 形显示两个序列及卷积结果。 解:y(n)=∑x(i)h(n-i) 假设x(n)={1,2,3,4,5}; h(n)={3,6,7,2,1,6}; y(n)=x(n)*h(n) 验证:y[n]=[1,12,28,46,65,72,58,32,29,30] 【程序】 N=5 M=6 L=N+M-1 x=[1,2,3,4,5] h=[3,6,7,2,1,6] y=conv(x,h) nx=0:N-1 nh=0:M-1 ny=0:L-1 subplot(131);stem(nx,x,'*b');xlabel('n');ylabel('x(n)');grid on subplot(132);stem(nh,h,'*b');xlabel('n');ylabel('h(h)');grid on subplot(133);stem(ny,y,'*r');xlabel('n');ylabel('y(h)');grid on 【运行结果】

2.已知两个序列x[n]=cos(n*pi/2), y[n]=e j*pi*n/4x[n],请编写程序绘制 X(e jw)和Y(e jw)和幅度和相角,说明它们的频移关系。 –提示:用abs函数求幅度,用angle求相角。 【程序】 n=0:15; x=cos(n*pi/2); y=exp(j*pi*n/4).*x; X=fft(x); Y=fft(y); magX=abs(X); angX=angle(X); magY=abs(Y); angY=angle(Y); subplot(221);stem(n,magX,'*r');xlabel('频率');ylabel('幅度');grid on; subplot(222);stem(n,angX,'*b');xlabel('频率');ylabel('相位');grid on; subplot(223);stem(n,magY,'*r');xlabel('频率');ylabel('幅度');grid on; subplot(224);stem(n,angY,'*b');xlabel('频率');ylabel('相位');grid on;

MATLAB实验傅里叶分析

MATLAB实验傅里叶分析

实验七 傅里叶变换 一、实验目的 傅里叶变换是通信系统、图像处理、数字信号处理以及物理学等领域内的一种重要的数学分析工具。通过傅里叶变换技术可以将时域上的波形分 布变换为频域上的分布,从而获得信号的频谱特性。MATLAB 提供了专门的函数fft 、ifft 、fft2(即2维快速傅里叶变换)、ifft2以及fftshift 用于实现对信号的傅里叶变换。本次实验的目的就是练习使用fft 、ifft 以及fftshift 函数,对一些简单的信号处理问题能够获取其频谱特性(包括幅频和相频特性)。 二、实验预备知识 1. 离散傅里叶变换(DFT)以及快速傅里叶变换(FFT)简介 设x (t )是给定的时域上的一个波形,则其傅里叶变换为 2()() (1)j ft X f x t e dt π∞--∞=? 显然X ( f )代表频域上的一种分布(波形),一般来说X ( f )是复数。而傅里叶逆变换定义为: 2()() (2)j ft x t X f e df π∞-∞ =?

因此傅里叶变换将时域上的波形变换为频域上的波形,反之,傅里叶逆变换则将频域上的波形变换为时域上的波形。 由于傅里叶变换的广泛应用,人们自然希望能够使用计算机实现傅里叶变换,这就需要对傅里叶变换(即(1)式)做离散化处理,使 之符合电脑计算的特征。另外,当 把傅里叶变换应用于实验数据的分 析和处理时,由于处理的对象具有 离散性,因此也需要对傅里叶变换 进行离散化处理。而要想将傅里叶 变换离散化,首先要对时域上的波 形x (t )进行离散化处理。采用一个 时域上的采样脉冲序列: δ (t -nT ), n = 0, 1, 2, …, N -1; 可以实现上述目的,如图所示。其中N 为采样点数,T 为采样周期;f s = 1/T 是采样频率。注意采样时,采样频率f s 必须大于两倍的信号频率(实际是截止频率),才能避免混迭效应。 接下来对离散后的时域波形()()()(x t x t t n T x n T δ= -=的傅里叶变换()X f 进行离散处理。与上述做法类 似,采用频域上的δ脉冲序列: x (t δ x (t )δ t t t

MATLAB的离散傅里叶变换的仿真

应用MATLAB对信号进行频谱分析及滤波 设计目的 要求学生会用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;%设定正弦信号频率

MATLAB数字图像处理几何变换傅里叶变换

Matlab数字图像处理实验指导 实验目的: 通过实验,深入理解和掌握图像处理的基本技术,提高动手实践能力。 实验环境: Matlab变成 实验一图像的几何变换 实验内容:设计一个程序,能够实现图像的各种几何变换。 实验要求:读入图像,打开图像,实现图像的平移变换、比例缩放、转置变换、镜像变换、旋转变换等操作。 实验原理: 图像几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置。学习几何变换的关键就是要确定这种空间映射关系,以及映射过程中的变化参数。 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。一个几何变换需要两部分运算:首先是空间变换所需的运算,如平移、镜像和旋转等,需要用它来表示输出图像与输入图像之间的(像素)映射关系;此外,还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。 设原图像f(x0,y0)经过几何变换产生的目标图像为g(x1,y1),则该空间变换(映射)关系可表示为: x1=s(x0,y0) y1=t(x0,y0) 其中,s(x0,y0)和t(x0,y0)为由f(x0,y0)到g(x1,y1)的坐标换变换函数。 一、图像平移 图像平移就是将图像中所有的点按照指定的平移量水平或者垂直移动。

二、图像镜像 镜像变换又分为水平镜像和垂直镜像。水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行对换;而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线为中心轴进行对换。 三、图像转置 图像转置是将图像像素的x坐标和y坐标呼唤。图像的大小会随之改变——高度和宽度将呼唤。

matlab自修课程设计报告(matlab实现傅立叶变换)

matlab实现信号的傅立叶变换 一、设计目的 ?1.熟悉和掌握matlab的基本使用方法,能够熟练运用matlab。 2.巩固信号与系统中的傅立叶变换内容,加深对这部分内容的理解。 二、设计任务 1.掌握matlab的基本操作。 2.利用matlab实现典型非周期信号的傅立叶变换,画出信号的时域图和频域图。 ?3.利用matlab实现傅立叶变换的基本性质。 三、设计原理 1.matlab简介 MATLAB是MathWorks公司推出的一套高性能的数值计算和可视化软件,经过多年大量的、坚持不懈的改进,现在MATLAB已经更新至7.x版。MATLAB集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。在这个环境下,对所要求解的问题,用户只需简单地列出数学表达式,其结果便以人们十分熟悉的数值或图形方式显示出来。 MATLAB可用来解决实际的工程和数学问题,其典型应用有:通用的数值计算,算法设计,各种学科(如自动控制、数字信号处理、统计信号处理)等领域的专门问题求解。MATLAB语言易学易用,不要求用户有高深的数学和程序语言知识,不需要用户深刻了解算法及编程技巧。MATLAB既是一种编程环境,又是一种程序设计语言。这种语言与C、FORTRAN等语言一样,有其内定的规则,但MATLAB的规则更接近数学表示。使用更为简便,可使用户大大节约设计时间,提高设计质量。 2.matlab2013b基本界面介绍 matlab2013b主界面窗口基本分为五个部分: 1)主菜单界面 在此界面我们只需要用到新建命令文件和对程序进行间断调试的功能 2)文件查看窗口,双击可快速打开文件

实验四MATLAB在离散傅立叶变换(DFT)中的应用

MATLAB 在离散傅立叶变换(DFT)中的应用 一、序列的移位和周期延拓运算。 已知)()8.0()(8n R n x n =,利用MATLAB 生成并图示序列),(),(m n x n x -和)())((8n R n x N ),())((8n R m n x N -其中为周期的延拓。以表示8)())((,0,248n x n x N m N <<= 解:MATLAB 程序清单如下: N=24; M=8; m=3;% 设移位值为3 n=0:N-1; xn=0.8.^n.*(n>=0 & n=0 & n<4]; % 产生序列x(n) Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT

数字信号处理实验 matlab版 离散傅里叶变换的性质

实验13 离散傅里叶变换的性质 (完美格式版,本人自己完成,所有语句正确,不排除极个别错误,特别适用于山大,勿用冰点等工具下载,否则下载之后的word格式会让很多部分格式错误,谢谢) XXXX学号姓名处XXXX 一、实验目的 1 加深对离散傅里叶变换(DFT)基本性质的理解。 2 了解有限长序列傅里叶变换(DFT)性质的研究方法。 3 掌握用MATLAB语言进行离散傅里叶变换性质分析时程序编写的方法。 二、实验内容 1 线性性质。 2 循环移位性质。 3 循环折叠性质。 4 时域和频域循环卷积特性。 5 循环对称性。 三、实验环境 MA TLAB7.0 四、实验原理 1 线性性质 如果两个有限长序列分别为x1(n)和x2(n),长度分别为N1和N2,且 y(n)=ax1(n)+bx2(n) (a、b均为常数) 则该y(n)的N点DFT为 Y(k)=DFT[y(n)]=aX1(k)+bX2(k) 0≤k≤N-1 其中:N=max[N1,N2],X1(k)和X2(k)分别为x1(n)和x2(n)的N点DFT。 例13-1已知x1(n)=[0,1,2,4],x2(n)=[1,0,1,0,1],求: (1)y(n)=2x1(n)+3x2(n),再由y(n)的N点DFT获得Y(k); (2)由x1(n)、x2(n)求X1(k)、X2(k),再求Y(k)=2X1(k)+3X2(k)。 用图形分别表示以上结果,将两种方法求得的Y(k)进行比较,由此验证有限长序列傅里叶变换(DFT)的线性性质。 解MA TLAB程序如下: >> xn1=[0,1,2,4]; %建立xn1序列 >> xn2=[1,0,1,0,1]; %建立xn2序列 >> N1=length(xn1);N2=length(xn2); >> N=max(N1,N2); %确定N >> if N1>N2 xn2=[xn2,zeros(1,N1-N2)]; %对长度短的序列补0 >> elseif N2>N1 xn1=[xn1,zeros(1,N2-N1)]; >> end >> yn=2*xn1+3*xn2; %计算yn >> n=0:N-1;k=0:N-1;

离散信号的傅里叶变换(MATLAB实验)

离散信号的变换(MATLAB 实验) 一、实验目的 掌握用Z 变换判断离散系统的稳定与否的方法,掌握离散傅立叶变换及其基本性质和特点,了解快速傅立叶变换。 二、实验内容 1、已经系统函数为 5147.13418.217.098.2250 5)(2342-++--+=z z z z z z Z H (1) 画出零极点分布图,判断系统是否稳定; (2)检查系统是否稳定; (3) 如果系统稳定,求出系统对于u(n)的稳态输出和稳定时间b=[0,0,1,5,-50];a=[2,-2.98,0.17,2.3418,-1.5147]; subplot(2,1,1);zplane(b,a);title('零极点分布图'); z=roots(a); magz=abs(z) magz = 0.9000 0.9220 0.9220 0.9900 n=[0:1000]; x=stepseq(0,0,1000); s=filter(b,a,x); subplot(2,1,2);stem(n,s);title('稳态输出'); (1)因为极点都在单位园内,所以系统是稳定的。 (2)因为根的幅值(magz )都小于1,所以这个系统是稳定的。 (3)稳定时间为570。 2、综合运用上述命令,完成下列任务。 (1) 已知)(n x 是一个6点序列: ???≤≤=其它,050,1)(n n x

计算该序列的离散时间傅立叶变换,并绘出它们的幅度和相位。 要求:离散时间傅立叶变换在[-2π,2π]之间的两个周期内取401个等分频率上进行数值求值。 n=0:5;x=ones(1,6); k=-200:200;w=(pi/100)*k; X=x*(exp(-j*pi/100)).^(n'*k); magX=abs(X);angX=angle(X); subplot(2,1,1);plot(w/pi,magX);grid;title('幅度'); subplot(2,1,2);plot(w/pi,angX);grid;title('相位'); (2) 已知下列序列: a. ,1000),52.0cos()48.0cos()(≤≤+=n n n n x ππ; b .)4sin()(πn n x =是一个N =32的有限序列; 试绘制)(n x 及它的离散傅立叶变换 )(k X 的图像。 a . n=[0:1:100];x=cos(0.48*pi*n)+cos(0.52*pi*n); subplot(2,1,1);plot(n,x);title('x(n)的图像'); X=dft(x,101); magX=abs(X); subplot(2,1,2);plot(n,magX);title('丨X(k)丨的图像');

吴镇杨matlab实验三快速傅里叶变换及其应用

实验三快速傅里叶变换及其应用 一:实验目的 (1)加深对FFT的理解,熟悉matlab中的有关函数。 (2)应用FFT对典型信号进行频谱分析。 (3)了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT. (4)应用FFT实现序列的线性卷积和相关。 二:实验原理: 在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散Fouier变换(DFT)。这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n)的长度为N时, 它的DFT定义为:反变换为: 有限长序列的DFT是其Z变换在单位圆上的等距采样,或者说是序列Fourier变换的等距采样,因此可以用于序列的谱分析。 FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。它是对变换式进行一次次分解,使其成为若干小点数的组合,从而减少运算量。常用的FFT是以2为基数的,其长度。它的效率高,程序简 单,使用非常方便,当要变换的序列长度不等于2的整数次方时,为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。 (一)在运用DFT进行频谱分析的过程中可能的产生三种误差 (1) 混叠 序列的频谱是被采样信号的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。 避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。 (2) 泄漏 实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。 泄漏不能与混叠完全分开,因为泄漏导致频谱的扩展,从而造成混叠。为了减少泄漏的影响,可以选择适当的窗函数使频谱的扩散减至最小。 (3) 栅栏效应 DFT是对单位圆上Z变换的均匀采样,所以它不可能将频谱视为一个连续函数,就一定意义上看,用DFT来观察频谱就好像通过一个栅栏来观看一个图景一样,只能在离散点上看到真实的频谱,这样就有可能发生一些频谱的峰点或谷点被“尖桩的栅栏”所拦住,不能别我们观察到。 减小栅栏效应的一个方法就是借助于在原序列的末端填补一些零值,从而变动DFT的点数,这一方法实际上是人为地改变了对真实频谱采样的点数和位置,相当于搬动了每一根“尖桩栅栏”的位置,从而使得频谱的峰点或谷点暴露出来。 (二)用FFT计算线性卷积 用FFT可以实现两个序列的圆周卷积。在一定的条件下,可以使圆周卷积等于线性卷积。一般情况,设两个序列的长度分别为N1和N2,要使圆周卷积等于线性卷积的充要条件是FFT的长度N≥N1+N2

MAtlab傅里叶变换实验报告

M A t l a b傅里叶变换实 验报告 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

班级信工142 学号 22 姓名何岩实验组别 实验日期室温报告日期成绩 报告内容:(目的和要求,原理,步骤,数据,计算,小结等) 1.求信号的离散时间傅立叶变换并分析其周期性和对称性; 给定正弦信号x(t)=2*cos(2*pi*10*t),fs=100HZ,求其DTFT。(a)代码: f=10;T=1/f;w=-10::10; t1=0::1;t2=0::1; n1=-2;n2=8;n0=0;n=n1::n2; x5=[n>=]; x1=2*cos(2*f*pi*t1); x2=2*cos(2*f*pi*t2); x3=(exp(-j).^(t2'*w)); x4=x2*x3; subplot(2,2,1);plot(t1,x1); axis([0 1 *min(x2) *max(x2)]); xlabel('x(n)');ylabel('x(n)'); title('原信号x1'); xlabel('t');ylabel('x1'); subplot(2,2,3);stem(t2,x2); axis([0 1 *min(x2) *max(x2)]); title('原信号采样结果x2'); xlabel('t');ylabel('x2'); subplot(2,2,2);stem(n,x5); axis([0 1 *min(x5) *max(x5)]); xlabel('n');ylabel('x2'); title('采样函数x2'); subplot(2,2,4);stem(t2,x4); axis([0 1 +*min(x4) *max(x4)]); xlabel('t');ylabel('x4'); title('DTFT结果x4'); (b)结果: 2.用以下两个有限长序列来验证DTFT的线性、卷积和共轭特性;

按时间抽取基2-快速傅里叶逆变换算法_MATLAB代码

function x=MyIFFT_TB(y) %MyIFFT_TB:My Inverse Fast Fourier Transform Time Based %按时间抽取基2-傅里叶逆变换算法 %input: % y -- 傅里叶正变换结果,1*N的向量 %output: % x -- 逆变换结果,1*N的向量 %参考文献: % https://www.360docs.net/doc/ee12169638.html,/view/fea1e985b9d528ea81c779ee.html N=length(y); x=conj(y); %求共轭 x=MyFFT_TB(x);%求FFT x=conj(x);%求共轭 x=x./N;%除以N end %% 内嵌函数====================================================== function y=MyFFT_TB(x,n) %MYFFT_TB:My Fast Fourier Transform Time Based %按时间抽取基2-fft算法 %input: % x -- 输入的一维样本 % n -- 变换长度,缺省时n=length(x) 当n小于x数据长度时,x数据被截断到第n个数据% 当n大于时,x数据在尾部补0直到x 含n个数据 %output: % y -- 1*n的向量,快速傅里叶变换结果 %variable define: % N -- 一维数据x的长度 % xtem -- 临时储存x数据用 % m,M -- 对N进行分解N=2^m*M,M为不能被2整除的整数 % two_m -- 2^m % adr -- 变址,1*N的向量 % l -- 当前蝶形运算的级数 % W -- 长为N/2的向量,记录W(0,N),W(1,N),...W(N/2-1,N) % d -- 蝶形运算两点间距离 % t -- 第l级蝶形运算含有的奇偶数组的个数 % mul -- 标量,乘数 % ind1,ind2 -- 标量,下标 % tem -- 标量,用于临时储存 %% 输入参数个数检查 msg=nargchk(1,2,nargin); error(msg);

离散信号变换的matlab实现

实验四 离散信号的频域分析 一、 实验目的 1. 掌握序列的傅里叶变换、离散傅里叶级数、离散傅里叶变换、快速傅里叶变换的Matlab 实现; 2. 学习用FFT 对连续信号和离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT 。 二、 实验内容及步骤 1. 计算序列的DTFT 和DFT ,观察栅栏效应 设)()(4n R n x =,要求用MATLAB 实现: (1)计算)(n x 的傅里叶变换)(ωj e X ,并绘出其幅度谱; (2)分别计算)(n x 的4点DFT 和8点DFT ,绘出其幅度谱。并说明它们和)(ωj e X 的关系。 (提示:DFT 变换可用MA TLAB 提供的函数fft 实现,也可以自己用C 语言或matlab 编写) 2.计算序列的FFT ,观察频谱泄漏 已知周期为16的信号)1612cos()1610cos()(n n n x π π +=。 (1) 截取一个周期长度M=16点,计算其16点FFT ,并绘出其幅度谱; (2) 截取序列长度M=10点,计算其16点FFT ,绘出其幅度谱,并与(1)的结果进行比 较,观察频谱泄漏现象,说明产生频谱泄漏的原因。 三、 实验报告要求 1. 结合实验中所得给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT 作谱分析时有关参数的选择方法。 2. 总结实验所得主要结论。 1. 计算序列的DTFT 和DFT ,观察栅栏效应 设)()(4n R n x =,要求用MATLAB 实现: (1)计算)(n x 的傅里叶变换)(ωj e X ,并绘出其幅度谱; (2)分别计算)(n x 的4点DFT 和8点DFT ,绘出其幅度谱。并说明它们和)(ωj e X 的关系。 (1)代码: n=0:3; M=10;

matlab 图像的傅立叶变换

实验三图像的傅立叶变换 熟悉傅里叶变换的基本性质; 掌握FFT方法及应用; 通过实验了解二维频谱的分布特点; 掌握利用MATLAB实现数字图像的傅立叶变换及滤波锐化的处理; 了解理想、巴特沃兹、高斯等不同滤波器的结构及滤波效果。 实验步骤 1.启动MATLAB程序,读入一幅图像;对图像做FFT。使用’subplot’命令,同时显示原始图像其频谱图; IenaImg=imread('lena.jpg'); %读入原图像文件 fftI=fft2(double(IenaImg)); %二维离散傅立叶变换 sfftI=fftshift(fftI); %直流分量移到频谱中心 RR=real(sfftI); %取傅立叶变换的实部 fftImg = log(RR); subplot(1,2,1) imshow(IenaImg); %显示原图像 subplot(1,2,2) imshow(fftImg, [8,10]); %显示原图像的频谱

2.读入一幅图像,分别为图像添加椒盐、高斯噪声,做FFT变换。使用’subplot’命令,将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出来。 lenaImg=imread('lena.jpg'); %读入原图像文件 fftI=fft2(double(lenaImg)); %二维离散傅立叶变换 sfftI=fftshift(fftI); %直流分量移到频谱中心 RR=real(sfftI); %取傅立叶变换的实部 fftLenaImg = log(RR); 加入椒盐躁声 saltImg=imnoise(lenaImg,'salt & pepper',0.02); %加入椒盐躁声 fftI=fft2(double(saltImg)); %二维离散傅立叶变换 sfftI=fftshift(fftI); %直流分量移到频谱中心 RR=real(sfftI); %取傅立叶变换的实部 fftSaltImg = log(RR); subplot(2,2,1); imshow(lenaImg); subplot(2,2,2); imshow(fftLenaImg , [8,10]); subplot(2,2,3); imshow(saltImg); subplot(2,2,4); imshow(fftSaltImg , [8,10]);

MATLAB离散傅里叶变换及应用资料

MATLAB 离散傅里叶变换及应用 一、DFT 与IDFT 、DFS 、DTFT 的联系 1、 序列的傅里叶变换(DFT)和逆变换(IDFT) 在实际中常常使用有限长序列。如果有限长序列信号为x(n),则该序列的离散傅里叶变换对可以表示为 1N ,0,1,k , W x(n)DFT [x(n)]X(k)1 N 0n nk N -===∑-= (12-1) 1N ,0,1,n , W X(k)N 1IDFT[X(k)]x(n)1N 0 k nk N -===∑-=- (12-2) 已知x(n)=[0,1,2,3,4,5,6,7],求x(n)的DFT 和IDFT 。要求: (1)画出序列傅里叶变换对应的|X(k)|和arg [X(k)]图形。 (2)画出原信号与傅里叶逆变换IDFT [X(k)]图形进行比较。 程序源代码: xn=[0,1,2,3,4,5,6,7]; N=length(xn); n=0:(N-1);k=0:(N-1); Xk=xn*exp(-j*2*pi/N).^(n'*k); x=(Xk*exp(j*2*pi/N).^(n'*k))/N; subplot(2,2,1),stem(n,xn); title('x(n)');

subplot(2,2,2),stem(n,abs(x)); title('IDFT|X(k)|'); subplot(2,2,3),stem(k,abs(Xk)); title('|X(k)|'); subplot(2,2,4),stem(k,angle(Xk)); title('arg|X(k)|'); 运行图如下: x(n) IDFT|X (k)| 2 4 6 8 |X (k)| 2 4 6 8 arg|X (k)| 从得到的结果可见,与周期序列不同的是,有限长序列本身是仅有N 点的离散序列,相当于周期序列的主值部分。因此,其频谱也对应序列的主值部分,是含N 点的离散序列。 2、 序列DFT 与周期序列DFS 已知周期序列的主值x(n)=[0,1,2,3,4,5,6,7],

用Matlab实现快速傅立叶变换

用Matlab实现快速傅立叶变换 FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。 虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。 现在就根据实际经验来说说FFT结果的具体物理意义。一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此啰嗦了。 采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。 假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=根号a*a+b*b,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。 下面以一个实际的信号来做说明。假设我们有一个信号,它含有2V的直流分量,频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。用数学表达式就是如下:S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)。式中cos 参数为弧度,所以-30度和90度要分别换算成弧度。我们以256Hz的采样率对这个信号进行采样,总共采样256点。按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第n个点的频率就是n-1。我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。实际情况如何呢?我们来看看FFT的结果的模值如图所示。

用Matlab对信号进行傅里叶变换实例

目录 用Matlab对信号进行傅里叶变换 (2) Matlab的傅里叶变换实例 (5) Matlab方波傅立叶变换画出频谱图 (7)

用Matlab对信号进行傅里叶变换 1.离散序列的傅里叶变换DTFT(Discrete Time Fourier Transform) 代码: 1 N=8; %原离散信号有8点 2 n=[0:1:N-1] %原信号是1行8列的矩阵 3 xn=0.5.^n; %构建原始信号,为指数信号 4 5 w=[-800:1:800]*4*pi/800; %频域共-800----+800 的长度(本应是无穷,高频分量很少,故省去) 6 X=xn*exp(-j*(n'*w)); %求dtft变换,采用原始定义的方法,对复指数分量求和而得 7 subplot(311) 8 stem(n,xn); 9 title('原始信号(指数信号)'); 10 subplot(312); 11 plot(w/pi,abs(X)); 12 title('DTFT变换') 结果: 分析:可见,离散序列的dtft变换是周期的,这也符合Nyquist采样定理的描述,连续时间信号经周期采样之后,所得的离散信号的频谱是原连续信号频谱的周期延拓。 2.离散傅里叶变换DFT(Discrete Fourier Transform)

与1中DTFT不一样的是,DTFT的求和区间是整个频域,这对 结果图:

分析:DFT只是DTFT的现实版本,因为DTFT要求求和区间无穷,而DFT只在有限点内求和。 3.快速傅里叶变换FFT(Fast Fourier Transform) 虽然DFT相比DTFT缩减了很大的复杂度,但是任然有相当大的计算量,不利于信息的实时有效处理,1965年发现的DFT解决了这一问题。 实现代码: 1 N=64; %原离散信号有8点 2 n=[0:1:N-1] %原信号是1行8列的矩阵 3 xn=0.5.^n; %构建原始信号,为指数信号 4 Xk=fft(xn,N); 5 subplot(221); 6 stem(n,xn); 7 title('原信号'); 8 subplot(212); 9 stem(n,abs(Xk)); 10 title('FFT变换') 效果图: 分析:由图可见,fft变换的频率中心不在0点,这是fft算法造成的,把fft改为fftshift可以将频率中心移到0点。

傅里叶变换matlab代码

clc;clear all;close all; tic Fs=128;%采样频率,频谱图的最大频率 T=1/Fs;%采样时间,原始信号的时间间隔 L=256;%原始信号的长度,即原始离散信号的点数 t=(0:L-1)*T;%原始信号的时间取值范围 x=7*cos(2*pi*15*t-pi)+3*cos(2*pi*40*t-90*pi/180)+3*cos(2*pi*30*t-90*pi/180); z=7*cos(2*pi*15*t-pi)+3*cos(2*pi*40*t-90*pi/180); z1=6*cos(2*pi*30*t-90*pi/180); z1(1:L/2)=0; z=z+z1; y=x;%+randn(size(t)); figure; plot(t,y) title('含噪信号') xlabel('时间(s)') hold on plot(t,z,'r--') N=2^nextpow2(L);%N为使2^N>=L的最小幂 Y=fft(y,N)/N*2; Z=fft(z,N)/N*2;%快速傅里叶变换之后每个点的幅值是直流信号以外的原始信号幅值的N/2倍(是直流信号的N倍) f=Fs/N*(0:N-1);%频谱图的频率取值范围 A=abs(Y);%幅值 A1=abs(Z); B=A; %让很小的数置零. B1=A1; A(A<10^-10)=0; % A1(A1<10^-10)=0; P=angle(Y).*A./B; P1=angle(Z).*A1./B1; P=unwrap(P,pi);%初相位值,以除去了振幅为零时的相位值 P1=unwrap(P1,pi); figure subplot(211) plot(f(1:N/2),A(1:N/2))%函数ffs返回值的数据结构具有对称性,因此只取前一半 hold on plot(f(1:N/2),A1(1:N/2),'r--') title('幅值频谱') xlabel('频率(HZ)') 1 / 2

matlab离散傅立叶变换.

离散傅立叶变换 ?、实验目的 ?掌握离散傅里叶变换的有关性质。 利用matlab验证有关性质。 利用傅立叶变换进行相关运算。

、实验原理及方法 在工程技术的许多分支中,要掌握的基 本内容之一就是正确理解时威和频域 的关系。对于数字系统来说,就是要精通 离散傅立叶变换, 因此离散傅立叶变换在 数字信号处理中占有十分重要的地位。在 实际应用中,有限长序列有相当重要的地 位,由于计算机容量的限制,只能对过程 进行逐段分析。由于有限长序列,引入 DFT (离散付里叶变换)。 傅里叶变换 建立以时间t为自变量的“信号”与以频率所以“时间”或“频率”取连续还是离散值,就形成 各种不同形式的傅里叶变换对。

四种不同傅里叶变换对 傅里叶级数(FS):连续时间,离散频率的傅里叶变换。 周期连续时间信号傅里叶级数(FS)得到非周期离散频谱密度函数。 傅里叶变换(FT):连续时间,连续频率的傅里叶变换。 非周期连续时间信号通过连续付里叶变换(FT)得到非周期连续频谱密度函数? 序列的傅里叶变换(DTFT):离散时间,连续频率的傅里叶变换。非周期离散的时间信号(单位园上的Z变换 (DTFT))得到周期性连续的频率函数。 离散傅里叶变换(DFT):离散时间,离散频率的傅里叶变换。 上面讨论的前三种傅里叶变换对,都不适用在 计算机上运算,因为至少在一个域(时域或频域)中,函数是连续的。因为从数字计算角度 我们感兴趣的是时域及频域都是离散的情况, 这就是第四种离散傅里叶变换。

离散傅里叶级数(DFS) 设x(n)为周期为N 的周期序列,则其离散傅里叶级数 (DFS)变换对为: 正变换 X{k) = DFS[JC (H )]=工 上 N zr-0 逆变换 1 N7 严腻 兀⑺)= /QFS[X 伙)]=—工^伙上N N ?其中 _芦 必之N N _\ N-1 =Yx 伙)wy* 层0 利用MATLAB 实现傅立叶级数计算 ?编写函数实现DFS 计算 ? function xk=dfs(xn, N) n=[O:l:N-l]: k=n; WN=exp(-j*2*pi/N); nk 二 n'*k; WNnk^WN. nk : xk 二xn* WNnk :

相关文档
最新文档