视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
FFT的matlab程序
2025-09-26 22:06:56 责编:小OO
文档
最近研究FFT,因为我不是高信号处理的,所以很多问题搞不懂,现在要用,就研究总结了一下,现在发上来,请不要笑话,

采样得到的数字信号,就可以做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结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。

源程序

%*************************************************************************%

%                            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);

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;

%****************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);%作矩形波的时域波形

xlabel('t');

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;下载本文

显示全文
专题