matlab实现离散傅⾥叶变换及低通滤波如图传感器⽆滤波状态下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);          % 复数的幅值(模)
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=angle(output_half);
output_halfangle=rad2deg(output_halfangle);  % 将弧度转换为⾓度,⽅便观察
matlab求傅里叶变换
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,数据抖动范围有所缩⼩。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。