如
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做傅里叶变换的解决步骤。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)