% 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“我没试过,不知道可不可以
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)