将信号滤波后,如何对这些信号进行时频分析?要求代码能够在MWORKS中运行,且去掉对信号进行小波变换的步骤,直接对signal_truncated信号进行后续分析
时间: 2025-02-26 17:28:00 浏览: 46
为了在MWORKS中实现对滤波后的`signal_truncated`信号进行时频分析,并且跳过小波变换的步骤,可以直接使用短时傅里叶变换(STFT)来完成这一任务。以下是修改后的代码:
```matlab
%% 步骤一:加载和截断信号
% 加载数据文件
data = load("D:/桌面/文件夹/信号课程设计/课题五 汽车噪声信号 样例/课题五 汽车噪声信号 样例/data.mat");
% 提取采样频率和信号数据
Fs = data.Fs; % 采样频率
signal = data.signal; % 信号数据
% 计算时间向量
t = (0:length(signal)-1) / Fs;
% 截断处理,截断时长为1秒
signal_truncated = signal(1:Fs);
t_truncated = (0:length(signal_truncated)-1)/Fs;
%% 步骤二:设计相应滤波器对信号进行滤波
% 定义滤波器参数
[b_low, a_low] = butter(4, 200/(Fs/2), 'low'); % 低通滤波器
[b_notch, a_notch] = iirnotch(150/(Fs/2), 0.05); % 带阻滤波器
[b_band, a_band] = butter(4, [200/(Fs/2), 1000/(Fs/2)], 'bandpass'); % 带通滤波器
[b_high, a_high] = butter(4, 1000/(Fs/2), 'high'); % 高通滤波器
[b_highpass, a_highpass] = butter(4, 1000/(Fs/2), 'high'); % 高通滤波器
[b_notch_high, a_notch_high] = iirnotch(1500/(Fs/2), 0.05); % 带阻滤波器
% 进行滤波处理
y_low_filtered = filtfilt(b_low, a_low, signal_truncated); % 低频段低通滤波
y_bandstop_low_filtered = filtfilt(b_notch, a_notch, signal_truncated); % 低频段带阻滤波
y_bandpass_filtered = filtfilt(b_band, a_band, signal_truncated); % 中频段带通滤波
y_high_filtered = filtfilt(b_high, a_high, signal_truncated); % 中频段高通滤波
y_high_high_filtered = filtfilt(b_highpass, a_highpass, signal_truncated); % 高频段高通滤波
y_bandstop_high_filtered = filtfilt(b_notch_high, a_notch_high, signal_truncated); % 高频段带阻滤波
%% 步骤三:对滤波后的信号进行时频分析
% 设置短时傅里叶变换参数
window = hamming(256);
noverlap = 128; % 重叠量
nfft = 512; % FFT长度
% 对每个滤波后的信号进行短时傅里叶变换
[S1, f, t] = spectrogram(y_low_filtered, window, noverlap, nfft, Fs);
[S2, f, t] = spectrogram(y_bandstop_low_filtered, window, noverlap, nfft, Fs);
[S3, f, t] = spectrogram(y_bandpass_filtered, window, noverlap, nfft, Fs);
[S4, f, t] = spectrogram(y_high_filtered, window, noverlap, nfft, Fs);
[S5, f, t] = spectrogram(y_high_high_filtered, window, noverlap, nfft, Fs);
[S6, f, t] = spectrogram(y_bandstop_high_filtered, window, noverlap, nfft, Fs);
% 绘制短时傅里叶变换图
%%% 低频段低通滤波后 %%%
figure;
hold on;
imagesc(t, f, 20*log10(abs(S1)));
axis xy;
title('短时傅里叶变换 低频段低通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
colorbar;
hold off;
%%% 低频段带阻滤波后 %%%
figure;
hold on;
imagesc(t, f, 20*log10(abs(S2)));
axis xy;
title('短时傅里叶变换 低频段带阻滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
colorbar;
hold off;
%%% 中频段带通滤波后 %%%
figure;
hold on;
imagesc(t, f, 20*log10(abs(S3)));
axis xy;
title('短时傅里叶变换 中频段带通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
colorbar;
hold off;
%%% 中频段高通滤波后 %%%
figure;
hold on;
imagesc(t, f, 20*log10(abs(S4)));
axis xy;
title('短时傅里叶变换 中频段高通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
colorbar;
hold off;
%%% 高频段高通滤波后 %%%
figure;
hold on;
imagesc(t, f, 20*log10(abs(S5)));
axis xy;
title('短时傅里叶变换 高频段高通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
colorbar;
hold off;
%%% 高频段带阻滤波后 %%%
figure;
hold on;
imagesc(t, f, 20*log10(abs(S6)));
axis xy;
title('短时傅里叶变换 高频段带阻滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
colorbar;
hold off;
% 三维展示
%%% 低频段低通滤波后 %%%
figure;
hold on;
surf(t, f, abs(S1));
title('短时傅里叶变换时频图 低频段低通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('幅度');
view(-37.5, 30); % 默认视图
colorbar;
hold off;
%%% 低频段带阻滤波后 %%%
figure;
hold on;
surf(t, f, abs(S2));
title('短时傅里叶变换时频图 低频段带阻滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('幅度');
view(-37.5, 30); % 默认视图
colorbar;
hold off;
%%% 中频段带通滤波后 %%%
figure;
hold on;
surf(t, f, abs(S3));
title('短时傅里叶变换时频图 中频段带通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('幅度');
view(-37.5, 30); % 默认视图
colorbar;
hold off;
%%% 中频段高通滤波后 %%%
figure;
hold on;
surf(t, f, abs(S4));
title('短时傅里叶变换时频图 中频段高通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('幅度');
view(-37.5, 30); % 默认视图
colorbar;
hold off;
%%% 高频段高通滤波后 %%%
figure;
hold on;
surf(t, f, abs(S5));
title('短时傅里叶变换时频图 高频段高通滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('幅度');
view(-37.5, 30); % 默认视图
colorbar;
hold off;
%%% 高频段带阻滤波后 %%%
figure;
hold on;
surf(t, f, abs(S6));
title('短时傅里叶变换时频图 高频段带阻滤波后');
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('幅度');
view(-37.5, 30); % 默认视图
colorbar;
hold off;
```
### 说明:
1. **信号加载和截断**:从数据文件中加载信号并截取1秒的数据。
2. **滤波器设计**:定义了低通、带阻、带通和高通滤波器。
3. **滤波处理**:对截取的信号应用不同的滤波器。
4. **时频分析**:使用短时傅里叶变换(STFT)对每个滤波后的信号进行时频分析,并绘制二维和三维时频图。
这样,你可以直接在MWORKS中运行这段代码,对滤波后的信号进行详细的时频分析。
阅读全文
相关推荐


















