用matlabl直接滤波,输出大于1Hz频带RMS

该代码片段展示了如何在MATLAB中对时域数据进行快速傅里叶变换(FFT)以获取频域表示,计算RMS值,然后通过逆FFT(IFFT)将频域信号转换回时域。同时,它还涉及到频谱的截断以及计算信号的平均能量。
摘要由CSDN通过智能技术生成
% 假设您已经有了时域数据,存储在名为"signal"的向量中
data=load('C:\Users\jiema\Desktop\ys2.txt');
% data=load('C:\Users\jiema\Downloads\运输2.txt');

x=data(:,1);
y=data(:,2);%读取Y轴数据
signal =y

rms1=rms(y)
% 假设您已经有了时域数据,存储在名为"signal"的向量中
% 假设您已有一个频域信号的幅度谱数据
f = fft(signal);
frequency_spectrum = abs(f);
pha = angle(f);

time_domain_signal2 = ifft(frequency_spectrum);
rms2=rms(time_domain_signal2)

%将1hz以下幅值改为0  1Hz/800Fs*点数,傅里叶变换对称,所以尾巴也变成0
frequency_spectrum(1:1021) = 0
frequency_spectrum(815774-1021:815774) = 0

% 将频域信号转换为时域信号
% f2 = frequency_spectrum.*exp(1j*pha);    % 根据幅值谱和相位谱重建频域信号
% time_domain_signal = ifft(f2);
time_domain_signal = ifft(frequency_spectrum);

rms3=rms(time_domain_signal)

% 计算时域信号的平方
squared_signal = abs(time_domain_signal).^2;

% 计算信号的平均能量
average_energy = mean(squared_signal);

% 计算RMS值
rms_value = sqrt(average_energy);

disp(['RMS:', num2str(rms_value)]);
disp(['RMS1 原数据:', num2str(rms1)]);
disp(['RMS2 全频:', num2str(rms2)]);
disp(['RMS >1Hz频段值:', num2str(rms3)]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪汪星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值