fft变换可以求取信号的频率点,有利于台架实验分析数据中的噪声以及滤波,对台架实验中的位置环控制具有较好的作用。matlab中含有fft函数可以直接求取频率点。但是在程序的理解中需要注意的是:
1、采样频率:就是每秒钟采集多少个数据点;
2、分辨率:采样频率/(一共采集了多少个数据点);
3、对应频谱图的横坐标(每个点的频率):(0:N-1)*分辨率
4、纵坐标为fft返回值的2倍
5、最后画图采用一半坐标显示就可以
对应的matlab程序为:
clear all;
clc;
T = 5;
omega = 2*pi/T;
i = 1;
for t=0.1:0.1:10
y(i) = 3*sin(omega*t); %注意频率为0.2
% y(i) = 3*sin(omega*t) + 5*cos(2*pi*t+3);
sample(i) = t;
i = i+1;
end;
plot(sample,y);
N = length(sample);
matlab_fft = figure;
yfreq = fft(y)/N ;
% yfreq = fftshift(y)/N ;
f = (0:N-1)*10/N;
yfreq =yfreq*2;
plot(f(1:N/2),abs(yfreq(1:N/2)));
对应生成的matlab图像为:
对应的频率图像为:
滤波器设计
time = 1:1000;
fre1 = 500;
fre2 = 2000;
fs = 6000; % sample frequency
singal1 = sin(2*pi*fre1*time/fs);
singal2 = 0.3*sin(2*pi*fre2*time/fs);
singal = singal1+ singal2;
figure(1)
subplot(311)
plot(singal1);
subplot(312)
plot(singal2);
subplot(313)
plot(singal);
f = (1:N)*6000/N;
% % show the frequency plot
fft_result1 = abs(fft(singal1));
fft_result2 =abs(fft(singal2));
fft_result = abs(fft(singal));
N =1000;
figure(2)
subplot(311)
plot(f(1:N/2), fft_result1(1:N/2)/N*2);
subplot(312)
plot(f(1:N/2), fft_result2(1:N/2)/N*2);
subplot(313)
plot(f(1:N/2), fft_result(1:N/2)/N*2);
% % filter design
filter_lowpass = fir1(128,1000/3000); %1000/3000是截止频率
figure(3)
freqz(filter_lowpass)
% % filter the plot
signal_filter = filter(filter_lowpass, 1, singal);
figure(4)
plot(signal_filter);
after_filter = abs(fft(signal_filter));
figure(5)
plot(f(1:N/2), after_filter(1:N/2)/N*2);
原始信号的时域图
原始信号的频谱图
低通滤波器
滤波后的波形图
滤波后的频谱图