如图传感器无滤波状态下FZ数据为下列
导入matlab使用工具箱分析图如下:
将数据导入matlab代码
clear;clc;close all
load('data_nofliter')
Fs=100; % 采集频率
T=1/Fs; % 采集时间间隔
%信号长度最好为偶数
N=length(data_z); % 采集信号的长度
y = data_z; %将数据放入y向量
t=(0:1:N-1)*T; % 定义整个采集时间点
t=t'; % 转置成列向量
% 绘制时域信号
figure
plot(t,y)
xlabel('时间')
ylabel('信号值')
title('时域信号')
% fft变换
Y=fft(y); % Y为fft变换结果,复数向量
Y_half=Y(1:N/2+1); % 只看变换结果的一半即可
A=abs(Y_half); % 复数的幅值(模)
f=(0:1:N/2)*Fs/N; % 生成频率范围
f=f'; % 转置成列向量
% 幅值修正
A_adj=zeros(N/2+1,1);
A_adj(1)=A(1)/N; % 频率为0的位置
A_adj(end)=A(end)/N; % 频率为Fs/2的位置
A_adj(2:end-1)=2*A(2:end-1)/N;
% 绘制频率幅值图
figure
subplot(3,2,1)
plot(f,A_adj)
xlabel('频率 (Hz)')
ylabel('幅值 (修正后)')
title('FFT变换幅值图')
grid on
% 绘制频谱相位图
subplot(3,2,2)
phase_angle=angle(Y_half); % angle函数的返回结果为弧度
phase_angle=rad2deg(phase_angle);
plot(f,phase_angle)
xlabel('频率 (Hz)')
ylabel('相位角 (degree)')
title('FFT变换相位图')
grid on
%%计算理想低通滤波器的频率响应
fc= 15;
H = zeros(length(f),1);
H(f<fc)=1;
HA = abs(H);
Hangle = angle(H);
Hangle = rad2deg(Hangle); %将弧度转换为角度
subplot(3,2,3)
plot(f,HA,'m')
xlabel('频率(Hz)')
ylabel('H的幅值')
grid on
subplot(3,2,4)
plot(f,Hangle,'m')
xlabel('频率(Hz)')
ylabel('H的相位角')
grid on
%%计算输出信号的傅里叶变换
output_half = Y_half.*H;
output_halfA=abs(output_half );
% 幅值修正
output_halfA_adj=zeros(N/2+1,1);
output_halfA_adj(1)=output_halfA(1)/N; % 频率为0的位置
output_halfA_adj(end)=output_halfA(end)/N; % 频率为Fs/2的位置
output_halfA_adj(2:end-1)=2*output_halfA(2:end-1)/N;
subplot(3,2,5)
plot(f,output_halfA_adj,'r')
xlabel('频率 (Hz)')
ylabel('Y的幅值')
grid on
output_halfangle=angle(output_half);
output_halfangle=rad2deg(output_halfangle); % 将弧度转换为角度,方便观察
subplot(3,2,6)
plot(f,output_halfangle,'r')
xlabel('频率 (Hz)')
ylabel('Y的相位角 (degree)')
grid on
%% 输出信号的半谱补全成全谱
second_half=output_half(2:end-1);
second_half=conj(second_half);
second_half=flip(second_half);
output=[output_half;second_half];
%% 对output做傅里叶反变换,得到时域输出信号y(t)
OUTPUT=ifft(output);
figure
plot(t,OUTPUT,'r')
xlabel('时间 /s')
ylabel('信号值')
title('时域输出信号 y(t)')
grid on
运行得到下图
低通滤波的频率为15HZ,数据抖动范围有所缩小。