# Why fft don't find oscillations ?

조회 수: 5 (최근 30일)
University 2024년 3월 19일
댓글: Matt J 2024년 3월 19일
I'm trying to find an FTT of an oscillatory data. In the first figure, you can observed an isolated white region. In this region I expect to see an oscillation instead I am seeing no oscillation. I set a threshold to determine whether there is oscillation or not. But even when I adjusted the threshold, the code can't still find the oscillation the isolated white region. I tried to explore by plotting the data around the isolated white region (i.e. in fig 3). You can see there is a bit oscillation around the white region. Please does one knows what might be the problem. I didn't use HANN widow because, it can't figure out what it does.
data2 = struct with fields:
Y1: [31x301 double]
% values xarray and yarray
x =active_flow.xvals;
y =active_flow.yvals;
% activity values and line at in the HAN region
xival=active_flow.xivals;
lval =active_flow.Lvals;
% extract parameters
paras = active_flow.pars;
% line in the HAN region
l = paras.L;
% width of the rectangle
w =paras.W;
% height of the rectangle
d = paras.D;
% extract dependent variables theta
theta = active_flow.thetaxmym;
X1 = data1.X1;
Y1 = data2.Y1;
% HAN region: using the mesh grid
HAN = (X1 >= -l/2 & X1 <= l/2);
% Index position of -l/2 and l/2
lstop=find(HAN(1,:),1,'last');
% x arrays in the right planar region
xplanarright = x(lstop:end);
%% Sampling Frequency
% Sampling frequency left HAN planar
Fsplanarright = 1/(xplanarright(2)-xplanarright(1));
% Length of x left planar region
Lplanarright = length(xplanarright);
%% PLOTTING
%% Compute the fftshift
for ixi=1:length(xival)
for il=1:length(lval)
% fftshift of theta
thetafftplanarright(:, ixi,il) = abs(fftshift(fft(theta(lstop:end,ixi, il))));
% shift the frequencies
Fshiftplanarright=(-Lplanarright/2:Lplanarright/2-1)*(Fsplanarright/Lplanarright);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Calculate the Peaks and Frequencies
Iplanarright = 1:numel(xplanarright);
for k1 = 1:size(thetafftplanarright,2) % this get the xi values
for k2 = 1:size(thetafftplanarright, 3) % this get the l values
% planar right region
[peak_magplanarright, frequenciesplanarright] = findpeaks(thetafftplanarright(Iplanarright,k1,k2), Fshiftplanarright);
[ifreqplanarright]=find(peak_magplanarright==max(peak_magplanarright));
freq_maxpeakplanarright(k1,k2)=frequenciesplanarright(ifreqplanarright(1));
mag_maxpeakplanarright(k1,k2)= peak_magplanarright(ifreqplanarright(1));
end
end
%% DETERMINE OSCILLATION FOR ENTIRE REGION
% Define threshold for oscillation detection
threshold_freq = 3e5;
threshold_mag = 4.7;
% Planar right
osc_xivalplanarright = [];
osc_lvalplanarright = [];
non_osc_xivalplanarright = [];
non_osc_lvalplanarright = [];
%% Planar right: Iterate over each frequency peak
for k1 = 1:size(freq_maxpeakplanarright, 1)
for k2 = 1:size(freq_maxpeakplanarright, 2)
peak_freqplanarright = freq_maxpeakplanarright(k1, k2);
peak_magplanarright = mag_maxpeakplanarright(k1,k2);
% Check if peak frequency exceeds threshold
if abs(peak_freqplanarright) > threshold_freq && abs(peak_magplanarright)>threshold_mag
osc_xivalplanarright(end+1) = xival(k1);
osc_lvalplanarright(end+1) = lval(k2);
else
non_osc_xivalplanarright(end+1) = xival(k1);
non_osc_lvalplanarright(end+1) = lval(k2);
end
end
end
%% Plotting
[C,h1] = contourf(lval,xival,freq_maxpeakplanarright, 'ShowText','off','edgecolor','none');
c.TickLabelInterpreter='latex';
c.Label.String = 'frequency';
c.Label.Interpreter = 'latex';
colormap bone
clabel(C,h1)
set(gca,'clim',[min(min(freq_maxpeakplanarright)) max(max(freq_maxpeakplanarright))]);
hold on
% plot xival and lval for oscillation and non_oscillation
for i=1:length(non_osc_lvalplanarright)
p4a = plot(non_osc_lvalplanarright(i), non_osc_xivalplanarright(i), 'c.', 'LineWidth', 2, 'MarkerSize', 10);
end
for i=1:length(osc_lvalplanarright)
p4b = plot(osc_lvalplanarright(i), osc_xivalplanarright(i), 'r.', 'LineWidth', 2, 'MarkerSize', 10);
end
% fft and the function around the isolated region
fig11 = figure(11);
nxi = linspace(xival(3), xival(12),10);
for ixi = 1:length(nxi)
subplot(5, 2, ixi);
plot(Fshiftplanarright, thetafftplanarright(:, ixi, 13), 'LineWidth',1)
xlabel('frequency','Interpreter','latex')
ylabel('magnitude','Interpreter','latex');
xlim([min(Fshiftplanarright) max(Fshiftplanarright)])
title(['$\xi$ =', num2str(nxi(ixi)), '$, l$ = ', num2str(lval(13))], 'Interpreter','latex');
end
fig12 = figure(12);
for ixi = 1:length(nxi)
subplot(5, 2, ixi);
plot(xplanarright, squeeze(theta(lstop:end, ixi, 13)))
xlabel('$x$','Interpreter','latex')
ylabel('tilt angle, $\theta$','Interpreter','latex');
xlim([min(xplanarright) max(xplanarright)])
title(['$\xi$ =', num2str(nxi(ixi)), '$, l$ = ', num2str(lval(13))], 'Interpreter','latex');
end
##### 댓글 수: 5이전 댓글 3개 표시이전 댓글 3개 숨기기
University 2024년 3월 19일
편집: Matt J 2024년 3월 19일
From the attached figure, the region with red color indicates oscillation and 'cyan' means no oscillation. You can see an isoloated white region, where I expect there should be oscillation there as well. The figure you posted is the plot around the isolated region. My worry, why is saying there is not oscillation, where is oscillation. In changed the threshold_mag to this 0.05 to get the attached fig.
openfig 1.fig
ans =
Figure (1) with properties: Number: 1 Name: '' Color: [1 1 1] Position: [360 97.6667 560 420] Units: 'pixels' Use GET to show all properties
Matt J 2024년 3월 19일
I don't think anybody understands what your many variables and plots mean. But it's a frequency plot, so there shouldn't be oscillation. The Fourier transform of an oscillatory signal is a peak.

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Bartlett에 대해 자세히 알아보기

R2023b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by