用Matlab对信号进行傅里叶变换实例
实验用MATLAB计算傅里叶变换

实验二 用MATLAB 计算傅立叶变换(2课时)一、实验目的1、掌握用MA TLAB 计算DTFT 及系统频率响应的方法。
2、掌握用MA TLAB 计算DFT 和IDFT 的方法。
3、掌握用DFT 计算圆周卷积和线性卷积的方法。
二、实验设备计算机一台,装有MATLAB 软件。
三、实验原理和基本操作1.用MA TLAB 计算DTFT对于序列x (n ),其离散时间傅立叶变换(DTFT )定义为:∑∞-∞=-=n n j e n x j X ωω)()( (1)序列的傅立叶变换(DTFT )在频域是连续的,并且以ω=2π为周期。
因此只需要知道jw X(e )的一个周期,即ω=[0,2π],或[-π,π]。
就可以分析序列的频谱。
用MA TLAB 计算DTFT ,必须在-π≤ω≤π范围内,把ω用很密的、长度很长的向量来近似,该向量中各个值可用下式表示: w=k*dw=k*K π2 (2) 其中:d ω=Kπ2 称为频率分辨率。
它表示把数字频率的范围2π均分成K 份后,每一份的大小,k 是表示频率序数的整数向量,简称为频序向量,它的取值可以有几种方法:通常在DTFT 中,频率取-π≤ω<л的范围,当K 为偶数时,取 k 12,,1,0,1,,12,2--+--=K K K 如果K 为奇数,则取 k 5.02,,1,0,1,,5.02--+-=K K 可以为奇偶两种情况综合出一个共同的确定频序向量k 的公式; k=12K -⎢⎥-⎢⎥⎣⎦ :12K -⎢⎥⎢⎥⎣⎦(3) 上式中⎢⎥⎣⎦表示向下取整。
在MA TLAB 中的向下取整函数为floor ,floor (x )的作用是把x 向下(向-∞方向)取整,所以与(3)式等价的MATLAB 语句为 k ))5.02(:)5.02((-+-=K K floor (4) 给定了输入序列(包括序列x 及其位置向量n ),又设定了频率分辨率d ω及频序向量k ,则DTFT 的计算式(1)可以用一个向量与矩阵相乘的运算来实现。
如何在MATLAB中进行傅里叶变换

如何在MATLAB中进行傅里叶变换傅里叶变换是一种常见的信号处理技术,可以分析信号的频域特征。
在MATLAB中,傅里叶变换可以通过内置的函数来实现。
本文将具体介绍如何在MATLAB中进行傅里叶变换,包括基本概念、函数的使用方法、应用示例等。
一、基本概念傅里叶变换是将一个信号从时域转换为频域的方法。
它可以将一个复杂的信号表示为一系列简单的正弦和余弦函数的叠加。
傅里叶变换的目的是通过将信号分解成不同频率的分量,来揭示信号的频谱特性,从而方便后续的处理和分析。
傅里叶变换有两种形式:离散傅里叶变换(Discrete Fourier Transform, DFT)和快速傅里叶变换(Fast Fourier Transform, FFT)。
DFT可以用于任意长度的离散信号,而FFT是DFT的一种高效实现方法,适用于长度为2的幂次的离散信号。
二、MATLAB中的傅里叶变换函数MATLAB提供了多个用于傅里叶变换的函数,其中最常用的是fft和ifft函数。
fft函数用于计算信号的快速傅里叶变换,ifft函数用于计算信号的快速傅里叶逆变换。
要使用这些函数进行傅里叶变换,首先需要将信号转化为MATLAB中的向量形式。
可以使用MATLAB提供的norm函数将信号规范化为向量形式,或自己将信号转换为向量。
接下来,可以直接调用fft函数计算信号的傅里叶变换,或者调用ifft函数计算信号的傅里叶逆变换。
三、傅里叶变换的应用示例傅里叶变换在信号处理领域有着广泛的应用,以下是一个简单的应用示例:使用傅里叶变换对一个声音信号进行频谱分析。
首先,我们需要加载一个声音文件到MATLAB中。
可以使用MATLAB提供的audioread函数读取声音文件,该函数会返回声音信号的采样率和声音数据。
接下来,可以通过调用fft函数对声音信号进行傅里叶变换。
假设我们已经将声音信号保存在名为"sound.wav"的文件中,可以使用以下代码进行声音信号的傅里叶变换:```[sound_data, sample_rate] = audioread('sound.wav');sound_fft = fft(sound_data);```在对声音信号进行傅里叶变换之后,我们可以通过计算傅里叶变换结果的幅度谱和相位谱来获取信号的频域特征。
数字信号处理实验matlab版离散傅里叶级数(DFS)

数字信号处理实验matlab版离散傅⾥叶级数(DFS)实验11 离散傅⾥叶级数(DFS)(完美格式版,本⼈⾃⼰完成,所有语句正确,不排除极个别错误,特别适⽤于⼭⼤,勿⽤冰点等⼯具下载,否则下载之后的word格式会让很多部分格式错误,谢谢)XXXX学号姓名处XXXX⼀、实验⽬的1、加深对离散周期序列傅⾥叶级数(DFS)基本概念的理解。
2、掌握⽤MA TLAB语⾔求解周期序列傅⾥叶级数变换和逆变换的⽅法。
3、观察离散周期序列的重复周期数对频谱特性的影响。
4、了解离散序列的周期卷积及其线性卷积的区别。
⼆、实验内容1、周期序列的离散傅⾥叶级数。
2、周期序列的傅⾥叶级数变换和逆变换。
3、离散傅⾥叶变换和逆变换的通⽤⼦程序。
4、周期重复次数对序列频谱的影响。
5、周期序列的卷积和。
三、实验环境MA TLAB7.0四、实验原理⽤matlab进⾏程序设计,利⽤matlab绘图⼗分⽅便,它既可以绘制各种图形,包括⼆维图形和三位图形,还可以对图像进⾏装饰和控制。
1、周期序列的离散傅⾥叶级数(1)连续性周期信号的傅⾥叶级数对应的第k次谐波分量的系数为⽆穷多。
⽽周期为N 的周期序列,其离散傅⾥叶级数谐波分量的系数只有N个是独⽴的。
(2)周期序列的频谱也是⼀个以N为周期的周期序列。
2、周期序列的傅⾥叶级数变换和逆变换例11-1已知⼀个周期性矩形序列的脉冲宽度占整个周期的1/4,⼀个周期的采样点数为16点,显⽰3个周期的信号序列波形。
要求:(1)⽤傅⾥叶级数求信号的幅度频谱和相位频谱。
(2)求傅⾥叶级数逆变换的图形,与原信号图形进⾏⽐较。
解MA TLAB程序如下:N=16;xn=[ones(1,N/4),zeros(1,3*N/4)];xn=[xn,xn,xn];n=0:3*N-1;k=0:3*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)');axis([-1,3*N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2),stem(n,abs(x)); %显⽰逆变换结果 title('IDFS|X(k)|');axis([-1,3*N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk)); %显⽰序列的幅度谱 title('|X(k)|');axis([-1,3*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); subplot(2,2,4),stem(k,angle(Xk)); %显⽰序列的相位谱 title('arg|X(k)|');axis([-1,3*N,1.1*min(angle(Xk)), 1.1*max(angle(Xk))]);运⾏结果如图11-1所⽰。
matlab如何做傅里叶变换

matlab如何做傅里叶变换Matlab是一款高级的计算机可视化程序,具有强大的图形和数据处理功能。
它可以帮助你快速处理大量数据,并进行准确的分析。
Matlab中的傅里叶变换(FFT)是用于分析数字信号(如声音或图像)的有用工具,它将时域信号转换为频域信号。
FFT可以显示出信号中每一段的频率、幅度和相位,从而可以反映出信号的构成成分。
在Matlab中,可以使用fft()函数来计算信号的傅里叶变换。
假设要对一段持续时间为T的实信号X(t)做FFT变换,首先要定义变换的采样频率fs,然后构造一个长度为N(N>T*fs)的数组x,填充X(t)的采样点,其中x[k] = X(k/fs)。
在Matlab中,可以使用linspace()函数快速生成x。
之后使用fft()来计算X(t)的FFT:y = fft(x);在此调用后,y数组就会保存有X(t)的FFT结果,它的长度为N,其中y[k]表示X(t)在频率为k/T的Fourier系数。
对于对称的实信号,Matlab还提供了一种快速的FFT实现——fftshift()函数,它可以快速计算一维实信号的FFT,省去了上述步骤所需的构造数组和调用fft()函数的时间。
要使用fftshift(),只需要调用函数fftshift(X)即可,其中X是X(t)的采样点。
总之,Matlab中的FFT工具可用于快速分析信号,方法简单便捷。
可以通过fft()和fftshift()函数快速获得信号的频谱,其结果可以反映出信号的频率、幅度和相位。
Matlab中的FFT功能可以为你的信号处理工作带来很大的方便。
MATLAB傅里叶变换及性质

1、使用MATLAB命令求出下列信号的傅里叶变换,并绘出其幅度谱和相位谱。
(1)clear all;delta=0.03;t=-10:delta:10;w=-10:delta:10;ft1=sin(2*pi*(t-1))./(pi*(t-1));Fw=delta*ft1*exp(-j*t'*w);abs=abs(Fw);ang=angle(Fw);subplot(211);plot(w,abs),axis([-10,10,-0.5,1.5]),title('f1(t)频谱图'),grid on subplot(212);plot(w,ang),axis([-10,10,-4,4]),title('f1(t)相位图'),grid on(2)clear all;delta=0.03;t=-10:delta:10;w=-10:delta:10;ft2=sinc(pi*t).^2;Fw=delta*ft2*exp(-j*t'*w);abs=abs(Fw);ang=angle(Fw);subplot(211);plot(w,abs),axis([-10,10,-0.5,1]),title('f2(t)频谱图'),grid onsubplot(212);plot(w,ang),axis([-10,10,-0.000015,0.000015]),title('f2(t)相位图'),grid on2、使用MATLAB命令求下列信号的傅里叶反变换,并绘出其时域信号图。
(1)clear alldelta=0.01;t=-10:delta:10;w=-10:delta:10;Fw1=(10./(3+j*w))+(4./(5+j*w));ft1=delta./(2*pi)*(Fw1*exp(-j*w'*t));plot(t,ft1);title('f1(t)时域信号'),grid on(2)clear alldelta=0.01;t=-10:delta:10;w=-10:delta:10;Fw2=(2*w)./(j*(16+w.*w));ft2=delta*(Fw2*exp(-j*w'*t))./(2*pi);plot(t,ft2);title('f2(t)时域信号'),grid on3、利用MATLAB 数值法分别绘出下列所示信号的幅度谱(1) clear all ;delta=0.003;t=-2:delta:2;w=-40:delta:40;ft1=stepfun(t,-1)-stepfun(t,1);Fw1=delta*ft1*exp(-j*t'*w);abs=abs(Fw1);subplot(311);plot(t,ft1);axis([-2,2,-0.5,1.5]);title('时域信号'),grid onsubplot(312);plot(w,Fw1),axis([-40,40,-0.5,2]);title('频域'),grid onsubplot(313)plot(w,abs);axis([-40,40,0,2]);title('幅度谱'),grid on(2)clear all;delta=0.003;t=-2:delta:2;w=-20:delta:20;ft2=tripuls(t,2);Fw2=delta*ft2*exp(-j*t'*w);abs=abs(Fw2);subplot(311);plot(t,ft2);axis([-2,2,-0.5,1.5]);title('时域信号'),grid onsubplot(312);plot(w,Fw2),axis([-10,10,-0.5,1.5]);title('频域'),grid onsubplot(313)plot(w,abs);axis([-10,10,0,1.5]);title('幅度谱'),grid on4、设矩形信号)5.0()5.0()(--+=tututf,利用Matlab命令绘出该信号及其频谱图。
matlab对给定坐标点求傅里叶变换

matlab对给定坐标点求傅里叶变换一、概述傅里叶变换是信号处理中常用的一种方法,用于将时域上的信号转换到频域上。
在数字信号处理中,matlab是一种常用的工具,能够方便地对给定的坐标点进行傅里叶变换。
本文将介绍如何使用matlab对给定坐标点进行傅里叶变换,包括输入数据处理、变换函数的调用和输出结果的解释等。
二、数据准备1. 将给定的坐标点存储为matlab中的向量或矩阵,其中横坐标和纵坐标分别对应向量的两个分量。
将(1,2)、(2,3)、(3,4)三个点存储为:x = [1 2 3];y = [2 3 4];2. 确保输入数据的采样间隔是均匀的,如果不均匀需要进行插值处理。
三、傅里叶变换的调用在matlab中,使用fft函数可以对给定的坐标点进行傅里叶变换。
在调用该函数时,需要指定采样频率,傅里叶变换的结果将与采样频率相关联。
以下为对给定坐标点进行傅里叶变换的示例代码:fs = 1000; 采样频率N = length(x); 采样点数X = fft(y, N)/N; 对y进行傅里叶变换f = (0:N-1)*(fs/N); 频率坐标amplitude = abs(X); 幅值phase = angle(X); 相位四、结果解释1. 频率坐标f是通过采样频率和采样点数计算得到的,表示了傅里叶变换结果的频率范围。
2. 幅值amplitude表示傅里叶变换结果的振幅大小,可用于分析频域上不同频率的能量分布情况。
3. 相位phase表示了傅里叶变换结果的相位信息,对于描述信号的相位特性具有重要意义。
五、结果可视化通过matlab的绘图函数,可以将傅里叶变换的结果进行可视化展示,以便更直观地分析频域上的信息。
以下为将傅里叶变换的结果可视化的示例代码:subplot(2,1,1);stem(f, amplitude); 绘制频谱图xlabel('Frequency (Hz)'); ylabel('Amplitude');title('Amplitude Spectrum');subplot(2,1,2);stem(f, phase); 绘制相位谱图xlabel('Frequency (Hz)'); ylabel('Phase (radians)');title('Phase Spectrum');六、总结本文介绍了如何使用matlab对给定坐标点进行傅里叶变换的方法,包括数据准备、变换函数的调用和结果的解释与可视化。
数字信号处理实验 matlab版 快速傅里叶变换(FFT)

实验14 快速傅里叶变换(FFT)(完美格式版,本人自己完成,所有语句正确,不排除极个别错误,特别适用于山大,勿用冰点等工具下载,否则下载之后的word 格式会让很多部分格式错误,谢谢)XXXX 学号姓名处XXXX一、实验目的1、加深对双线性变换法设计IIR 数字滤波器基本方法的了解。
2、掌握用双线性变换法设计数字低通、高通、带通、带阻滤波器的方法。
3、了解MA TLAB 有关双线性变换法的子函数。
二、实验内容1、双线性变换法的基本知识2、用双线性变换法设计IIR 数字低通滤波器3、用双线性变换法设计IIR 数字高通滤波器4、用双线性变换法设计IIR 数字带通滤波器三、实验环境MA TLAB7.0四、实验原理1、实验涉及的MATLAB 子函数(1)fft功能:一维快速傅里叶变换(FFT)。
调用格式:)(x fft y =;利用FFT 算法计算矢量x 的离散傅里叶变换,当x 为矩阵时,y 为矩阵x每一列的FFT 。
当x 的长度为2的幂次方时,则fft 函数采用基2的FFT 算法,否则采用稍慢的混合基算法。
),(n x fft y =;采用n 点FFT 。
当x 的长度小于n 时,fft 函数在x 的尾部补零,以构成n点数据;当x 的长度大于n 时,fft 函数会截断序列x 。
当x 为矩阵时,fft 函数按类似的方式处理列长度。
(2)ifft功能:一维快速傅里叶逆变换(IFFT)。
调用格式:)(x ifft y =;用于计算矢量x 的IFFT 。
当x 为矩阵时,计算所得的y 为矩阵x 中每一列的IFFT 。
),(n x ifft y =;采用n 点IFFT 。
当length(x)<n 时,在x 中补零;当length(x)>n 时,将x 截断,使length(x)=n 。
(3)fftshift功能:对fft 的输出进行重新排列,将零频分量移到频谱的中心。
调用格式:)(x fftshift y =;对fft 的输出进行重新排列,将零频分量移到频谱的中心。
利用MATLAB编写FFT快速傅里叶变换

一、实验目的1.利用MATLAB 编写FFT 快速傅里叶变换。
2.比较编写的myfft 程序运算结果与MATLAB 中的FFT 的有无误差。
二、实验条件PC 机,MATLAB7.0三、实验原理1. FFT (快速傅里叶变换)原理:将一个N 点的计算分解为两个N/2点的计算,每个N/2点的计算再进一步分解为N/4点的计算,以此类推。
根据DFT 的定义式,将信号x[n]根据采样号n 分解为偶采样点和奇采样点。
设偶采样序列为y[n]=x[2n],奇采样序列为z[n]=x[2n+1]。
上式中的k N W -为旋转因子N k j e /2π-。
下式则为y[n]与z[n]的表达式:2.蝶形变换的原理:下图给出了蝶形变换的运算流图,可由两个N/2点的FFT(Y[k]和Z[k]得出N点FFT X[k])。
同理,每个N/2点的FFT可以由两个N/4点的FFT求得。
按这种方法,该过程可延迟后推到2点的FFT。
下图为N=8的分解过程。
图中最右边的为8个时域采样点的8点FFTX[k],由偶编号采样点的4点FFT和奇编号采样点的4点得到。
这4点偶编号又由偶编号的偶采样点的2点FFT和奇编号的偶采样点的2点FFT产生。
相同的4点奇编号也是如此。
依次往左都可以用相同的方法算出,最后由偶编号的奇采样点和奇编号的偶采样点的2点FFT算出。
图中没2点FFT成为蝶形,第一级需要每组一个蝶形的4组,第二级有每组两个蝶形的两组,最后一级需要一组4个蝶形。
四、实验内容1.定义函数disbutterfly ,程序根据FFT 的定义:]2[][][N n x n x n y ++=、n N W N n x n x n z -+-=])2[][(][,将序列x 分解为偶采样点y 和奇采样点z 。
function [y,z]=disbutterfly(x)N=length(x);n=0:N/2-1;w=exp(-2*1i*pi/N).^n;x1=x(n+1);x2=x(n+1+N/2);y=x1+x2;z=(x1-x2).*w;2.定义函数rader ,纠正输出序列的输出顺序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
用Matlab 对信号进行傅里叶变换 (2)
Matlab 的傅里叶变换实例 (5)
Matlab 方波傅立叶变换画出频谱图 (7)
用 Matlab 对信号进行傅里叶变换
1. 离散序列的傅里叶变换 DTFT(Discrete Time Fourier Transform)
代码:
%原离散信号有 8 点
%原信号是 1行 8列的矩阵 %构建原始信号,为指数信号
%频域共-800 +800 的长度(本应是无穷, 高 %求 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. 离散傅里叶变换
1 N=8;
2 n=[0:1:N-1]
3 xn=0.5.^n; 4
5 w=[-800:1:800]*4*pi/800;
频分量很少,故省去)
6 X=xn*exp(-j*(n'*w)); 数分
量求和而得
与 1 中 DTFT 不一样的是, DTFT 的求和区间是整个频域,这对
N=8; % 原离散信号有 8 点 n=[0:1:N-1] %原信号是 1行 8列的矩阵
xn=0.5.^n; %构建原始信号,为指数信号 w=[-8:1:8]*4*pi/8; %频域共 -800 +800 的长度(本应是无穷, 高频分量很少, 故省去)
X=xn*exp(-j*(n'*w));
%求 dtft 变换,采用原始定义的方法,对复指数分量求和而得 subplot(311)
stem(n,xn); w1=[-4:1:4]*4*pi/4; X1=xn*exp(-j*(n'*w1)); title(' 原始信号 (指数信号 )'); subplot(312); stem(w/pi,abs(X)); title(' 原信号的 16 点 DFT 变换 ') subplot(313) stem(w1/pi,abs(X1)); title(' 原信号的 8 点 DFT 变换 ') 计算机的计算来说是不可以实现的, DFT 就是序列的有限傅里叶变换。
实际上, 1 中代码也只是对频域的 -800 +800 中间的 1601
结果图:
分析: DFT 只是 DTFT 的现实版本,因为 DTFT 要求求和区间无穷, 而 DFT 只在有限点内求和。
3. 快速傅里叶变换 FFT ( Fast Fourier Transform )
1
2 3
4 5 6 7 8
9
10
11 12
13
14 15
16 17
虽然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 的傅里叶变换实例
1. 傅里叶变换的定义傅里叶变换从数学上的定义,为
F(w)=int(x*exp(-jwt),t=-inf...inf) 其中,int表示积分,t是时间,x是时域信号,inf 表示无穷,exp 表示指数运算。
其含义说的是给一个
无限长的时域信号和一个频点w,可以唯一确定一个复数F。
于是, F 和w 就有了这种对应关系,考虑到 F 是个复数。
F 的绝对值和w 关系叫幅频, F 的幅角和w 关系叫相频。
help fft 可以知道这个和数学上的傅里叶不一样,因为计算机是离散的!因为计算机的时域信号存储量是有限的!比如等时采样得到的信号,高频分量是不可能获得的,对于比较大的w 将无法计算。
于是,fft 这样计算傅里叶变换:把时域信号进行周期延拓,取一组w,就是时域信号的周期及该周期的二分之一,三分之一,直到n 分之一,其中n是一个周期内的采样点。
这样做的结果,就是对一段有限长的时域信号,将其长度作为基频率,分析基频和高频含量。
当然,能分析到的最高频为n 次谐波,再高次谐波由于香农定理而无法体现。
3. 写一个数学定义傅里叶变换的程序将有限长时域信号不延拓,时域信号外的时间内,认为信号为零。
于是获得无限长时域信号,取频点若干,分析其傅里叶变换。
考虑到matlab 对于由描点法定义的函数,数值积分时常用的方法有:矩形法,
梯形法。
一下代码采用梯形法,算例如下:
clear
clc
%% 输入信号
t=0:1e-3:20;% 时域信号的时间范围x=sin(t)+sin(1.5*t+1)+5*cos(0.5*t)+2*randn(size(t));% 时域信号x w=[0:1e-2:2];% 想要观察的频率范围
%% 预定义
y=w;
a=w;
j=sqrt(-1);% 先定义变量维度,提高运算速度
%% 计算频点
for i=1:length(w)
f=trapz(t,x.*exp(-j*w(i)*t));
y(i)=abs(f);
a(i)=angle(f);
end
%% 输出
subplot(3,1,1),
plot(t,x)
subplot(3,1,2),
plot(w,y)
subplot(3,1,3),
plot(w,a)
算例中的时域信号,里有三个正余弦分量,一个干扰分量。
等时采样,并认为采样频率足够高,即得到的信号是连续信号。
Matlab 方波傅立叶变换画出频谱图
代码如下: clc;clear;close all; fs=30; % 采样频率 T=1/fs;
t=0:T:2*pi;
A=2;P=4; y=A*square(P*t); subplot(2,1,1),plot(t,y) title(' 方波信号 ')
Fy=abs(fft(y,512));
f2=fs*(0:256)/512;
subplot(2,1,2),plot(f2,Fy(1:257)) title('频谱图 '); set(gcf,'unit','normalized','position',[0 0 1 1]); set(gca,'xtick',0:0.6:8); axis([0,8,0 300]);
方波大概 0.6 左右。
角频率 W=4 ,所以频率 f=4/(2*pi )=2/pi 没错。
求信号的 512点 FFT ,点数越大 (2的整数幂 ),频谱越精细。
把 512 改成 1024 后,频率变到 1.2 左右了。
代码:
clc;clear;close all; fs=30; % 采样频率
N=input (
' 输入 FFT 点数: '); T=1/fs; t=0:T:2*pi;
A=2;P=4; y=A*square(P*t); subplot(2,1,1),plot(t,y) title(' 方波信号 ') Fy=abs(fft(y,N)); f2=fs*(0:N/2)/N; subplot(2,1,2),plot(f2,Fy(1:(N/2+1))) title('频谱图 ');
set(gcf,'unit','normalized','position',[0 0 1 1]); set(gca,'xtick',0:0.6:8); axis([0,8,0 300]);
输入N 分别为128 ,256 ,512,1024 看看,是不是点越多,曲线越平滑。