|
|
以下程序是我用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;
|
|