计算窗口修正系数

问题描述 投票:0回答:1

在信号上使用窗口时,我想使用校正因子来校正窗口的能量或幅度。

我编写了一些其他代码来计算能量和幅度因子和比率。请看这里:

% signal
dt = 0.001;
fs = 1/dt;
x = 0:dt:10;
N = length(x);
y = 3*sin(2*pi*x*52) + 5.2*sin(2*pi*x*53) + 14*randn(size(x));

figure(1)
subplot(3,1,1)
plot(x,y)
title('signal')

rms_y = rms(y);

% window
w = hanning(N);   w = w';

rms_w = rms(w);
mean_w = mean(w);

ECF = 1/rms_w; % Energy correctionfactor
ACF = 1/mean_w; % Amplitude correctionfactor

% windowed signal
ws = (w.*y);

rms_ws = rms(ws); 

% fft signal
Z = 100*N; % add zeros
f = fs*(0:Z/2)/Z;

Yfft = fft(y,Z);
Y2 = abs(Yfft)/N;
Y = Y2(1:Z/2+1);
Y(2:end-1) = 2*Y(2:end-1);

figure(1)
subplot(3,1,2)
plot(f,Y)
title('signal frequency spectrum')
xlim([48 57]);

rms_Y = rms(Y);

% fft windowed signal
Yfftws = fft(ws,Z);
Y6 = abs(Yfftws)/N;
Y6 = ECF*Y6;                 % apply correctionfactor
Y5 = Y6(1:Z/2+1);
Y5(2:end-1) = 2*Y5(2:end-1);

figure(1)
subplot(3,1,3)
plot(f,Y5)
title('windowed frequency spectrum with correction factor')
xlim([48 57]);

rms_Yws = rms(Y5);

amplitude_Y = max(Y);
amplitude_Y_windowed = max(Y5);

ratio_amplitude = amplitude_Y/amplitude_Y_windowed
ratio_energy = rms_Y/rms_Yws

如果我在%应用校正因子处将ECF更改为ACF,则会校正幅度因子。如果我将窗口更改为任何窗口,例如 blackman 或 flattopwin,则能量或振幅的比率大约为 1,这是应该的。应用 ACF 后,两个峰值均约为。正常 FFT 图和窗口 FFT 图具有相同的值,因为它应该。

但是,正如本网站上的表格中所述 https://community.plm.automation.siemens.com/t5/Testing-Knowledge-Base/Window-Correction-Factors/ta-p/431775,对于 flattopwin ECF = 2.26,ACF = 4.18。从我的脚本计算,flattopwin 的因子是 ECF = 2.3891 和 ACF = 4.6391,这与表中的不一样。使用 blackman 也是如此:ECF 和 ACF 不匹配。不过,对于使用汉明和汉宁,这些值是正确的。

我计算的 ECF 和 ACF 正确吗?

matlab window
1个回答
0
投票

你的计算是正确的。在该网站上,Blackman 的窗口名称与 blackmanharris 容易混淆。试试这个,值应该匹配。对于平顶,检查系数。有很多变体,并且网站上可能使用了不同的配置。

校正因子也可以通过以下方式更简单地计算:

能量校正 = 1/rms(窗口)

amplitude_ Correction = N/sum(window),其中N是信号长度(越高校正越准确)

© www.soinside.com 2019 - 2024. All rights reserved.