필터 지우기
필터 지우기

PSD curve into time series data

조회 수: 97 (최근 30일)
Chandramouli Jambunathan
Chandramouli Jambunathan 2022년 7월 6일
댓글: Chandramouli Jambunathan 2022년 7월 14일
Hello , I am trying to convert the PSD curve into time series data.
I came across this link https://uk.mathworks.com/matlabcentral/fileexchange/47342-timeseriesfrompsd-sxx-fs-t-plot_on, but its not clear what is the format of Sxx.
All I have is a 2X2 matrix of PSD curve
example:
Freq(Hz) 10 30 100 120 500 2000
PSD(G2/Hz) .01 .002 .002 .0004 .0004 .0004
Can somebody help me?
  댓글 수: 3
Chandramouli Jambunathan
Chandramouli Jambunathan 2022년 7월 7일
Hi @dpb,
Thanks for your quick response.
Sorry I didn't understand enough. What is FEX function? Is it an inbuilt function in matlab?currently I am using 2018a matlab version.
How do I give the below table to the function?
Freq(Hz) 10 30 100 120 500 2000
PSD(G2/Hz) .01 .002 .002 .0004 .0004 .0004
I want output time series sample rate at 60 Hz(60 samples per second) and total length of time as 5 min or more.
Thanks for your support.
dpb
dpb 2022년 7월 8일
That link is to a FEX (FileExchange) function; it gives examples of use there...

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

답변 (2개)

Chunru
Chunru 2022년 7월 8일
f = [0 10 30 100 120 500 2000]; % need f(1)=0; f(end)=fs/2
p = [0.01 .01 .002 .002 .0004 .0004 .0004]; % power
fs = 4000; % 2x fmax
% interpolate the spectrum
nfft = 4096;
f1 = linspace(0, fs/2, nfft)';
p1 = interp1(f, p, f1); % any suitable interp method
% design FIR filter which has desired response
hfir = fir2(nfft, f1/(fs/2), sqrt(p1)); % p1 is power
[ph, fh] =freqz(hfir, 1, 8192, fs);
hfir1 = hfir * sqrt(fs/2); % normalized freq -> freq
% generate time series
x = filter(hfir1, 1, randn(nfft*8, 1)); % generate data of length nfft*8
[px, fx] = pwelch(x, nfft, 3*nfft/4, nfft, fs); % estimate spectrum
plot(fh, 20*log10(abs(ph)), 'r-', f, 10*log10(p), 'bo', f1, 10*log10(p1), 'k:', fx, 10*log10(px), 'g-')
xlabel('f(Hz)'); ylabel('dB'); legend('Designed', 'Specified', 'Interp', 'Sig');
xlim([0 500])

Chandramouli Jambunathan
Chandramouli Jambunathan 2022년 7월 11일
@Chunru Thanks a lot for the code and useful comments.
Is the signal 'ph' in frequency domain?
I am trying to convert 'ph' to time-domain using ifft (inverse fft), but initial results shows unrealistic acceleration values( Y- axis).
My objective is to plot acceleration(unit G) Vs time(unit seconds or minutes)
Now I am using another known PSD Vibration profile to double check the code
f = [10 28 40 100 200 500 2000]; in hertz
p = [0.02 0.02 0.04 0.04 0.08 0.08 0.00505]; in G^2/Hz
In time-domain, I am expecting the Y-axis(Acceleration in G) to be 7.94 GRMS(Root mean square).
Please let me know if you have any thoughts.
Note: 'interp1' resulted in NaN values, so I used 'pchip' interpolation method.
Thanks for your time and effort.
  댓글 수: 2
Chunru
Chunru 2022년 7월 12일
편집: Chunru 2022년 7월 12일
The principle of generating the random noise with the specified spectra in above code is to filter the wihite noise (which has a psd of constant through out freq) via a spectum-shaping filter (hfir in the code). So we start with the spectrum specification and designs a FIR filte (it could be other type of filter, with different design method). In above, we use fir2 filter design method to get the filter coefficients hfir.
> Is the signal 'ph' in frequency domain?
'ph' is the filter's frequency response. It is in the frequency domain.
> I am trying to convert 'ph' to time-domain using ifft (inverse fft), but initial results shows unrealistic acceleration values( Y- axis).
'ph' is frequency response of the filter. IFFT of ph is the filter inpulse response hfir. You need to filter white noise through the filter hfir to get the realistic acceleration.
> My objective is to plot acceleration(unit G) Vs time(unit seconds or minutes)
The random time series data is x = filter(hfir1, 1, randn(nfft*8, 1))
> Now I am using another known PSD Vibration profile to double check the code
> f = [10 28 40 100 200 500 2000]; in hertz
> p = [0.02 0.02 0.04 0.04 0.08 0.08 0.00505]; in G^2/Hz
> In time-domain, I am expecting the Y-axis(Acceleration in G) to be 7.94 GRMS(Root mean square).
plot(x) or rms(x) to check if the random signal generated meet your requirement.
> Note: 'interp1' resulted in NaN values, so I used 'pchip' interpolation method.
If you use interp1, you must specify the spectrum value at f=0 and f=fs/2. (you have option of extrap, but it may not be robust)
Chandramouli Jambunathan
Chandramouli Jambunathan 2022년 7월 14일
Thanks @Chunru.
I will look into this.

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

카테고리

Help CenterFile Exchange에서 Fourier Analysis and Filtering에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by