【小波或者fft频谱】画出小波和fft频谱

可以探测异常信号的频谱

close all
clear;
clc;
%%
   dt = 0.001;
   t = 0:dt:1-dt;
   x = cos(2*pi*150*t).*(t>=0.1 & t<0.3)+sin(2*pi*200*t).*(t>0.7);
   y = x+0.05*randn(size(t));
   y([200 800]) = y([200 800])+2;
   a0 = 2^(1/32);
   scales = 2*a0.^(0:6*32);
   [cfs,frequencies] = cwt(y,scales,'cmor1-1.5',dt);
   plot(t,y)
   
   figure
   pcolor(t,frequencies,abs(cfs).^2);grid on;
   colormap jet;
   shading interp;
   colorbar

fft频谱

%fft频谱
x = y1;
%计算信号的傅里叶变换。
N = length(x);
Y = fft(x);
%计算双侧频谱 P2。然后基于 P2 和偶数信号长度 L 计算单侧频谱 P1。
P2 = abs(Y/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);

%定义频域 f 并绘制单侧幅值频谱 P1,与预期相符,由于增加了噪声,幅值并不精确等于 0.7 和 1,一般情况下,较长的信号会产生更好的频率近似值。
% f = fs*(0:(N/2))/N;
h_fft = figure
plot(P1) % f,
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

Example.m

%% 生成信号
clc;
clear all;
close all;
fs=500;
t=0:1/fs:1.5;
f1=40; f2=15;
x=sin(2*pi*t*f1)+sin(2*pi*t*f2); %input signal
plot(t,x);
xlabel('t(s)')
ylabel('Amplitude');

%% fft频谱
%计算信号的傅里叶变换。
N = length(x);
Y = fft(x);
%计算双侧频谱 P2。然后基于 P2 和偶数信号长度 L 计算单侧频谱 P1。
P2 = abs(Y/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);

%定义频域 f 并绘制单侧幅值频谱 P1,与预期相符,由于增加了噪声,幅值并不精确等于 0.7 和 1,一般情况下,较长的信号会产生更好的频率近似值。
f = fs*(0:(N/2))/N;
h_fft = figure;
plot(f,P1) 
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

%% 小波cwt频谱
a0 = 2^(1/32);
scales = 2*a0.^(0:6*32);
[cfs,frequencies] = cwt(x,scales,'cmor3-1.5',1/fs);
h_cwt = figure;
pcolor(t,frequencies,abs(cfs).^2);
title('cwt')
xlabel('t(s)')
ylabel('Amplitude')
grid on;
colormap jet;
shading interp;
colorbar

【小波或者fft频谱】画出小波和fft频谱_第1张图片【小波或者fft频谱】画出小波和fft频谱_第2张图片【小波或者fft频谱】画出小波和fft频谱_第3张图片

你可能感兴趣的:(小波分析)