快速傅里叶变换具体理论及其讲解可以参考:https://blog.csdn.net/deng_sai/article/details/52473503
直接上代码,通俗易懂
function [y, f] = Spectrum_Calc(data,Fs)
%data为时序序列,Fs为采样频率
%信号长度
l=size(data,1);
%N取信号长度的2的整次方
N=2^(nextpow2(l));
y=abs(fft(data,N)/N*2);
f=Fs/N*(0:1:N-1);
%由于频谱计算是对称的,所以只需要取一半绘图即可
y=y(1:N/2);
f=f(1:N/2);
end
常用的滤波方法
data为时序列
%移动平均滤波(常用的平滑滤波)
windowSize = 5; %窗口长度
%b,a为计算参数
b = (1/windowSize)*ones(1,windowSize);
a = 1;
data1 = filter(b,a,data);
%巴特沃斯低通滤波
wn = 2*end_hz/Fs; %end_hz为截止频率
[b,a] = butter(n,Wc);
%n表示滤波器的阶数,需要根据需要选择合适的整数,该方法是留下小于截止频率的信号,如果是想要留下两个频率之间的信号则用 [b,a] = butter(n,[wn1,wn2])
data1 = filter(b,a,data);
%中值滤波
data1 = medfilt1(data,n);%n表示阶数
%小波滤波
[data1,cdata1,ldata1] = wden(data,tptr,sorh,scal,n,'wname');
小波函数通解
[xd,cxd,lxd]=wden(x,tptr,sorh,scal,n,‘wname’);
返回经过小波消噪处理后的信号xd及其小波分解结构。wname’);返回经过小波消噪处理后的信号xd及其小波分解结构。
输入参数tptr为阈值选择标准:
thr1=thselect(x,‘rigrsure’);%stein无偏估计;
thr2=thselect(x,‘heursure’);%启发式阈值;
thr3=thselect(x,‘sqtwolog’);%固定式阈值;
thr4=thselect(x,‘minimaxi’);%极大极小值阈值;
输出参数sorh为函数选择阈值使用方式:
Sorh=s,为软阈值;
Sorh=h,为硬阈值;
输入参数scal规定了阈值处理随噪声水平的变化:
Scal=one,不随噪声水平变化。
Scal=sln,根据第一层小波分解的噪声水平估计进行调整。
Scal=mln,根据每一层小波分解的噪声水平估计进行调整。
n为小波分解的层数;
wname选择不同类型的小波
`