600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java 傅里叶变换 频谱_傅里叶变换分析频谱(FFT)

java 傅里叶变换 频谱_傅里叶变换分析频谱(FFT)

时间:2023-12-02 07:24:30

相关推荐

java 傅里叶变换 频谱_傅里叶变换分析频谱(FFT)

此前因为英语不好,看不下去help,进而懒得看demo,这才发现,原来Demo里面有如此多而有用的信息。学会了。

傅里叶变换的物理意义:

图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。

傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。

从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。

Y = fft(X)利用快速傅里叶变换返回向量X的离散傅里叶变化。如果X是个矩阵,则返回矩阵每一列的傅里叶变化。

Y = fft(X,n)

返回n维傅里叶变换。如果X的长度不足,则已0填充,如果X长度长于N,则对X进行截顶操作。

傅里叶变换最常用的是对一个加噪的时域信号进行频域分析。

语法:

datf = fft(data)

datf = fft(data,N)

datf = fft(data,N,'complex')

如果data在时域范围内,值为实数且按连续的时间间隔ts取样,则datf为频域范围内的数值,频率范围从0到尼奎斯特频率。尼奎斯特频率不取决于信号的长度(无论基数或者偶数)。经傅里叶变换后的每个值通过除以信号长度的平方根进行归一化。这是为了保护信号的能量和噪声的特性。

在默认情况下,进行变换的长度由信号长度决定。第二个参数N是强迫将傅里叶变换限制在范围N内,根据实际情况进行填充或者截顶。这样实际信号的频率值再N/2或者(N+1)/2范围内。

对于实数信号,默认datf只包括非负频率,对于复数信号来说,也包括负数频率。因此加参数complex.

fft(x)是伽罗瓦向量X的离散傅里叶变换。如果X在伽罗瓦区域为0-2^m,则X的长度为2^m-1。

m = 4;

n = 2^m-1;

x = gf(randint(n,1,2^m),m); % Random vector

y = fft(x); % Transform of x

z = ifft(y); % Inverse transform of y

一维情况下:

clear all

clc

clear

f=[30.5 31.2 33.7 34.5 35.1 30.3 34.7

33.130.5 31.5 31.233.7

34.535.130.334.733.130.5

32.2 31.8 32.6

33.6 34.8

30.532.5 32.8 31.9 30.9

32.3 34.632.6

33.8 32.7 30.5 31.133.5 32.7

33.4 34.532.3 30.8 31.6 33.5 35.6 32.2 34.5

34.5 33.8

31.9 32.5

30.1];

g=randn(size(f));

y=fft(g+f);

figure,plot(fftshift(abs(y))),title('fft with

noise');

xlabel('Frequency (Hz)');

ylabel('fft');

经傅里叶变换后y的平方显示为能量。能量对频率的图叫做周期图。

n=51;%n=lengh(X)

power = abs(y(1:floor(n))).^2;%floor计算n中每个元素离它最近的整数。

nyquist = 10;

freq = (1:n)/(n)*nyquist;

figure,plot(freq,power);

xlabel('frequency');

title('Periodogram');

下面利用能量周期对画出周期图

period=1./freq;

figure,plot(period,power);

axis([0 6 0 3e+6]);

ylabel('Power');

xlabel('Period');

通过画一个强调符号,我们可以更加精确的找到他的周期。

hold on;

index=find(power==max(power));

mainPeriodStr=num2str(period(index));

figure,plot(period(index),power(index),'r.',

'MarkerSize',25);

text(period(index)+2,power(index),['Period =

',mainPeriodStr]);

hold off;

plot函数:

plot(Y),当Y是实数时,直接在坐标中画出对应的值,当Y是复数时,对应画出实数部分及虚数部分。

plot(X1,Y1,...,Xn,Yn)画出每个Xn,Yn对。如果其中一个是个矩阵另外一个是个向量,画出向量对矩阵的每一行或者矩阵的列对向量相应的维。如果Xn是个标量而Yn是个向量,画出离散的Yn垂直对应Xn。

plot(X1,Y1,LineSpec,'PropertyName',PropertyValue)。

好好学习。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。