文档库 最新最全的文档下载
当前位置:文档库 › 数字信号处理实验报告-FFT算法的MATLAB实现

数字信号处理实验报告-FFT算法的MATLAB实现

数字信号处理实验报告-FFT算法的MATLAB实现
数字信号处理实验报告-FFT算法的MATLAB实现

数字信号处理 实验报告

实验二:FFT 算法的MATLAB 实现

一、实验目的

通过本实验的学习,掌握离散傅立叶变换的理论,特别是FFT 的基本算法以及其在在数字信号处理中的应用。

二、实验内容

题一:若x(n)=cos(n*pi/6)是一个N =12的有限序列,利用MATLAB 计算它的DFT 并画出图形。

题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz 和120Hz 正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz ,对这污染信号进行傅立叶变换,以检查所包含的频率分量

题三:调用原始语音信号mtlb ,对其进行FFT 变换后去掉幅值小于1的FFT 变换值,最后重构语音信号。

(要求有四幅语音信号的频谱图在同一图形窗口以便比较:分别是1、原始语音信号;2、FFT 变换;3去掉幅值小于1的FFT 变换值;4、重构语音信号)

三、实验原理

1、有限长序列x(n)的DFT 的概念和公式:

???????-≤≤=-≤≤=∑∑-=--=10101

0)(1)(10)()(N k kn N N n kn N N n W k x N n x N k W n x k x

2、基2的FFT 算法

四、实验条件

(1)微机

(2)MATLAB 编程工具

五、用matlab 程序实现:

实验一:

clc;

N=12;

n=0:N-1;

k=0:N-1;

xn=cos(n*pi/6);

W=exp(-j*2*pi/N);

kn=n'*k

Xk=xn*(W.^kn)

stem(n,Xk);

xlabel('k');

ylabel('Xk');

实验二

clc;

fs=1000;

N=1024;

n=0:N-1;

t=n/fs;

x=sin(2*pi*50*t)+sin(2*pi*120*t)+rand(1,N);

y=fft(x,N);

mag=abs(y);

f=n*fs/N;

subplot(1,2,1),plot(f,mag);

xlabel('频率/Hz');

ylabel('振幅');title('N=1024');

subplot(1,2,2),plot(f(1:N/2),mag(1:N/2)); xlabel('频率/Hz');

ylabel('振幅');title('N=1024');

实验三:

clc;

load mtlb

N=1500;

subplot(2,2,1)

plot([1:N],mtlb(1:N));

title('原始语音信号');

y=fft(mtlb(1:N));

subplot(2,2,2)

plot([1:N],y);

title('原始语音信号FFT变换');

y(y<1)=0;

subplot(2,2,3)

plot([1:N],y);

title('去掉幅值小于1的FFT变换值');

subplot(2,2,4)

plot([1:N],ifft(y));

title('重构语音信号');

六、实验心得:

(1)通过这次实验,掌握离散傅立叶变换的理论,特别是FFT的基本算法以及其在在数字信号处理中的应用。并且知道可以用离散傅里叶变换进行信号的分离和重构

(2)通过这次实验,让我真正的了解了通过离散傅里叶变换可以消除噪声对信号的干扰,可以重构语音信号。

Matlab中的FFT使用说明

FFT是Fast Fourier Transform(快速傅里叶变换)的简称,FFT算法在MATLAB 中实现的函数是Y=fft(x,n)。刚接触频谱分析用到FFT时,几乎都会对MATLAB 的fft函数产生一些疑惑,下面以看一个例子(根据MATLA帮助修改)。 Fs = 2000; % 设置采样频率 T = 1/Fs; % 得到采用时间 L = 1000; % 设置信号点数,长度1 秒 t = (0:L-1)*T; % 计算离散时间, % 两个正弦波叠加 f1 = 80; A1 = 0.5; % 第一个正弦波100Hz,幅度0.5 f2 = 150; A2 = 1.0 ; % 第2个正弦波150Hz,幅度 1.0 A3 = 0.5; % 白噪声幅度; x = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t); % 产生离散时间信号; y = x + A3*randn(size(t)); % 叠加噪声; % 时域波形图 subplot(2,1,1) plot(Fs*t(1:50),x(1:50)) title('Sinusoids Signal') xlabel('time (milliseconds)') subplot(2,1,2) plot(Fs*t(1:50),y(1:50)) title('Signal Corrupted with Zero-Mean Random Noise') xlabel('time (milliseconds)') NFFT = 2A nextpow2(L); % 设置FFT点数,一般为2 的N次方,如1024,512 等Y = fft(y,NFFT)/L; % 计算频域信号, f = Fs/2*linspace(0,1,NFFT/2+1); %频率离散化,fft后对应的频率是-Fs/2到Fs/2,由NFFT个离散频点表示 % 这里只画出正频率; % Plot single-sided amplitude spectrum. figure; plot(f,2*abs(Y(1:NFFT/2+1))); % fft 后含幅度和相位,一般观察幅度谱,并把负频率加上去, title('Single-Sided Amplitude Spectrum of y(t)') xlabel('Frequency (Hz)')

《MATLAB与数值分析》第一次上机实验报告

电子科技大学电子工程学院标准实验报告(实验)课程名称MATLAB与数值分析 学生姓名:李培睿 学号:2013020904026 指导教师:程建

一、实验名称 《MATLAB与数值分析》第一次上机实验 二、实验目的 1. 熟练掌握矩阵的生成、加、减、乘、除、转置、行列式、逆、范数等运算 操作。(用.m文件和Matlab函数编写一个对给定矩阵进行运算操作的程序) 2. 熟练掌握算术符号操作和基本运算操作,包括矩阵合并、向量合并、符号 转换、展开符号表达式、符号因式分解、符号表达式的化简、代数方程的符号解析解、特征多项式、函数的反函数、函数计算器、微积分、常微分方程的符号解、符号函数的画图等。(用.m文件编写进行符号因式分解和函数求反的程序) 3. 掌握Matlab函数的编写规范。 4、掌握Matlab常用的绘图处理操作,包括:基本平面图、图形注释命令、 三维曲线和面的填充、三维等高线等。(用.m文件编写在一个图形窗口上绘制正弦和余弦函数的图形,并给出充分的图形注释) 5. 熟练操作MATLAB软件平台,能利用M文件完成MATLAB的程序设计。 三、实验内容 1. 编程实现以下数列的图像,用户能输入不同的初始值以及系数。并以x, y为坐标显示图像 x(n+1) = a*x(n)-b*(y(n)-x(n)^2); y(n+1) = b*x(n)+a*(y(n)-x(n)^2) 2. 编程实现奥运5环图,允许用户输入环的直径。 3. 实现对输入任意长度向量元素的冒泡排序的升序排列。不允许使用sort 函数。 四、实验数据及结果分析 题目一: ①在Editor窗口编写函数代码如下:

MATLAB实验报告50059

实验一MATLAB操作基础 实验目的和要求: 1、熟悉MATLAB的操作环境及基本操作方法。 2、掌握MATLAB的搜索路径及设置方法。 3、熟悉MATLAB帮助信息的查阅方法 实验内容: 1、建立自己的工作目录,再设置自己的工作目录设置到MA TLAB搜索路径下,再试 验用help命令能否查询到自己的工作目录。 2、在MA TLAB的操作环境下验证课本;例1-1至例1-4,总结MATLAB的特点。 例1-1

例1-2 例1-3 例1-4

3、利用帮助功能查询inv、plot、max、round等函数的功能。 4、完成下列操作: (1)在matlab命令窗口输入以下命令: x=0:pi/10:2*pi; y=sin(x); (2)在工作空间窗口选择变量y,再在工作空间窗口选择回绘图菜单命令或在工具栏中单击绘图命令按钮,绘制变量y的图形,并分析图形的含义。

5、访问mathworks公司的主页,查询有关MATLAB的产品信息。 主要教学环节的组织: 教师讲授实验目的、开发环境界面、演示实验过程,然后同学上机练习。 思考题: 1、如何启动与退出MA TLAB集成环境? 启动: (1)在windows桌面,单击任务栏上的开始按钮,选择‘所有程序’菜单项,然后选择MA TLAB程序组中的MA TLABR2008b程序选项,即可启动 MATLAB系统。 (2)在MA TLAB的安装路径中找到MA TLAB系统启动程序matlab.exe,然后运行它。 (3)在桌面上建立快捷方式后。双击快捷方式图标,启动MA TLAB。 退出: (1)在MA TLAB主窗口file菜单中选择exitMATLAB命令。 (2)在MA TLAB命令窗口中输入exit或quit命令。 (3)单击MATLAB主窗口的关闭按钮。 2、简述MATLAB的主要功能。 MATLAB是一种应用于科学计算领域的数学软件,它主要包括数值计算和符 号计算功能、绘图功能、编程语言功能以及应用工具箱的扩展功能。 3、如果一个MATLAB命令包含的字符很多,需要分成多行输入,该如何处理?

按时间抽取的基2FFT算法分析与MATLAB实现

按时间抽取的基2FFT 算法分析及MATLAB 实现 一、DIT-FFT 算法的基本原理 基2FFT 算法的基本思想是把原始的N 点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的DFT ,再进行适当的组合,得到原N 点序列的DFT ,最终达到减少运算次数,提高运算速度的目的。 按时间抽取的基2FFT 算法,先是将N 点输入序列x(n)在时域按奇偶次序分解成2个N/2点序列x1(n)和x2(n),再分别进行DFT 运算,求出与之对应的X1(k)和X2(k),然后利用图1所示的运算流程进行蝶形运算,得到原N 点序列的DFT 。只要N 是2的整数次幂,这种分解就可一直进行下去,直到其DFT 就是本身的1点时域序列。 图1 DIT-FFT 蝶形运算流图 二、DIT-FFT 算法的运算规律及编程思想 1.原位计算 对N=M 2点的FFT 共进行M 级运算,每级由N/2个蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),经过M 级运算后,原来存放输入序列数据的N 个存储单元中可依次存放X(k)的N 个值,这种原位(址)计算的方法可节省大量内存。 2.旋转因子的变化规律 N 点DIT ―FFT 运算流图中,每个蝶形都要乘以旋转因子p W N ,p 称为旋转因子的指数。例如N =8 =3 2 时各级的旋转因子: 第一级:L=1, 有1个旋转因子:p W N =J /4W N =J 2L W J=0 第二级:L=2,有2个旋转因子:p W N =J /2W N =J 2L W J=0,1 第三级:L=3,有4个旋转因子:p W N =J W N =J 2L W J=0,1,2,3 对于N =M 2的一般情况,第L 级共有1 -L 2个不同的旋转因子: p W N =J 2L W J=0,1,2,… ,1 -L 2-1 L 2=M 2×M -L 2 = N ·M -L 2 故: 按照上面两式可以确定第L 级运算的旋转因子

Matlab实验报告3

实验三函数的可视化与Matlab作图 一、按要求绘制如下曲线(面): 1. 在[0,4pi]上画sin(x),cos(x)在同一图像中,其中cos(x)图像用红色小圆圈,并在函数图上标注“y=sin(x)”,”y=cos(x)”,X轴,Y轴,标题为“正弦余弦函数图像。”答:>> clear >> clf, x=linspace(0,4*pi,200);y1=sin(x);y2=cos(x); plot(x,y1,'k-',x,y2,'ro') >> title('正弦余弦函数图像。') >> legend('y=sin(x)','y=cos(x)') >> ylabel('\it{Y轴}'); >> xlabel('\it{X轴}'); 2.任意绘制彗星曲线图。 答:>> clf; >> x=[1:10]; y=[5 6 3 4 8 1 10 3 5 6]; >> z=0:0.1:100; x=sin(z);y=cos(z).*10; >> %三维彗星图 comet3(x,y,z) >> %二维彗星图

t = -pi:pi/200:pi; comet(t,tan(sin(t))-sin(tan(t)))

3.在多窗口中绘制y=sin(t)*sin(t);y1=sin(3*t+2.5);y2=sin(5*t+5)并加以标注。答:>> clf; t=0:0.1:4*pi; subplot(3,1,1),plot(sin(t).*sin(t)),legend('y=sin(t)*sin(t)') subplot(3,1,2),plot(sin(3*t+2.5)),legend('y1=sin(3*t+2.5)') subplot(3,1,3),plot(sin(5*t+5)),legend('y2=sin(5*t+5)') 4.自拟题目绘制三维线图。 绘制以下方程y1=sin(t),y2=cos(t),x=t在t=[0,2π] 对应的三维曲线。 >> clf; >> t=0:pi/10:2*pi; >> y1=sin(t);y2=cos(t); >> plot3(y1,y2,t);grid on; >> xlabel('Dependent Variable Y1'); >> ylabel('Dependent Variable Y2'); >> zlabel('Dependent Variable X'); >> title('Sin and Cos Curve');

MATLAB中FFT结果的物理意义

FFT结果的物理意义 最近正在做一个音频处理方面的项目,以前没有学过fft,只是知道有这么个东西,最近这一用才发现原来欠缺这么多,最基本的,连fft的输入和输出各自代表什么都不知道了,终于在网上查到这样的一点资料,得好好保存了,也欢迎大家分享。 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(ps:横坐标第n个点对应的频率值Fn的计算公式。整个横坐标代表了采样频率Fs,被分为N点。故其频率分辨率为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实验报告3详解

实验四、LTI系统的响应 课程名称: MATLAB应用技术专业班级:通信1422 学生学号: 1430119231 学生姓名:周妍智 所属院部:电子信息工程系指导教师:徐树梅 2015 —— 2016 学年第二学期

实验项目名称: LTI 系统的响应 实验学时: 16 学生姓名: 周妍智 实验地点: 微机11 实验日期: 2016.4.17 实验成绩: 批改教师: 徐树梅 批改时间: 一、 实验目的 1. 熟悉连续时间系统的单位冲激响应、阶跃响应的意义及求解方法 2. 熟悉连续(离散)时间系统在任意信号激励下响应的求解方法 3. 熟悉应用MATLAB 实现求解系统响应的方法 二、 实验原理 1.连续时间系统 对于连续的LTI 系统,当系统输入为f (t ),输出为y (t ),则输入与输出之间满足如下的线性常系数微分方程: () ()0 ()()n m i j i j i j a y t b f t ===∑∑,当系统输入为单位冲激信号δ(t )时产生 的零状态响应称为系统的单位冲激响应,用h(t)表示。若输入为单位阶跃信号ε(t )时,系统产生的零状态响应则称为系统的单位阶跃响应,记为g(t),如下图所示。 系统的单位冲激响应h (t )包含了系统的固有特性,它是由系统本身的结构及参数所决定的,与系统的输入无关。我们只要知道了系统的冲激响应,即可求得系统在不同激励下产生的响应。因此,求解系统的冲激响应h(t )对我们进行连续系统的分析具有非常重要的意义。 在MATLAB 中有专门用于求解连续系统冲激响应和阶跃响应, 并绘制其时域波形的函数impulse( ) 和step( )。如果系统输入为f (t ),冲激响应为h(t),系统的零状态响应为y (t ),则有:()()()y t h t f t =*。 若已知系统的输入信号及初始状态,我们便可以用微分方程的经典时域求解方法,求出系统的响应。但是对于高阶系统,手工计算这一问题的过程非常困难和繁琐。 在MATLAB 中,应用lsim( )函数很容易就能对上述微分方程所描述的系统的响应进行仿真,求出系统在任意激励信号作用下的响应。lsim( )函数不仅能够求出连续系统在指定的任意时间范围内系统响应的数值解,而且还能同时绘制出系统响应的时域波形图。 以上各函数的调用格式如下: ⑴ impulse( ) 函数 函数impulse( )将绘制出由向量a 和b 所表示的连续系统在指定时间范围内的单位冲激响应h (t )的时域波形图,并能求出指定时间范围内冲激响应的数值解。

matlab实验报告

实验一小球做自由落体运动内容:一小球竖直方向做自由落体,并无损做往返运动。程序: theta=0:0.01:2*pi x=cos(theta) y=sin(theta) l=1 v=1 while l<10 for t=1:10 y=y+(-1)^l*v*t plot(x,y,[-1,1],[-56,2],'.') axis equal pause(0.1) end l=l+1 end 结果:

-50 -40 -30 -20 -10 收获:通过运用小球自由落体规律,及(-1)^n 来实现无损往 返运动! 实验二 旋转五角星 内容:一个五角星在圆内匀速旋转 程序:x=[2 2 2 2 2 2] y=[0 4/5*pi 8/5*pi 2/5*pi 6/5*pi 0] y1=2*sin(y) x1=2*cos(y) theta=0:4/5*pi:4*pi

x2=2*cos(theta) y2=2*sin(theta) plot(x,y,x1,y1,x2,y2) axis equal theta1=theta+pi/10 x2=2*cos(theta1) y2=2*sin(theta1) plot(x2,y2) axis equal theta=0:4/5*pi:4*pi for rot=pi/10:pi/10:2*pi x=2*cos(theta+rot) y=2*sin(theta+rot) plot(x,y) pause(0.1) end 结果:

-2 -1.5-1-0.500.51 1.52 -2-1.5-1-0.500.511.5 2 收获:通过theta1=theta+pi/10,我们可以实现五角星在圆内匀速 旋转! 实验三 转动的自行车 内容:一辆自行车在圆内匀速转动 程序:x=-4:0.08:4; y=sqrt(16-x.^2); theta1=-pi/2:0.01*pi:3*pi/2; x3=0.5*cos(theta1); y3=0.5*sin(theta1); theta=-pi/2+0.02*pi for k=1:100

参考答案Matlab实验报告

实验一 Matlab基础知识 一、实验目的: 1.熟悉启动和退出Matlab的方法。 2.熟悉Matlab命令窗口的组成。 3.掌握建立矩阵的方法。 4.掌握Matlab各种表达式的书写规则以及常用函数的使 用。 二、实验内容: 1.求[100,999]之间能被21整除的数的个数。(rem) 2.建立一个字符串向量,删除其中的大写字母。(find) 3.输入矩阵,并找出其中大于或等于5的元素。(find) 4.不采用循环的形式求出和式 63 1 2i i= ∑ 的数值解。(sum) 三、实验步骤: ●求[100,199]之间能被21整除的数的个数。(rem) 1.开始→程序→Matlab 2.输入命令: ?m=100:999; ?p=rem(m,21); ?q=sum(p==0) ans=43 ●建立一个字符串向量,删除其中的大写字母。(find) 1.输入命令:

?k=input('’,’s’); Eie48458DHUEI4778 ?f=find(k>=’A’&k<=’Z’); f=9 10 11 12 13 ?k(f)=[ ] K=eie484584778 ●输入矩阵,并找出其中大于或等于5的元素。(find) 1.输入命令: ?h=[4 8 10;3 6 9; 5 7 3]; ?[i,j]=find(h>=5) i=3 j=1 1 2 2 2 3 2 1 3 2 3 ●不采用循环的形式求出和式的数值解。(sum) 1.输入命令: ?w=1:63; ?q=sum(2.^w) q=1.8447e+019

实验二 Matlab 基本程序 一、 实验目的: 1. 熟悉Matlab 的环境与工作空间。 2. 熟悉M 文件与M 函数的编写与应用。 3. 熟悉Matlab 的控制语句。 4. 掌握if,switch,for 等语句的使用。 二、 实验内容: 1. 根据y=1+1/3+1/5+……+1/(2n-1),编程求:y<5时最大n 值以及对应的y 值。 2. 编程完成,对输入的函数的百分制成绩进行等绩转换,90~100为优,80~89为良,70~79为中,60~69为及格。 3. 编写M 函数文件表示函数 ,并分别求x=12和56时的函数值。 4. 编程求分段函数 2226;03 56;0532 1;x x x x y x x x x x x x +-<≠=-+≤<≠≠-+且且及其它,并求输入x=[-5.0,-3.0,1.0,2.0,2.5,3.0,3.5]时的输出y 。 三、 实验步骤: 根据y=1+1/3+1/5+……+1/(2n-1),编程求:y<5时最大n 值以及对应的y 值。 1. 打开Matlab ,新建M 文件 2. 输入命令: 51022-+x

利用MATLAB实现信号DFT的计算

07级电信(2)班 刘坤洋 24 实验一 利用MATLAB 实现信号DFT 的计算 一、实验目的: 1、熟悉利用MATLAB 计算信号DFT 的方法 2、掌握利用MATLAB 实现由DFT 计算线性卷积的方法 二、实验设备:电脑、matlab 软件 三、实验内容: 1、练习用matlab 中提供的内部函数用于计算DFT (1) fft (x ),fft (x ,N ),ifft (x ),ifft (x ,N )的含义及用法 (2) 在进行DFT 时选取合适的时域样本点数N 请举例,并编程实现 题目: 源程序: >> N=30; %数据的长度 >>L=512; %DFT 的点数 >>f1=100; f2=120; >>fs=600; %抽样频率 >>T=1/fs; %抽样间隔 >>ws=2*pi*fs; >>t=(0:N-1)*T; >>f=cos(4*pi*f1*t)+cos(4*pi*f2*t); >>F=fftshift(fft(f,L)); >>w=(-ws/2+(0:L-1)*ws/L)/(2*pi); >>hd=plot(w,abs(F)); >>ylabel('幅度谱') >> xlabel('频率/Hz') 的频谱 分析利用)π4cos()π4cos()(DFT 21t f t f t x +=Hz 600,Hz 120,Hz 10021===s f f f

>> title('my picture') 结果图: (3) 在对信号进行DFT 时选择hamming 窗增加频率分辨率 请举例,并编程实现 题目: 源程序:>> N=50; %数据的长度 >>L=512; %DFT 的点数 >>f1=100;f2=150; >>fs=600; %抽样频率 >>T=1/fs; %抽样间隔 >>ws=2*pi*fs; >>t=(0:N-1)*T; >>f=cos(4*pi*f1*t)+0.15*cos(4*pi*f2*t); 的频谱 分析利用)π4cos(15.0)π4cos()(DFT 21t f t f t x +=Hz 600,Hz 150,Hz 10021===s f f f

matlab实验报告

Matlab实验报告 实验二图像处理 一、实验目的 (1)通过应用MA TLAB语言编程实现对图像的处理,进一步熟悉MATLAB软件的编程及应用; (2)通过实验进一步掌握图像处理的基本技术和方法。 二、实验内容及代码 ㈠.应用MA TLAB语言编写显示一幅灰度图像、二值图像、索引图像及彩色图像的程序,并进行相互之间的转换 首先,在matlab页面中的current directory下打开存放图像的文件夹。 1.显示各种图像 ⑴显示彩色图像: ①代码:>> mousetif=imread('tif.TIF'); >> image(mousetif) 显示截图: ②代码:>> mousetif=imread('tif.TIF'); >> imshow(mousetif) 显示截图:

③代码:mousetif=imread('tif.TIF'); subimage(mousetif) 显示截图: 显示截图:

⑵显示二值图像 ①代码:>> I=imread('单色bmp.bmp'); >> imagesc(I,[0 2]) 显示截图: ②代码:>> I=imread('单色bmp.bmp');

>> imshow(I,2) 显示截图: ③代码:>> I=imread('单色bmp.bmp'); >> subimage(I) 显示截图:

⑶显示灰度图像 ①代码:>> I1=imread('256bmp.bmp'); >> imagesc(I1,[0,256]) 显示截图: 代码:>> I1=imread('256bmp.bmp'); >> colormap(gray); >> subplot(1,2,1); >> imagesc(I1,[0,256]); >> title('灰度级为[0 256]的mouse.bmp图'); >> subplot(1,2,2); >> imagesc(I1,[0,64]); >> colormap(gray); >> title('灰度级为[0 64]的mouse.bmp图'); 显示截图:

Matlab程序设计实验报告

实验七Matlab 程序设计 实验目的: 1、掌握建立和执行M 文件的方法; 2、掌握实现选择结构的方法; 3、掌握实现循环结构的方法。 实验内容: 1. 编写用 5 次多项式拟合函数y=sin(x), x [0, 2 ]的脚本M 文件,要求绘图观察拟合的效果。 function shiyan1 x=0:0.5:2*pi y=sin(x) p=polyfit(x,y,5) x1=0:0.2:2*pi y1=polyval(p,x1) plot(x,y, 'b' ,x1,y1, '*r' x =

Columns 1 through 9 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 Columns 10 through 13 4.5000 5.0000 5.5000 6.0000 y = Columns 1 through 9 0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411 -0.3508 -0.7568 Columns 10 through 13 -0.9775 -0.9589 -0.7055 -0.2794 p = -0.0056 0.0881 -0.3967 0.2671 0.8902 0.0029 x1 = Columns 1 through 10 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 1.4000 1.6000 1.8000 Columns 11 through 20

2. 2.2000 2.4000 2.6000 2.8000 3.0000 3.2000 3.4000 3.6000 1.8001 Columns 21 through 30 4.0 4.2000 4.4000 4.6000 4.8000 5.0000 5.2000 5.4000 5.6000 5.8000 Columns 31 through 32 6.0 6.2000 y1 = Columns 1 through 10 0.29 0.1886 0.3786 0.5585 0.7172 0.8461 0.9391 0.9926 1.0048 0.9761 Columns 11 through 20 0.9083 0.8048 0.6701 0.5098 0.3301 0.1381 -0.0590 -0.2538 -0.4389 -0.6073 Columns 21 through 30 -0.7524 -0.8685 -0.9505 -0.9949 -0.9991 -0.9626 -0.8863 -0.7732 -0.6288 -0.4606 Columns 31 through 32

广州大学学生实验报告1 matlab 程序设计

广州大学学生实验报告 开课学院及实验室:机械与电气工程学院计算机楼 301室2014 年10 月30 日

2、MATLAB指令窗的基本操作 MATLAB指令窗给用户提供了最直接的交互界面,可用于输入和执行指令、显示指令运行结果、调试MATLAB程序等常用的MATLAB仿真计算功能。本实验掌握以下在指令窗执行的基本操作,达到熟悉使用指令窗的目的: (1)最简单的计算器使用方法:在MATLAB指令窗中,可按计算器的方式进行一般的数学计算,MATLAB的运算符的含义大致与常见的运算规则一致; (2)在指令窗中输入和生成矩阵:与一般的计算器不同,在MATLAB中可直接输入和生成矩阵。实际上,矩阵是MATLAB工作的基本元素。 (3)数值表述方法:在MATLAB中的大部分数值的表述方式与平常是相同的,需要注意的是在表示比较大的数时,MATLAB默认采用科学计数法显示; (4)变量命名规则:对于MATLAB变量命名规则,需要注意以下几点: a、变量名、函数名对字母大小写敏感 b、变量名的第一个字母必须是英文字母,后续可以是字母、数字、下划线 c、变量的有效时限:在变量定义赋值之后,会作为内存变量保存并显示在Workspace Browser中。因此,凡是显示在Workspace Browser中的变量 都是“有效”的,其后可以被调用,否则不能被调用。 d、对于像 等常用的数学常量,MATLAB定义了预定义变量与其对应,在使用时需多加留意。 e、复数和复数矩阵的表示方法。 (5)其他操作的操作要旨和操作技巧的运用。 3、计算结果的图形表示 计算结果可视化是MATLAB的主要组成部分,借助图形表现数据是十分常用的“数据表达手段”,尤其当数据量相当庞大时,因为图形可以表现数据内在联系和宏观特征。关于MATLAB绘图的基本方法在后续章节中详细讲述,本实验主要通过示例了解MATLAB绘图的基本功能。 4、Current Directory、路径设置器和文件管理 理解当前目录Current Directory和搜索路径的作用是正确使用MATLAB的关键环节。当前目录指的是当前MA TLAB工作的目录,MATLAB运行指令需要打开或者保存的文件,都首先在目录中查找或保存。搜索路径则是MATLAB工作时,需查找相应的文件、函数或变量所在的相关文件夹所在的路径。 在理解当前目录Current Directory和搜索路径的作用的基础上,也要掌握当前目录Current Directory和搜索路径的设置方法,这是正确使用MA TLAB 的必要步骤。 为了理解MATLAB当前目录Current Directory和搜索路径的作用,可以大致了解一下当用户从指令窗送入一个名为cow的指令后,MATLAB的“运作次序”: (1)MATLAB在内存中检查,看cow是不是变量;如果不是,进行下一步; (2)检查cow是不是内建函数;如果不是进行下一步; (3)在当前目录下,检查是否有名为cow的M文件存在;如果不是,进行下一步; (4)在MA TLAB搜索路径的其他目录下,检查是否有名为cow的M文件存在。

实验二 FFT算法的MATLAB实现

班级:学号:姓名 实验二FFT算法的MATLAB实现 (一)实验目的: (1)掌握用matlab进行FFT在数字信号处理中的高效率应用。 (2)学习用FFT对连续信号和时域离散信号进行谱分析。 (二)实验内容及运行结果: 题1:若x(n)=cos(nπ/6)是一个N=12的有限序列,利用MATLAB计算它的DFT 并进行IDFT变换同时将原图与IDFT变换后的图形进行对比。当求解IFFT变换中,采样点数少于12时,会产生什么问题。 程序代码: N=12; n=0:11; Xn=cos(n*pi/6); k=0:11; nk=n'*k; WN=exp(-j*2*pi/N) WNnk=WN.^nk XK=Xn*WNnk; figure(1) stem(Xn) figure(2) stem(abs(XK)) 运行结果:

IFFT变换中,当采样点数少于12时图像如下图显示:

分析:由图像可以看出,当采样点数小于12时,x(n)的频谱不变,周期为6,而XK 的频谱图发生改变。 题2:对以下序列进行谱分析 132()()103()8470x n R n n n x n n n =+≤≤?? =-≤≤??? 其他n 选择FFT 的变换区间N 为8和16点两种情况进行频谱分析,分别打印其幅频特 性曲线并进行对比、分析和讨论。 ㈠ 程序代码: x=ones(1,3);nx=0:2; x1k8=fft(x,8); F=(0:length(x1k8)-1)'*2/length(x1k8); %进行对应的频率转换 stem(f,abs(x1k8));%8点FFT title('8点FFTx_1(n)'); xlabel('w/pi'); ylabel('幅度'); N=8时:

金融MATLAB实验报告三答案详解

安徽财经大学金融证券实验室实验报告 实验课程名称《金融》TLABMA 金融学院部课系开

级班 学号 姓名 师导指教日年月 1.

2 一、期权定价分析 1.black-scholes方程求解

例1:假设欧式股票期权,六个月后到期,执行价格90元,现价为102元,无股利支付, 股价年化波动率为55%,无风险利率为8%,计算期权价格。 解:clear Price=102; >>Strike=90; >>Rate=0.08; >>Time=6/12; >>V olatility=0.55; [CallDelta,PutDelta]=blsprice(Price,Strike,Rate,Time,V olatility) 计算结果: CallDelta= 23.5648 PutDelta= 8.0358 2.期权价格与波动率关系分析 Price=102; >>Strike=90; >>Rate=0.08; >>Time=6/12; V olatility=0.08:0.01:0.5; >>N=length(V olatility) Call=zeros(1,N); Put=zeros(1,N); for i=1:N [Call(i),Put(i)]=blsprice(Price,Strike,Rate,Time,V olatility(i)); N= 43 end plot(Call,'b--'); hold on plot(Put,'b'); xlabel('V olatility') ylabel('price') legend('Call','Put')

用MATLAB进行FFT频谱分析

用MATLAB 进行FFT 频谱分析 假设一信号: ()()292.7/2cos 1.0996.2/2sin 1.06.0+++=t t R ππ 画出其频谱图。 分析: 首先,连续周期信号截断对频谱的影响。 DFT 变换频谱泄漏的根本原因是信号的截断。即时域加窗,对应为频域卷积,因此,窗函数的主瓣宽度等就会影响到频谱。 实验表明,连续周期信号截断时持续时间与信号周期呈整数倍关系时,利用DFT 变换可以得到精确的模拟信号频谱。举一个简单的例子: ()ππ2.0100cos +=t Y 其周期为0.02。截断时不同的持续时间影响如图一.1:(对应程序shiyan1ex1.m ) 图 错误!文档中没有指定样式的文字。.1 140.0160.0180.02 截断时,时间间期为周期整数倍,频谱图 0.0250.03 20 40 60 80 100 截断时,时间间期不为周期整数倍,频谱图

其次,采样频率的确定。 根据Shannon 采样定理,采样带限信号采样频率为截止频率的两倍以上,给定信号的采样频率应>1/7.92,取16。 再次,DFT 算法包括时域采样和频域采样两步,频域采样长度M 和时域采样长度N 的关系要符合M ≧N 时,从频谱X(k)才可完全重建原信号。 实验中信号R 经采样后的离散信号不是周期信号,但是它又是一个无限长的信号,因此处理时时域窗函数尽量取得宽一些已接近实际信号。 实验结果如图一.2:其中,0点位置的冲激项为直流分量0.6造成(对应程序为shiyan1.m ) 图 错误!文档中没有指定样式的文字。.2 ?ARMA (Auto Recursive Moving Average )模型: 将平稳随机信号x(n)看作是零均值,方差为σu 2的白噪声u(n)经过线性非移变系统H(z)后的输出,模型的传递函数为 020406080100120140160180200 0.4 0.50.60.7 0.800.050.10.150.20.250.30.350.40.450.5 50100 150

matlab实验报告

MATLAB 数学实验报告 指导老师: 班级: 小组成员: 时间:201_/_/_

Matlab第二次实验报告 小组成员: 1题目:实验四,MATLAB选择结构与应用实验 目的:掌握if选择结构与程序流程控制,重点掌握break,return,pause语句的应用。 问题:问题1:验证“哥德巴赫猜想”,即:任何一个正偶数(n>=6)均可表示为两个质数的和。要求编制一个函数程序,输入一个正偶数,返回两个质数的和。 问题分析:由用户输入一个大于6的偶数,由input语句实现。由if判断语句判断是否输入的数据符合条件。再引用质数判断函数来找出两个质数,再向屏幕输出两个质数即可。 编程:function [z1,z2]=gede(n); n=input('please input n')

if n<6 disp('data error'); return end if mod(n,2)==0 for i=2:n/2 k=0; for j=2:sqrt(i) if mod(i,j)==0 k=k+1; end end for j=2:sqrt(n-i) if mod(n-i,j)==0 k=k+1; end end if k==0 fprintf('two numbers are') fprintf('%.0f,%.0f',i,n-i) break end

end end 结果分析: 如上图,用户输入了大于6的偶数返回两个质数5和31,通过不断试验,即可验证哥德巴赫猜想。 纪录:if判断语句与for循环语句联合嵌套使用可使程序结构更加明晰,更快的解决问题。 2题目:实验四,MATLAB选择结构与应用实验 目的:用matlab联系生活实际,解决一些生活中常见的实际问题。

Matlab实验指导书(含答案)汇总

实验一:Matlab操作环境熟悉 一、实验目的 1.初步了解Matlab操作环境。 2.学习使用图形函数计算器命令funtool及其环境。 二、实验内容 熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool,并进行下列计算: 1.单函数运算操作。 求下列函数的符号导数 (1) y=sin(x); (2) y=(1+x)^3*(2-x); 求下列函数的符号积分 (1) y=cos(x); (2) y=1/(1+x^2); (3) y=1/sqrt(1-x^2); (4) y=(x-1)/(x+1)/(x+2); 求反函数 (1) y=(x-1)/(2*x+3); (2) y=exp(x); (3) y=log(x+sqrt(1+x^2)); 代数式的化简 (1) (x+1)*(x-1)*(x-2)/(x-3)/(x-4); (2) sin(x)^2+cos(x)^2; (3) x+sin(x)+2*x-3*cos(x)+4*x*sin(x); 2.函数与参数的运算操作。 从y=x^2通过参数的选择去观察下列函数的图形变化 (1) y1=(x+1)^2 (2) y2=(x+2)^2 (3) y3=2*x^2 (4) y4=x^2+2 (5) y5=x^4 (6) y6=x^2/2 3.两个函数之间的操作 求和 (1) sin(x)+cos(x) (2) 1+x+x^2+x^3+x^4+x^5 乘积 (1) exp(-x)*sin(x)

基于matlab的FFT算法程序设计

数字通信课程设计报告书 课题名称 基于matlab 的FFT 算法程序设计 姓 名 学 号 院 系 物理与电信工程系 专 业 电子信息工程 指导教师 2010年 01 月15日 ※※※※※※※※※ ※ ※ ※※ ※※ ※※ ※※※※※ ※※ 2007级数字通信 课程设计

基于matlab的FFT算法程序设计 0712401-36 李晔 (湖南城市学院物理与电信工程系通信工程专业,益阳,413000) 一、设计目的 1.通过该设计,进一步了解MATLAB软件。 2.通过该设计,进一步熟悉MATLAB的语法规则和编辑方式。 3.通过该设计,掌握傅里叶变换的含义和方法。 二、设计的主要要求 掌握Fourier变换,解了关于MATLAB软件在数字信号处理方面的应用,熟悉MATLAB的语法规则和编程。用MATLAB实现快速Fourier变换。 三、整体设计方案 对信号x=sin(2*pi*f0*t)进行频谱分析,用MATLAB仿真。选取抽样频率为fs=100Hz,依照下列条件用MATLAB软件对信号xt进行傅里叶变换y=fft(xt,N)并绘制频谱图,观察所产生的六幅频谱图进行对比,并进行分析。 四、程序设计 fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs; f0=10;%设定正弦信号频率

%生成正弦信号 x=sin(2*pi*f0*t); figure(1); subplot(321); plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y'); title('正弦信号y=2*pi*10t时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 m=length(y); f=(0:m/2-1)'*fs/m;%进行对应的频率转换 figure(1); subplot(322); plot(f,mag(1:m/2));%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值'); title('正弦信号y=2*pi*10t幅频谱图N=128'); grid; %求均方根谱 sq=abs(y); figure(1); subplot(323); plot(f,sq(1:m/2)); xlabel('频率(Hz)'); ylabel('均方根谱');

相关文档
相关文档 最新文档