例子如下, 你根据你的需要导入你自己的信号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中如何实现矩形函数的傅里叶变换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)