如何用matlab实现对离散数据的快速傅里叶变换

如何用matlab实现对离散数据的快速傅里叶变换,第1张

1、双击matlab软件图标,打开matlab软件,可以看到matlab软件的界面。

2、在命令行窗口中输入:x=0:2:22y=2*exp(x).*sin(x)创建了12个原始数据点。

3、在命令行窗口中输入:xi=0:0.1:22创建要进行插值的数据的横坐标。

4、在命令行窗口中输入:yi=spline(x,y,xi)使用函数spline(x,y,xi)可以获得对原始数据的三次样条插值的y轴坐标。

5、在命令行窗口中输入:plot(x,y,'o',xi,yi)在图像中绘制原始数据点和三次样条插值的数据点图示。

6、在命令行窗口中输入:title('三次样条插值')xlabel('x')ylabel('y')给绘制的图示添加标题和坐标轴的标签。

7、最后查看绘制的原始数据点图和三次样条插值图示,注意标题、横坐标、纵坐标等。

下例 是将振幅为1的5Hz正弦波和振幅为0.5的10Hz正弦波相加之后进行傅里叶分析。

运行结果如下所示:

matlab中的快速傅里叶有两种调用形式:

对应的逆变换有两种,分别为 x=ifft(y) 和 x=ifft(y.N) 。

一般而言,N点fft的结果y,在 处对应的频率为最高采样率的一半,y的后一半与前一半对称。

下例 是将振幅为1的5Hz正弦波和振幅为0.5的10Hz正弦波相加之后进行傅里叶分析。

结果图省略。

下例是将振幅为1的5Hz正弦波和振幅为0.5的10Hz正弦波相加之后,滤除8Hz以上的信号。

结果如下图

以巴特沃斯低通滤波器为例,说明调用方法。

说明:

其他说明:

以巴特沃斯低通滤波器为例,说明调用方法。

说明:

其他说明:

在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。

fftshift的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来。

假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:

p=0,1…M-1 q=0,1…N-1 (1)

或 p=0,1…M-1 q=0,1…N-1 (2)

离散傅立叶反变换的定义如下:

m=0,1…M-1 n=0,1…N-1(3)

F(p,q)称为f(m,n)的离散傅立叶变换系数。这个式子表明,函数f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。

2、MATLAB提供的快速傅立叶变换函数

(1)fft2

fft2函数用于计算二维快速傅立叶变换,其语法格式为:

B = fft2(I)

B = fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。

例如,计算图象的二维傅立叶变换,并显示其幅值的结果,如图所示,其命令格式如下

load imdemos saturn2

imshow(saturn2)

B = fftshift(fft2(saturn2))

imshow(log(abs(B)),[],'notruesize')

(2)fftshift

MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:

B = fftshift(I)

对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。

(2)ifft2

ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:

B = ifft2(I)

B = ifft2(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。

如果信号是二维的,用上面的函数即可!直接调用。

如果信号是一维的,给你下面的例子,你应该能明白!

clear

fs=100N=128 %采样频率和数据点数

n=0:N-1t=n/fs %时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)%信号

y=fft(x,N) %对信号进行快速Fourier变换,逆变换函数为ifft

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=100N=1024n=0:N-1t=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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11674521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存