用matlab如何实现fft变换

用matlab如何实现fft变换,第1张

Matlab中FFT有1D和2D的,FFT得到的是信号的频谱即t-》f

clear

%编写骆遥

fs=1000

t=0:1/fs:0.6

f1=100

f2=300

x=sin(2*pi*f1*t)+sin(2*pi*f2*t)

subplot(711)

plot(x)

title('f1(100Hz)\f2(300Hz)的正弦信号,初相0')

xlabel('序列(n)')

grid

on

number=512

y=fft(x,number)

n=0:length(y)-1

f=fs*n/length(y)

subplot(713)

plot(f,abs(y))

title('f1\f2的正弦信号的FFT(512点)')

xlabel('频率Hz')

grid

on

x=x+randn(1,length(x))

subplot(715)

plot(x)

title('原f1\f2的正弦信号(含随机噪声)')

xlabel('序列(n)')

grid

on

y=fft(x,number)

n=0:length(y)-1

f=fs*n/length(y)

subplot(717)

plot(f,abs(y))

title('原f1\f2的正弦信号(含随机噪声)的FFT(512点)')

xlabel('频率Hz')

grid

on

Matlab实现FFT变换 Matlab实现FFT变换(单边谱及双边谱)­

以前对于Fourier Transform从来没有细究,不管在LabVIEW还是Matlab里都有现成的FFT(快速Fourier Transform)函数,输入相应的参数就可以了。­

在Matlab下­

y=fft(x,nfft)­

x为输入­

nfft为快速傅立叶变换的点数­

LabVIEW下,同样输入x及变换的点数,还有一个布尔控制,是否shift?­

下面的例子,先进行fourier transform,即双边谱­

程序代码­

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­

下面进行单边谱计算:­

程序代码­

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)%求幅值­

m=length(y)­

f=(0:m/2-1)'*fs/m%进行对应的频率转换­

figure(1)­

subplot(232)­

plot(f,mag(1:m/2))%做频谱图­

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(1:m/2))­

xlabel('频率(Hz)')­

ylabel('均方根谱')­

title('正弦信号y=2*pi*10t均方根谱')­

grid­

%求功率谱­

power=sq.^2­

figure(1)­

subplot(234)­

plot(f,power(1:m/2))­

xlabel('频率(Hz)')­

ylabel('功率谱')­

title('正弦信号y=2*pi*10t功率谱')­

grid­

%求对数谱­

ln=log(sq)­

figure(1)­

subplot(235)­

plot(f,ln(1:m/2))­

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­

这样用matlab做傅里叶变换:

1、我们使用matlab开发的傅立叶变换程序代码如下:

syms x

f = exp(-2*x^2) %our function

ezplot(f,[-2,2])  % plot of our function

FT = fourier(f) % Fourier transform

将其写入到我们的matlab程序模块中。

2、我们运行上面的傅立叶变换程序代码,将得出运行结果:FT = (2^(1/2)*pi^(1/2)*exp(-w^2/8))/2。

3、如果我们需要更高级的显示,我们修改上述代码即可,如使用ezplot(FT)作傅里叶变换折线图。

以上就是如何用matlab做傅里叶变换的解决步骤。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存