计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1173|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[程序/脚本开发] 求助计算功率谱密度以及绘制功率谱密度图

[复制链接 Copy URL]

4

帖子

0

威望

75

eV
积分
79

Level 2 能力者

以下程序是我用matlab写的求时域信号的功率谱密度并绘制功率谱图一段程序,最终的功率谱密度图在3500-4000之间的峰的基线太高,有什么办法能使其基线像低频峰那样吗
clear;clc;format long;
% 读取信号数据
x = load('mode_zero_P_mode33.txt');
time=0:0.5:10000;

fs=2000; %采样频率和     MD步长0.5 fs
N=65536;  %fft数据点数
c= 2.9979e10; %光速

%%%%%计算功率谱密度   %%%%%%%
window=hamming(10240);%海明窗
noverlap=4096;%数据无重叠
range='onesided'; %频率间隔为[0Fs/2],只计算一半的频率


[Pxx3,f]=pwelch(x,window,noverlap,N,fs,range);
plot_Pxx3=10*log10(Pxx3);

freq=1e12*(f/c);  %频率序列 转化成波数 cm-1

% 绘制原始功率谱密度图
figure(11)
subplot(3,1,1)
plot(freq,plot_Pxx3);
title('原始信号的功率谱密度图');
xlabel('Frequency (1/cm)');
ylabel('Power/Frequency (dB/Hz)');
xlim([0 4000])
grid on;

% 设计低通滤波器
fc = 100; % 截止频率
order = 8; % 滤波器阶数
b = fir1(order, fc/(fs/2), 'low'); % 设计FIR滤波器系数

% 应用滤波器
filtered_Pxx = filter(b, 1, Pxx3);
plot_Pxx3_filter=10*log10(filtered_Pxx);

% 绘制滤波后的功率谱密度图
subplot(3,1,2)
plot(freq,plot_Pxx3_filter);
title('滤波后信号的功率谱密度图(平滑处理前)');
xlabel('Frequency (1/cm)');
ylabel('Power/Frequency (dB/Hz)');
xlim([0 4000])
% ylim([0 1.2])
grid on;

% 使用Savitzky-Golay滤波器平滑功率谱密度
pxx_smooth = sgolayfilt(plot_Pxx3_filter, 5, 21);

% 绘制平滑后的功率谱密度图
subplot(3,1,3)
plot(freq,pxx_smooth);
title('滤波后信号的功率谱密度图(平滑处理后)');
xlabel('Frequency (1/cm)');
ylabel('Power/Frequency (dB/Hz)');
xlim([0 4000])
% ylim([0 1.2])
grid on;


202407232148428184..png (260.94 KB, 下载次数 Times of downloads: 17)

202407232148428184..png

mode_zero_P_mode33.txt

137.25 KB, 下载次数 Times of downloads: 0

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-21 03:28 , Processed in 0.196797 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list