MATLAB傅里叶变换

MATLAB傅里叶变换,第1张

自己造了一个频率20 50 的信号, 并对其做傅立叶变换

例子如下, 你根据你的需要导入你自己的信号x 就行了

L = 1000;

t = linspace(0,1,L);

dt = t(2)-t(1);

Fs = 1/dt;

x = 07sin(2pi50t)+sin(2pi20t);

y = fft(x);

P2 = abs(y/L);

P1 = P2(1:L/2+1);

P1(2:end-1) = 2P1(2:end-1);

f = Fs(0:(L/2))/L;

plot(f,P1)

title('Single-Sided Amplitude Spectrum')

xlabel('f (Hz)')

ylabel('|P1(f)|')

I0=zeros(256,256);

I0(120:130,100:156)=1;

subplot(2,3,1),imshow(I0),title('原始图像')

subplot(2,2,2),imshow(log(1+abs(fft2(I0)))),title('直接进行fft2')

I1=I0;

F1=fft(I1,[],1);%按列进行傅里叶变换

subplot(2,2,3),imshow(log(1+abs(F1))),title('先按列进行')

F2=fft(F1,[],2);%按行进行傅里叶变换

subplot(2,2,4),imshow(log(1+abs(F2))),title('后按行进行')

首先产生矩形脉冲信号,可以使用rectpuls(t,w)函数产生一个幅值为1,以t=0为中心对称,半宽度为w/2的矩形脉冲

然后傅里叶变换是用fft()命令的。如果要得到频谱的话还要再处理一下,具体就不多说了,给个程序样例:

t=-20:20;

w=10;

y=rectpuls(t,w);%矩形脉冲信号

yy=fft(y);

n=size(y);

n=n(2);

fy=abs(fft(y))/n2;%频谱

subplot(2,1,1)

plot(y);

subplot(2,1,2)

plot(fy);

挺粗糙的,最后得到的两个图分别是方波脉冲和频谱图。。

顺带一提:

1)三角波是tripuls(t,w);

2)矩形波也可以通过ones()和zeros生成一个信号矩阵

3)具体的函数使用和参数规则请参阅help“command”

4)其实这些用simulink做,里面都有现成的模块。这样倒是很简洁,但也不容易看懂

1有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征(频率,幅值,初相位);

2FFT可以将一个信号的频谱提取出来,进行频谱分析,为后续滤波准备;

3通过对一个系统的输入信号和输出信号进行快速傅里叶变换后,两者进行对比,对系统可以有一个初步认识。

假设采样频率Fs,信号频率F,信号长度L,采样点数N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。

具体跟原始信号的幅度有什么关系呢?

1

假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍,而第一个点就是直流分量(即0Hz),它的模值是直流分量的N倍;

2

每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量,它的相位是该频率的初相位,matlab以cos为底的,若信号时正弦形式sin(t),则变成cos(t-pi/2)即可。

采样频率Fs,被N-1个点平均分成N等份,每个点的频率依次增加。为了方便进行FFT运算,通常N取大于信号长度L的2的整数次方。

例如某点n所表示的频率为:Fn=(n-1)Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N。如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。

1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz。如果采样2秒时间的信号,则N为2048,并做FFT,则结果可以分析到05Hz。

如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。

假设FFT之后某点n用复数a+bi表示,该复数的模就是An=sqrt(aa+bb),相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)cos(2piFnt+Pn),即2An/Ncos(2piFnt+Pn);对于n=1点的信号,是直流分量,幅度即为A1/N。

由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。

如何用matlab对函数求傅立叶变换

用MATLAB 实现傅里叶变换:

用户任意输入一个函数,然后,输出函数的傅里叶变换函数,然后输出振幅频率 。

x=sin(2pit); %任意输入一个函数。

y=fft(x); %傅里叶变换函数。

plot(abs(y)); %振幅频率。

单纯的exp(-x)没有FT,要乘以Heaviside函数

syms t w;

f=heaviside(t)exp(-t);

F=fourier(f);

subplot(211);

ezplot(f,[0,10]);

grid on;

subplot(212);

ezplot(abs(F),[-pi,pi]);

grid on;

以上就是关于MATLAB傅里叶变换全部的内容,包括:MATLAB傅里叶变换、matlab对图像分别进行一维傅里叶变换(先进行行变换,再进行列变换),请问程序如何编写、MATLAB中如何实现矩形函数的傅里叶变换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10631272.html

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

发表评论

登录后才能评论

评论列表(0条)

保存