如何用matlab实现fft

如何用matlab实现fft,第1张

%*************************************************************************%

% FFT实践及频谱分析 %

%*************************************************************************%

%***************1.正弦波****************%

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

什么样的信号,频率范围是多少?是要用FFT滤波,还是用其他的方式?补充一下,如果是用FFT滤波的话:

对于给定的序列x(n),和采样频率fs等信息,先求其FFT频谱

y=abs(fft(x))

plot((1:length(x))*fs/length(x),y)title('信号的频谱')xlabel('频率')

然后你大概确定一下,你需要滤除的频带,上面的图形中可以看出噪声的频带。

比如说,你想要滤除从f1~f2的噪声,最简单的方法就是在频域将这一段置零,

y(200:300)=0;

%这里我假设的是200到300这一段就是频率f1~f2的。这就是频率域滤波了,然后再反变换回去就行了

x=ifft(y)

%

信号滤波后重建

具体的如果设置参数,就要看你的信号的特征了。

matlab中一般把数据存为.mat文件,例如存fft的数据的话可以这样

a=fft(b)

save fft.mat 'a'

fft.mat中的fft是文件名,可以符合命名格式的前提任意取,而‘.mat’是文件格式,后面的'a'就是要存的变量,这样的话就会在当前路径下看到fft.mat这个文件了

如果要调用fft.mat里面的数据的话就使用load命令,如:

load fft.mat

这样就相当于把上面存好的数据调出来。至于你说的“输出数据.txt“我没试过,不知道可不可以


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存