Matlab编程实现FFT变换及频谱分析的程序代码

合集下载

matlab的fft函数用法

matlab的fft函数用法

matlab的fft函数用法MATLAB中的fft函数用于计算快速傅里叶变换(FFT)。

FFT是一种将信号从时域转换为频域的方法,常用于信号处理、图像处理等领域。

在本文中,我将一步一步回答有关MATLAB中fft函数的使用方法。

一、基本语法在MATLAB中,fft函数的基本语法如下:Y = fft(X)其中,X是要进行FFT的向量或矩阵,输出结果Y是X的离散傅里叶变换的向量或矩阵。

二、一维FFT首先我们来看一维FFT的使用方法。

假设有一个长度为N的一维向量x,我们将对其进行FFT变换并得到变换结果y。

1. 创建输入向量首先,我们需要创建一个长度为N的向量x,作为FFT的输入。

可以通过以下代码实现:N = 1024; % 向量长度x = randn(N, 1); % 创建长度为N的随机向量2. 进行FFT变换接下来,我们使用fft函数对向量x进行FFT变换,代码如下:y = fft(x);3. 可视化结果为了更好地理解和分析FFT结果,通常会对结果进行可视化。

我们可以使用MATLAB的绘图函数来绘制FFT结果的幅度和相位谱。

例如,可以使用如下代码绘制幅度谱:f = (0:N-1)./N; % 频率轴amp = abs(y); % 幅度谱figure;plot(f, amp);xlabel('Frequency (Hz)');ylabel('Amplitude');title('Amplitude Spectrum');同样,可以使用如下代码绘制相位谱:phase = angle(y); % 相位谱figure;plot(f, phase);xlabel('Frequency (Hz)');ylabel('Phase');title('Phase Spectrum');三、二维FFT除了一维FFT,MATLAB中的fft函数还支持二维FFT。

matlab自行编写fft傅里叶变换

matlab自行编写fft傅里叶变换

傅里叶变换(Fourier Transform)是信号处理中的重要数学工具,它可以将一个信号从时域转换到频域。

在数字信号处理领域中,傅里叶变换被广泛应用于频谱分析、滤波、频谱估计等方面。

MATLAB作为一个功能强大的数学软件,自带了丰富的信号处理工具箱,可以用于实现傅里叶变换。

在MATLAB中,自行编写FFT(Fast Fourier Transform)的过程需要以下几个步骤:1. 确定输入信号我们首先需要确定输入信号,可以是任意时间序列数据,例如声音信号、振动信号、光学信号等。

假设我们有一个长度为N的信号x,即x = [x[0], x[1], ..., x[N-1]]。

2. 生成频率向量在进行傅里叶变换之前,我们需要生成一个频率向量f,用于表示频域中的频率范围。

频率向量的长度为N,且频率范围为[0, Fs),其中Fs 为输入信号的采样频率。

3. 实现FFT算法FFT算法是一种高效的离散傅里叶变换算法,它可以快速计算出输入信号的频域表示。

在MATLAB中,我们可以使用fft函数来实现FFT 算法,其调用方式为X = fft(x)。

其中X为输入信号x的频域表示。

4. 计算频谱通过FFT算法得到的频域表示X是一个复数数组,我们可以计算其幅度谱和相位谱。

幅度谱表示频率成分的强弱,可以通过abs(X)得到;相位谱表示不同频率成分之间的相位差,可以通过angle(X)得到。

5. 绘制结果我们可以将输入信号的时域波形和频域表示进行可视化。

在MATLAB 中,我们可以使用plot函数来绘制时域波形或频谱图。

通过以上几个步骤,我们就可以在MATLAB中自行编写FFT傅里叶变换的算法。

通过对信号的时域和频域表示进行分析,我们可以更好地理解信号的特性,从而在实际应用中进行更精确的信号处理和分析。

6. 频谱分析借助自行编写的FFT傅里叶变换算法,我们可以对信号进行频谱分析。

频谱分析是一种非常重要的信号处理技术,可以帮助我们了解信号中所包含的各种频率成分以及它们在信号中的能量分布情况。

FFT算法(用matlab实现)

FFT算法(用matlab实现)

数字信号处理实验报告 实验二 FFT 算法的MATLAB 实现(一)实验目的:理解离散傅立叶变换时信号分析与处理的一种重要变换,特别是FFT 在数字信号处理中的高效率应用。

(二)实验原理:1、有限长序列x(n)的DFT 的概念和公式:⎪⎪⎩⎪⎪⎨⎧-≤≤=-≤≤=∑∑-=--=101010)(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(N j N eW π-=2、FFT 算法调用格式是 X= fft(x) 或 X=fft(x,N)对前者,若x 的长度是2的整数次幂,则按该长度实现x 的快速变换,否则,实现的是慢速的非2的整数次幂的变换;对后者,N 应为2的整数次幂,若x 的长度小于N ,则补零,若超过N ,则舍弃N 以后的数据。

Ifft 的调用格式与之相同。

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

源程序: clc; N=12; n=0:N-1; k=0:N-1;xn=cos(n*pi/6); W=exp(-j*2*pi/N); kn=n'*kXk=xn*(W.^kn) stem(n,Xk); xlabel('k'); ylabel('Xk'); grid on ;也可用FFT 算法直接得出结果,程序如下: clc; N=12; n=0:N-1;xn=cos(n*pi/6);Xk=fft(xn,N); stem(n,Xk); xlabel('k'); ylabel('Xk'); grid on ;实验结果:24681012kX k分析实验结果:用DFT 和用FFT 对序列进行运算,最后得到的结果相同。

但用快速傅立叶变换的运算速度可以快很多。

2、题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz 和120Hz 正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz ,通过FFT 来分析其信号频率成分,用MA TLAB 实现。

MATLAB信号频谱分析FFT详解

MATLAB信号频谱分析FFT详解

MATLAB信号频谱分析FFT详解FFT(快速傅里叶变换)是一种常用的信号频谱分析方法,它可以将信号从时域转换到频域,以便更好地分析信号中不同频率成分的特征。

在MATLAB中,使用fft函数可以方便地进行信号频谱分析。

首先,我们先介绍一下傅里叶变换的基本概念。

傅里叶变换是一种将信号分解成不同频率成分的技术。

对于任意一个周期信号x(t),其傅里叶变换X(f)可以表示为:X(f) = ∫(x(t)e^(-j2πft))dt其中,X(f)表示信号在频率域上的幅度和相位信息,f表示频率。

傅里叶变换可以将信号从时域转换到频域,以便更好地分析信号的频率特征。

而FFT(快速傅里叶变换)是一种计算傅里叶变换的高效算法,它通过分治法将傅里叶变换的计算复杂度从O(N^2)降低到O(NlogN),提高了计算效率。

在MATLAB中,fft函数可以方便地计算信号的傅里叶变换。

使用FFT进行信号频谱分析的步骤如下:1. 构造信号:首先,我们需要构造一个信号用于分析。

可以使用MATLAB中的一些函数生成各种信号,比如sin、cos、square等。

2. 采样信号:信号通常是连续的,为了进行FFT分析,我们需要将信号离散化,即进行采样。

使用MATLAB中的linspace函数可以生成一定长度的离散信号。

3. 计算FFT:使用MATLAB中的fft函数可以方便地计算信号的FFT。

fft函数的输入参数是离散信号的向量,返回结果是信号在频率域上的复数值。

4. 频率换算:信号在频域上的复数值其实是以采样频率为单位的。

为了更好地观察频率成分,我们通常将其转换为以Hz为单位的频率。

可以使用MATLAB中的linspace函数生成一个对应频率的向量。

5. 幅度谱计算:频域上的复数值可以由实部和虚部表示,我们一般更关注其幅度,即信号的相对强度。

可以使用abs函数计算出频域上的幅度谱。

6. 相位谱计算:除了幅度谱,信号在频域上的相位信息也是重要的。

用MATLAB设计对信号进行频谱分析和滤波处理的程序

用MATLAB设计对信号进行频谱分析和滤波处理的程序

用MATLAB设计对信号进行频谱分析和滤波处理的程序设计出一套完整的系统,对信号进行频谱分析和滤波处理:1.产生一个连续信号,包含低频,中频,高频分量,对其进行采样,进行频谱分析,分别设计三种高通,低通,带通滤波器对信号进行滤波处理,观察滤波后信号的频谱。

2.采集一段含有噪音的语音信号(可以录制含有噪音的信号,或者录制语音后再加进噪音信号),对其进行采样和频谱分析,根据分析结果设计出一合适的滤波器滤除噪音信号。

完整的程序%写上标题%设计低通滤波器:[N,Wc]=buttord()%估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc); %设计Butterworth低通滤波器[h,f]=freqz(); %求数字低通滤波器的频率响应figure(2); % 打开窗口2subplot(221); %图形显示分割窗口plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图title(巴氏低通滤波器'');grid; %绘制带网格的图像sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数subplot(222);plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形xlabel('时间 (seconds)');ylabel('时间按幅度');SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换w= %新信号角频率subplot(223);plot()); %绘制叠加函数S经过低通滤波器以后的频谱图title('低通滤波后的频谱图');%设计高通滤波器[N,Wc]=buttord()%估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器[h,f]=freqz(); %求数字高通滤波器的频率响应figure(3);subplot(221);plot()); %绘制Butterworth高通滤波器的幅频响应图title('巴氏高通滤波器');grid; %绘制带网格的图像sf=filter(); %叠加函数S经过高通滤波器以后的新函数subplot(222);plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形xlabel('Time(seconds)');ylabel('Time waveform');w; %新信号角频率subplot(223);plot()); %绘制叠加函数S经过高通滤波器以后的频谱图title('高通滤波后的频谱图');%设计带通滤波器[N,Wc]=buttord([)%估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc); %设计Butterworth带通滤波器[h,f]=freqz(); %求数字带通滤波器的频率响应figure(4);subplot(221);plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图title('butter bandpass filter');grid; %绘制带网格的图像sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数subplot(222);plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形xlabel('Time(seconds)');ylabel('Time waveform');SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换w=( %新信号角频率subplot(223);plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图title('带通滤波后的频谱图');。

MATLAB中FFT的使用方法(频谱分析)

MATLAB中FFT的使用方法(频谱分析)

说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编一.调用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)用MATLAB进行谱分析时注意:(1)函数FFT返回值的数据结构具有对称性。

例:N=8;n=0:N-1;xn=[4 3 2 6 7 8 9 0];Xk=fft(xn)→Xk =39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929iXk与xn的维数相同,共有8个元素。

Xk的第一个数对应于直流分量,即频率值为0。

(2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。

在IFFT时已经做了处理。

要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。

二.FFT应用举例例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。

采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;fs=100;N=128; %采样频率和数据点数n=0:N-1;t=n/fs; %时间序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求得Fourier变换后的振幅f=n*fs/N; %频率序列subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;%对信号采样数据为1024点的处理fs=100;N=1024;n=0:N-1;t=n/fs;x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求取Fourier变换的振幅f=n*fs/N;subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;subplot(2,2,4)plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;运行结果:fs=100Hz,Nyquist频率为fs/2=50Hz。

用FFT对信号作频谱分析Matlab程序

用FFT对信号作频谱分析Matlab程序

对以下序列进行FFT 分析x 1(n)=R 4(n)x 2(n)=x 3(n)=x1n=[ones(1,4)]; %产生R4(n)序列向量X1k8=fft(x1n,8); %计算x1n 的8点DFTX1k16=fft(x1n,16); %计算x1n 的16点DFT%以下绘制幅频特性曲线N=8;f=2/N*(0:N-1); (不懂)figure(1);subplot(1,2,1);stem(f,abs(X1k8),'r','、'); %绘制8点DFT 的幅频特性图,abs 求得Fourier 变换后的振幅title('(1a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');N=16;f=2/N*(0:N-1);subplot(1,2,2);stem(f,abs(X1k16),'、'); %绘制8点DFT 的幅频特性图title('(1b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');%x2n 与 x3nM=8;xa=1:(M/2); xb=(M/2):-1:1; %从M/2到1每次递减1x2n=[xa,xb]; %产生长度为8的三角波序列x2(n)x3n=[xb,xa];X2k8=fft(x2n,8);X2k16=fft(x2n,16);X3k8=fft(x3n,8);X3k16=fft(x3n,16);figure(2);N=8;f=2/N*(0:N-1);subplot(2,2,1);stem(f,abs(X2k8),'r','、'); %绘制8点DFT 的幅频特性图n+1 0≤n ≤3 8-n 4≤n ≤7 0 其它n 4-n 0≤n ≤3 n-3 4≤n ≤70 其它ntitle('(2a) 8点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,3);stem(f,abs(X3k8),'r','、'); %绘制8点DFT的幅频特性图title('(3a) 8点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度');N=16;f=2/N*(0:N-1);subplot(2,2,2);stem(f,abs(X2k16),'、'); %绘制8点DFT的幅频特性图title('(2b) 16点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,4);stem(f,abs(X3k16),'、'); %绘制8点DFT的幅频特性图title('(3b) 16点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度');%x4n 与 x5nN=8;n=0:N-1;x4n=cos(pi*n/4);x5n=cos(pi*n/4)+cos(pi*n/8);X4k8=fft(x4n,8);X4k16=fft(x4n,16);X5k8=fft(x5n,8);X5k16=fft(x5n,16);figure(3);N=8;f=2/N*(0:N-1);subplot(2,2,1);stem(f,abs(X4k8),'r','、'); %绘制8点DFT的幅频特性图title('(4a) 8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,3);stem(f,abs(X5k8),'r','、'); %绘制8点DFT的幅频特性图title('(5a) 8点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');N=16;f=2/N*(0:N-1);subplot(2,2,2);stem(f,abs(X4k16),'、'); %绘制8点DFT的幅频特性图title('(4b) 16点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,4);stem(f,abs(X5k16),'、'); %绘制8点DFT的幅频特性图title('(5b) 16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');%x8nFs=64; T=1/Fs;N=16;n=0:N-1; %对于N=16的情况nT = n*T;x8n=cos(8*pi*nT)+cos(16*pi*nT)+cos(20*pi*nT)X8k16=fft(x8n,16);N=16;f=2/N*(0:N-1);figure(4);subplot(2,2,1);stem(f,abs(X8k16),'、'); %绘制8点DFT的幅频特性图title('(6a) 16点DFT[x_8(n)]');xlabel('ω/π');ylabel('幅度');N=32;n=0:N-1; %对于N=16的情况nT = n*T;x8n=cos(8*pi*nT)+cos(16*pi*nT)+cos(20*pi*nT)X8k32=fft(x8n,32);N=32;f=2/N*(0:N-1);subplot(2,2,2);stem(f,abs(X8k32),'、'); %绘制8点DFT的幅频特性图title('(6b) 32点DFT[x_8(n)]');xlabel('ω/π');ylabel('幅度'); N=64;n=0:N-1; %对于N=16的情况nT = n*T;x8n=cos(8*pi*nT)+cos(16*pi*nT)+cos(20*pi*nT)X8k64=fft(x8n,64);N=64;f=2/N*(0:N-1);subplot(2,2,3);stem(f,abs(X8k64),'、'); %绘制8点DFT的幅频特性图title('(6c) 64点DFT[x_8(n)]');xlabel('ω/π');ylabel('幅度');。

Matlab编程实现FFT变换及频谱分析的程序代码

Matlab编程实现FFT变换及频谱分析的程序代码

Matlab编程实现FFT变换及频谱分析的程序代码内容1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图源程序%*************************************************************** **********%% FFT实践及频谱分析%%*************************************************************** **********%%*************************************************************** **********%%***************1.正弦波****************%fs=100;%设定采样频率N=128;n=0:N-1;t=n/fs;f0=10;%设定正弦信号频率%生成正弦信号x=sin(2*pi*f0*t);figure(1);subplot(231);plot(t,x);%作正弦信号的时域波形xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;%进行FFT变换并做频谱图y=fft(x,N);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(1);subplot(232);plot(f,mag);%做频谱图axis([0,100,0,80]);xlabel('频率(Hz)');ylabel('幅值');title('正弦信号y=2*pi*10t幅频谱图N=128');grid;%求均方根谱sq=abs(y);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('正弦信号y=2*pi*10t均方根谱');grid;%求功率谱power=sq.^2;figure(1);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('正弦信号y=2*pi*10t功率谱');grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('正弦信号y=2*pi*10t对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的正弦信号波形');grid;%****************2.矩形波****************% fs=10;%设定采样频率t=-5:0.1:5;x=rectpuls(t,2);x=x(1:99);figure(2);subplot(231);plot(t(1:99),x);%作矩形波的时域波形ylabel('y');title('矩形波时域波形');grid;%进行FFT变换并做频谱图y=fft(x);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(2);subplot(232);plot(f,mag);%做频谱图xlabel('频率(Hz)');ylabel('幅值');title('矩形波幅频谱图');grid;%求均方根谱sq=abs(y);figure(2);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('矩形波均方根谱');grid;%求功率谱power=sq.^2;figure(2);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('矩形波功率谱');grid;%求对数谱ln=log(sq);figure(2);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('矩形波对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(2);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的矩形波波形');grid;%****************3.白噪声****************% fs=10;%设定采样频率t=-5:0.1:5;x=zeros(1,100);x(50)=100000;figure(3);subplot(231);plot(t(1:100),x);%作白噪声的时域波形xlabel('t');ylabel('y');title('白噪声时域波形');grid;%进行FFT变换并做频谱图y=fft(x);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(3);subplot(232);plot(f,mag);%做频谱图xlabel('频率(Hz)');ylabel('幅值');title('白噪声幅频谱图');grid;%求均方根谱sq=abs(y);figure(3);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('白噪声均方根谱');grid;%求功率谱power=sq.^2;figure(3);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('白噪声功率谱');grid;%求对数谱ln=log(sq);figure(3);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('白噪声对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(3);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的白噪声波形'); grid;。

傅里叶变换matlab代码

傅里叶变换matlab代码

clc;clear all;close all;ticFs=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 onplot(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);figuresubplot(211)plot(f(1:N/2),A(1:N/2))%函数ffs返回值的数据结构具有对称性,因此只取前一半hold onplot(f(1:N/2),A1(1:N/2),'r--')title('幅值频谱')xlabel('频率(HZ)')grid onsubplot(212)stem(f(1:N/2),P(1:N/2))hold onstem(f(1:N/2),P1(1:N/2),'r')title('相位频谱')xlabel('频率(HZ)')ylabel('相位')toc(注:文档可能无法思考全面,请浏览后下载,供参考。

应用MATLAB对信号进行频谱分析

应用MATLAB对信号进行频谱分析

应用MATLAB对信号进行频谱分析信号的频谱分析是一种重要的信号处理方法,可以帮助我们深入了解信号的频域特性。

MATLAB作为一种强大的科学计算软件,提供了丰富的工具和函数来进行频谱分析。

在MATLAB中,频谱分析可以使用多种方法来实现,包括离散傅立叶变换(DFT)、快速傅立叶变换(FFT)等。

下面将介绍几种常用的频谱分析方法及其在MATLAB中的应用。

1.离散傅立叶变换(DFT)离散傅立叶变换是将信号从时域转换到频域的一种方法。

在MATLAB 中,可以使用fft函数进行离散傅立叶变换。

例如,假设我们有一个长度为N的信号x,可以通过以下代码进行频谱分析:```matlabN = length(x);X = fft(x);fs = 1000; % 采样频率f = fs*(0:(N/2))/N;P = abs(X/N).^2;plot(f,P(1:N/2+1))```以上代码将信号x进行离散傅立叶变换,并计算频谱的幅度谱(P),然后根据采样频率和信号长度计算频率轴。

最后使用plot函数绘制频谱图。

2.快速傅立叶变换(FFT)快速傅立叶变换是一种高效的离散傅立叶变换算法,可以在较短的时间内计算出频谱。

在MATLAB中,fft函数实际上就是使用了快速傅立叶变换算法。

以下是使用FFT进行频谱分析的示例代码:```matlabN = length(x);X = fft(x);fs = 1000; % 采样频率f = fs*(0:(N/2))/N;P = abs(X/N).^2;plot(f,P(1:N/2+1))```3.窗函数窗函数可以改善频谱分析的效果,常见的窗函数有矩形窗、汉宁窗、汉明窗等。

在MATLAB中,可以使用window函数生成窗函数,然后将窗函数和信号进行乘积运算,再进行频谱分析。

以下是使用汉宁窗进行频谱分析的示例代码:```matlabN = length(x);window = hann(N);xw = x.*window';X = fft(xw);fs = 1000; % 采样频率f = fs*(0:(N/2))/N;P = abs(X/N).^2;plot(f,P(1:N/2+1))```以上代码通过生成一个汉宁窗,并将窗函数与信号进行乘积运算得到xw,然后将xw进行频谱分析。

Matlab实现FFT变换

Matlab实现FFT变换

Matlab实现FFT变换Matlab实现FFT变换(单边谱及双边谱)以前对于Fourier Transform从来没有细究,不管在LabVIEW还是Matlab 里都有现成的FFT(快速Fourier Transform)函数,输入相应的参数就可以了。

在Matlab下y=fft(x,nfft);x为输入nfft为快速傅立叶变换的点数LabVIEW下,同样输入x及变换的点数,还有一个布尔控制,是否shift?下面的例子,先进行fourier transform,即双边谱程序代码fs=100;%设定采样频率N=128;n=0:N-1;t=n/fs;f0=10;%设定正弦信号频率%生成正弦信号x=sin(2*pi*f0*t);figure(1);subplot(231);plot(t,x);%作正弦信号的时域波形xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;%进行FFT变换并做频谱图y=fft(x,N);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(1);subplot(232);plot(f,mag);%做频谱图axis([0,100,0,80]);xlabel('频率(Hz)');ylabel('幅值');title('正弦信号y=2*pi*10t幅频谱图N=128'); grid;%求均方根谱sq=abs(y);figure(1);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('正弦信号y=2*pi*10t均方根谱'); grid;%求功率谱power=sq.^2;figure(1);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('正弦信号y=2*pi*10t功率谱'); grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('正弦信号y=2*pi*10t对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的正弦信号波形'); grid;下面进行单边谱计算:程序代码fs=100;%设定采样频率N=128;n=0:N-1;t=n/fs;f0=10;%设定正弦信号频率%生成正弦信号x=sin(2*pi*f0*t);subplot(231);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(232);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);subplot(233);plot(f,sq(1:m/2));xlabel('频率(Hz)');ylabel('均方根谱');title('正弦信号y=2*pi*10t均方根谱'); grid;%求功率谱power=sq.^2;figure(1);subplot(234);plot(f,power(1:m/2));xlabel('频率(Hz)');ylabel('功率谱');title('正弦信号y=2*pi*10t功率谱'); grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,ln(1:m/2));xlabel('频率(Hz)');ylabel('对数谱');title('正弦信号y=2*pi*10t对数谱'); grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的正弦信号波形'); grid;。

Matlab实现FFT变换.

Matlab实现FFT变换.

Matlab实现FFT变换Matlab实现FFT变换(单边谱及双边谱)以前对于Fourier Transform从来没有细究,不管在LabVIEW还是Matlab里都有现成的FFT(快速Fourier Transform)函数,输入相应的参数就可以了。

在Matlab下y=fft(x, nfft);x为输入nfft为快速傅立叶变换的点数LabVIEW下,同样输入x及变换的点数,还有一个布尔控制,是否shift?下面的例子,先进行fourier transform,即双边谱程序代码fs=100;%设定采样频率N=128;n=0:N-1;t二n/fs;f0=10;%设定正弦信号频率%生成正弦信号x=si n(2*pi*f0*t);figure(1); subplot(231);plot(t,x);%作正弦信号的时域波形xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;%进行FFT变换并做频谱图y二fft(x,N);% 进行fft 变换mag二abs(y);% 求幅值f=(0:le ngth(y)-1)'*fs/le ngth(y);% 进行对应的频率转换figure(1); subplot(232);plot(f,mag);% 做频谱图axis([0,100,0,80]);xlabel('频率(Hz)');ylabel('幅值');title('正弦信号y=2*pi*10t 幅频谱图N=128');grid;%求均方根谱sq=abs(y);figure(1);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('正弦信号y=2*pi*10t均方根谱');grid;%求功率谱power=sq.A2;figure(1);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('正弦信号y=2*pi*10t功率谱');grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('正弦信号y=2*pi*10t对数谱');grid;%用IFFT恢复原始信号xifft二ifft(y);magx二real(xifft);ti=[0:le ngth(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的正弦信号波形'); grid; 下面进行单边谱计算:程序代码fs=100;%设定采样频率N=128;n=0:N-1;t二n/fs;fO=1O;%设定正弦信号频率%生成正弦信号x=si n(2*pi*f0*t);figure(1);subplot(231);plot(t,x);%作正弦信号的时域波形xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;%进行FFT变换并做频谱图y=fft(x,N);% 进行fft 变换mag=abs(y);% 求幅值m=le ngth(y);f=(0:m/2-1)'*fs/m;%进行对应的频率转换figure(1);subplot(232);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(233);plot(f,sq(1:m/2));xlabel('频率(Hz)');ylabel('均方根谱');title('正弦信号y=2*pi*10t均方根谱');grid;%求功率谱power二sq42;figure(1);subplot(234);plot(f,power(1:m/2));xlabel('频率(Hz)');ylabel('功率谱');title('正弦信号y=2*pi*10t功率谱'); grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,l n(1:m/2));xlabel('频率(Hz)');ylabel('对数谱');title('正弦信号y=2*pi*10t对数谱'); grid;%用IFFT恢复原始信号xifft二ifft(y);magx二real(xifft);ti=[0:le ngth(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的正弦信号波形'); grid;。

MATLAB 频谱分析(FFT FT定义法)

MATLAB 频谱分析(FFT FT定义法)
X1=x1(:,1);%双声道降维
X2=zeros(N/16,1);%只采样64点
for n=1:N/16
for m=1:length(X1)/2 %数据量太大显示太慢只取一半作分析
X2(n,1)=X2(n,1)+X1(m,1)*exp(-j*n*m);%将w与n同步以便于计算存储,w,n关系也可以变
subplot(244);
plot(f(1:N/2),ph(1:N/2));
xlabel('频率/Hz'),ylabel('相角'),title('录音信号相位谱');
%%%%%%%%%%%%%%%%%%录音信号FFT后频谱
subplot(245);
plot(y1)%采样后信号的FFT频谱图
title('录音信号FFT频谱图')
%%%%%%%%%%%%%%%%%%录音信号FFT后幅度
subplot(246);
plot(f(1,N/2)abs(y1(N/2)))%采样后信号的FFT幅度谱,不指定横坐标无意义请注意
title('录音信号FFT幅度谱')
%%%%%%%%%%%%%%%%%%%录音信号随频率变化的相位
ph=2*angle(y1(1:N/2));
ph=ph*180/pi;
subplot(247);
plot(f(1:N/2),ph(1:N/2));
xlabel('频率/Hz'),ylabel('相角'),title('录音信号FFT相位谱');
%%%%%%%%%%%%%%%%%%%由定义得出的FT

matlab 对时域信号的快速傅里叶变换程序

matlab 对时域信号的快速傅里叶变换程序

在MATLAB中,对时域信号进行快速傅里叶变换(FFT)可以使用内置的fft函数。

下面是一个简单的例子,展示如何使用fft函数对一个正弦波信号进行傅里叶变换:Fs = 1000; 采样频率T = 1/Fs; 采样周期t = (0:1000)/Fs; 时间向量signal = sin(2*pi*50*t); 50 Hz的正弦波信号NFFT = length(signal); 信号长度FFT = fft(signal, NFFT); 计算FFTf = Fs/2*linspace(0,1,length(FFT)); 频率向量figure;subplot(2,1,1);plot(signal);title('时域信号');xlabel('时间(s)');ylabel('幅度');subplot(2,1,2);plot(abs(FFT));title('频谱');xlabel('频率(Hz)');ylabel('幅度');在这个例子中,我们首先定义了采样频率Fs和采样时间T,然后生成了一个50Hz的正弦波信号signal。

我们使用fft函数计算了信号的快速傅里叶变换,并绘制了变换后的频谱图。

请注意,fft函数的第二个参数NFFT指定了FFT的点数,它应该与信号的长度相匹配。

在实际应用中,你可能需要根据信号的特性选择适当的FFT点数,以获得最佳的频率分辨率。

此外,fft函数返回的频谱通常是复数形式,表示信号的幅度和相位信息。

在这个例子中,我们只绘制了幅度(模)部分。

如果你需要绘制相位信息,可以将FFT转换为极坐标形式,然后绘制实部和虚部或者幅度和相位。

MATLAB关于FFT频谱分析的程序

MATLAB关于FFT频谱分析的程序

MATLAB关于FFT频谱分析的程序```Matlab%定义信号参数fs = 1000; % 采样频率t = 0:1/fs:1-1/fs; % 时间向量f1=10;%第一个频率成分f2=100;%第二个频率成分x = sin(2*pi*f1*t) + sin(2*pi*f2*t); % 信号%计算信号的FFTN = length(x); % 信号长度X = fft(x); % FFT变换X_mag = abs(X(1:N/2))/N; % 取FFT结果的一半并除以信号长度得到幅度谱f = (0:N/2-1)*fs/N; % 计算频率向量%绘制频谱figure;plot(f, X_mag);xlabel('Frequency (Hz)');ylabel('Magnitude');title('FFT Spectrum Analysis');grid on;```在上述程序中,我们首先定义了信号的参数,例如采样频率(fs)、时间向量(t)和信号的频率成分(f1和f2)。

然后,我们使用这些参数生成信号(x),该信号是由两个不同频率的正弦波叠加而成。

接下来,我们计算信号的FFT(通过调用fft函数),并使用abs函数取FFT结果的绝对值。

我们还将FFT结果的一半(因为FFT结果是对称的,前一半包含了频谱信息)除以信号长度,得到幅度谱(X_mag)。

频率向量(f)通过简单计算得到。

使用上述程序,我们可以计算并绘制任意信号的频谱。

只需修改信号的参数、生成信号的代码和绘图设置,就可以适应不同的应用需求。

除了上述示例程序,MATLAB还提供了许多其他函数和工具,用于更详细的频谱分析,如频谱图的平滑、窗函数的应用、频谱峰值的查找等。

读者可以根据自己的需求进一步研究和探索MATLAB的频谱分析功能。

matlab编写fft傅里叶变换

matlab编写fft傅里叶变换

matlab编写fft傅里叶变换Matlab编写FFT(快速傅里叶变换)是数字信号处理(DSP)领域中的一个重要问题。

FFT是一种将信号从时域转换为频域的方法,可以用于信号处理、图像处理、通信系统等领域。

Matlab提供了多种FFT函数,如fft、ifft、fft2等。

这些函数基于快速傅里叶变换算法,并且已经过优化,可以很快地计算出FFT结果。

但是,在某些情况下,需要自己编写FFT算法,以便更好地理解和掌握FFT的原理和实现。

编写FFT算法需要掌握FFT的基本原理和算法流程。

FFT算法是基于分治思想的,它将一个大的FFT问题分解成若干个小的FFT问题,并通过递归求解这些小问题,最终得到整个FFT序列的结果。

在Matlab中编写FFT算法,需要使用Matlab的向量和矩阵运算功能,并掌握FFT公式的编写方法。

下面是一个简单的Matlab代码示例,用于实现8点FFT变换:function y = myfft(x)N = length(x);if N == 1y = x;elsexe = myfft(x(1:2:N));xo = myfft(x(2:2:N));W = exp(-2*pi*1i/N).^(0:N/2-1);y = [xe+W.*xo xe-W.*xo];end调用myfft函数,输入一个长度为8的向量,即可得到8点FFT 变换的结果。

这个代码示例实现了FFT算法的基本流程,包括输入数据的处理、小FFT问题的递归计算、以及大FFT问题的合并计算。

总之,Matlab编写FFT算法涉及到许多数学知识和编程技巧,需要不断地学习和实践,才能掌握这个领域的知识和技能。

matlab求傅里叶变换并绘出其频率谱和相位谱

matlab求傅里叶变换并绘出其频率谱和相位谱

一、matlab求傅里叶变换的基本原理在数学和工程中,傅立叶变换是将一个函数(例如一个时域信号)分解成一系列正弦和余弦函数的过程。

它在信号处理、图像处理和通信工程等领域中有着广泛的应用。

在matlab中,我们可以利用内置函数来对信号进行傅里叶变换,并绘出其频率谱和相位谱。

二、matlab中傅里叶变换的实现步骤1. 首先需要准备待处理的信号数据,可以是一个数组或者一个函数。

2. 使用matlab中的fft函数对信号进行傅里叶变换。

fft函数是fast Fourier transform的缩写,用于快速计算傅里叶变换。

3. 计算得到的结果是一个复数数组,其中包含了信号的频率谱和相位谱信息。

4. 将频率谱和相位谱信息转换成可视化的图形,并进行绘制。

三、matlab中绘制频率谱和相位谱的方法1. 频率谱是指信号在频率域中的表示,可以通过abs函数计算出fft结果的模来获得。

2. 相位谱是指信号在频率域中的相位信息,可以通过angle函数计算fft结果的角度来获得。

3. 使用plot函数将频率谱和相位谱信息进行可视化,可以分别绘制成线性图或者对数图。

四、个人观点和理解傅里叶变换作为一种重要的数学工具,可以帮助我们从时域的角度更好地理解信号的频域特性。

在matlab中,利用fft函数可以方便快捷地实现信号的傅里叶变换,并通过绘制频率谱和相位谱来直观地观察信号的频域特性。

对于工程师和研究人员来说,掌握matlab中傅里叶变换的方法是非常重要的,可以帮助他们更好地分析和处理信号数据。

五、总结本文介绍了matlab中求傅里叶变换并绘出其频率谱和相位谱的基本原理和实现步骤,以及个人观点和理解。

通过深入解析傅里叶变换的过程和结果,在文章中多次提及了主题文字“傅里叶变换”,希望能够帮助读者更好地理解和掌握这一重要的数学工具。

傅里叶变换是一种在数学和工程领域广泛应用的技术。

它的基本原理是将一个时域信号分解为一系列不同频率的正弦和余弦函数的叠加。

MATLAB中FFT的使用方法频谱分析

MATLAB中FFT的使用方法频谱分析

MATLAB实现》万永革主编说明:以下资源来源于《数字信号处理的.调用方法一X=FFT(x);X=FFT(,xN);=IFFT(X); x=IFFT(X,N) x用MATLAB进行谱分析时注意:)函数返回值的数据结构具有对称性。

FFT(1例:N=8;n=0:N-1;xn=[4 3 2 6 7 8 9 0];Xk=fft(xn)→Xk =39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 +7.7071i 0 + 5.0000i -10.7782 - 6.2929iXk与xn的维数相同,共有8个元素。

Xk的第一个数对应于直流分量,即频率值为0。

(2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。

在IFFT时已经做了处理。

要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。

二.FFT应用举例例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。

采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;采样频率和数据点数fs=100;N=128; %.n=0:N-1;t=n/fs; %时间序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求得Fourier变换后的振幅f=n*fs/N; %频率序列subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;%对信号采样数据为1024点的处理fs=100;N=1024;n=0:N-1;t=n/fs;x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求取Fourier变换的振幅f=n*fs/N;subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;subplot(2,2,4)plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;运行结果:fs=100Hz,Nyquist频率为fs/2=50Hz。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab编程实现FFT变换及频谱分析的程序代码
内容
1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图
2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选
3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱
4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图
源程序
%*************************************************************** **********%
% FFT实践及频谱分析%
%*************************************************************** **********%
%*************************************************************** **********%
%***************1.正弦波****************%
fs=100;%设定采样频率
N=128;
n=0:N-1;
t=n/fs;
f0=10;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f0*t);
figure(1);
subplot(231);
plot(t,x);%作正弦信号的时域波形
xlabel('t');
ylabel('y');
title('正弦信号y=2*pi*10t时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
figure(1);
subplot(232);
plot(f,mag);%做频谱图
axis([0,100,0,80]);
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号y=2*pi*10t幅频谱图N=128');
grid;
%求均方根谱
sq=abs(y);
subplot(233);
plot(f,sq);
xlabel('频率(Hz)');
ylabel('均方根谱');
title('正弦信号y=2*pi*10t均方根谱');
grid;
%求功率谱
power=sq.^2;
figure(1);
subplot(234);
plot(f,power);
xlabel('频率(Hz)');
ylabel('功率谱');
title('正弦信号y=2*pi*10t功率谱');
grid;
%求对数谱
ln=log(sq);
figure(1);
subplot(235);
plot(f,ln);
xlabel('频率(Hz)');
ylabel('对数谱');
title('正弦信号y=2*pi*10t对数谱');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(1);
subplot(236);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的正弦信号波形');
grid;
%****************2.矩形波****************% fs=10;%设定采样频率
t=-5:0.1:5;
x=rectpuls(t,2);
x=x(1:99);
figure(2);
subplot(231);
plot(t(1:99),x);%作矩形波的时域波形
ylabel('y');
title('矩形波时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(2);
subplot(232);
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('矩形波幅频谱图');
grid;
%求均方根谱
sq=abs(y);
figure(2);
subplot(233);
plot(f,sq);
xlabel('频率(Hz)');
ylabel('均方根谱');
title('矩形波均方根谱');
grid;
%求功率谱
power=sq.^2;
figure(2);
subplot(234);
plot(f,power);
xlabel('频率(Hz)');
ylabel('功率谱');
title('矩形波功率谱');
grid;
%求对数谱
ln=log(sq);
figure(2);
subplot(235);
plot(f,ln);
xlabel('频率(Hz)');
ylabel('对数谱');
title('矩形波对数谱');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(2);
subplot(236);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的矩形波波形');
grid;
%****************3.白噪声****************% fs=10;%设定采样频率
t=-5:0.1:5;
x=zeros(1,100);
x(50)=100000;
figure(3);
subplot(231);
plot(t(1:100),x);%作白噪声的时域波形
xlabel('t');
ylabel('y');
title('白噪声时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(3);
subplot(232);
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('白噪声幅频谱图');
grid;
%求均方根谱
sq=abs(y);
figure(3);
subplot(233);
plot(f,sq);
xlabel('频率(Hz)');
ylabel('均方根谱');
title('白噪声均方根谱');
grid;
%求功率谱
power=sq.^2;
figure(3);
subplot(234);
plot(f,power);
xlabel('频率(Hz)');
ylabel('功率谱');
title('白噪声功率谱');
grid;
%求对数谱
ln=log(sq);
figure(3);
subplot(235);
plot(f,ln);
xlabel('频率(Hz)');
ylabel('对数谱');
title('白噪声对数谱');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(3);
subplot(236);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的白噪声波形'); grid;。

相关文档
最新文档