短时傅里叶变换计算一下


目录

1.短时傅里叶变换

2.小波变换


1.短时傅里叶变换

clear
clc
close all
fs=100;
frequency=0.5
t=1/fs:1/fs:10*60;
signal=0.2*sin(2*pi*frequency*t)+0.2*cos(2*pi*2*frequency*t);

figure(1)
plot(t,signal)

figure(2)
pwelch(signal,1024*5,[],[],100)
xlim([0.2 2])

figure(3)
window=128*32
[ss,ff,tt]=spectrogram(signal,window,[],0.1:0.01:2,100);
view(-10,45)
view(2)


figure(5)
waterfall(tt,ff,10*log10(abs(ss)))
view(-40,45)
view(2)

clear

clc

close all

% 生成加速度时程信号

fs = 1000; % 采样频率为 1000 Hz

t = 0:1/fs:10; % 时间范围为 0 到 10 秒

f1 = 2; % 前期振动频率为 2 Hz

f2 = 3; % 后期振动频率为 3 Hz

% 前期振动信号

a1 = sin(2*pi*f1*t.^2/50);

% 后期振动信号,频率逐渐变化

a2 = sin(0.7*2*pi*f2*t.*(1 + (t - t(1))/(t(end) - t(1))));

% 合并前后两部分信号

a = [flip(a2),a2];

% 绘制加速度时程信号

figure;

plot([t,t+10], a);

xlabel('Time (s)');

ylabel('Acceleration');

title('Acceleration Time History');

% 进行短时傅里叶变换

window_size = 0.5; % 窗口大小为 0.5 秒

noverlap = 0.25; % 重叠比例为 0.25

nfft = 2048*2; % FFT 长度为 2048,增加了频率分辨率

% 计算短时傅里叶变换

[S, F, T] = spectrogram(a, window_size*fs, noverlap*fs, nfft, fs);

% 绘制短时傅里叶变换图

figure;

surf(T, F, abs(S), 'EdgeColor', 'none');

view(2); % 设置视角为俯视图

xlabel('Time (s)');

ylabel('Frequency (Hz)');

title('Short-time Fourier Transform of Acceleration Signal (0-10 Hz)');

colorbar; % 添加颜色条

% 优化颜色过渡

colormap jet; % 使用 'jet' 颜色映射

ylim([0 10])

2.小波变换

clc; clear;

% 设定参数
Fs = 2000; % 采样频率
t = 0:1/Fs:40-1/Fs; % 时间向量
X = 20*sin(2*pi*1*t); % 生成信号

% 绘制原始信号
figure;
plot(t, X);
title('原始信号');
xlabel('时间 (s)');
ylabel('幅值');

% 计算小波变换
[wt, f] = cwt(X, 'amor', Fs);

% 绘制云图
figure;
surface(t, f, abs(wt));
shading interp;
ylim([0 10])
title('小波变换云图');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
% 修改颜色带
colormap('jet'); % 这里使用了 'jet' 颜色映射,你可以根据需要选择其他颜色映射
colorbar;

3.小波变换2

%增加分辨率

% clear

clc

close all

addpath('E:\0.函数')

fs_acc=200;

x1=(1/fs_acc:1/fs_acc:60)';

x2=(1/fs_acc:1/fs_acc:60)'+60';

y1=sin(2*pi*1*x1);

y2=sin(2*pi*1.2*x2);

y=[y1;y2];

% 执行连续小波变换

numVoices = 16; % 增加小波变换的频率分辨率

[cfs, frequencies] = cwt(y, 'amor', fs_acc, 'VoicesPerOctave', numVoices);

time=(1/fs_acc:1/fs_acc:length(y)/fs_acc)';

% 绘制云图

figure(2);

surface(time, frequencies, abs(cfs));

shading interp;

axis tight;

xlabel('时间 (s)');

ylabel('频率 (Hz)');

ylim([0 2])

title('连续小波变换的云图');

colorbar;

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值