求助,为啥我生成的图像不是在1000hz处有一个波峰?
matlab吧
全部回复
仅看楼主
level 3
%基于fft的welch法画出PSD
clear,clc,close all;
mic_pos=[0.16,0.02,0.00];
source_pos=[0,0,5];
c0=340;
f=1000;
fs=51200;
T=1;
A=1;
t=0:1/fs:(T-1/fs);
omega=2*pi*f;
r=norm(mic_pos-source_pos);
mic=(A/r)*cos(omega*(t-r/c0));
% Welch参数
seglength=2048; % 每段长度
noverlap=1024; %重叠点数
window=hann(seglength); %窗
nfft=2048; %每段做2048点fft
% 分段
part=floor((length(mic)-noverlap)/(seglength-noverlap)); %长信号分成的段数49
PSDsum=zeros(nfft, 1); %创建空向量
for i = 1:part; %1到49段
START = (i-1)*(seglength-noverlap) + 1;
END = START + seglength-1; %每段1到2048,1025到3072......
segment = mic(START:END).*window; %麦克风信号每段加窗
Y = fft(segment, nfft); %对加窗后的信号段做 2048 点 FFT
Y = Y(1:nfft/2+1); %取单边
PSDseg = (abs(Y).^2)/(fs * sum(window.^2)); %计算每段的PSD,归一化
PSDsum = PSDsum + PSDseg; %累加起来
end
PSDwelch = PSDsum/part; %每段PSD取平均
f_axis = fs*(0:nfft/2)/nfft; %划分X轴
figure;
plot(f_axis, PSDwelch);
xlabel('f(Hz)');
ylabel('PSD');
xlim([0,3000]);
grid on;
2026年09月02日 02点09分 1
吧务
level 12
我没太详细看哈 ,我简单感觉是你这个单边功率谱你没补偿 你看下试试呢
2026年09月02日 13点09分 2
加窗忘了转置了
2026年09月03日 00点09分
1