- The frequency axis can be constructed in a different way. For example, a logarithmic scale for the frequency axis can be used, which would provide better resolution for low frequencies and less resolution for high frequencies.
- Alternatively, a linear scale for the frequency axis can be used, but specification of the minimum and maximum frequencies of interest is required, rather than using the entire range from 0 to 0.5.
- Using only the positive frequencies for the frequency axis and discarding the negative frequencies can also be helpful.
How to use Dash code to get stockwell transform result?
12 次查看(过去 30 天)
显示 更早的评论
Hello,
I am trying to use Dash code to out put the grouph of Stockwell transform but I am quite confused of the variable f.
The code shows here
function ST=stran(h)
% Compute S-Transform without for loops
%%% Coded by Kalyan S. Dash %%%
%%% IIT Bhubaneswar, India %%%
[~,N]=size(h); % h is a 1xN one-dimensional series
nhaf=fix(N/2);
odvn=1;
if nhaf*2==N;
odvn=0;
end
f=[0:nhaf -nhaf+1-odvn:-1]/N;
Hft=fft(h);
%Compute all frequency domain Gaussians as one matrix
invfk=[1./f(2:nhaf+1)]';
W=2*pi*repmat(f,nhaf,1).*repmat(invfk,1,N);
G=exp((-W.^2)/2); %Gaussian in freq domain
% End of frequency domain Gaussian computation
% Compute Toeplitz matrix with the shifted fft(h)
HW=toeplitz(Hft(1:nhaf+1)',Hft);
% Exclude the first row, corresponding to zero frequency
HW=[HW(2:nhaf+1,:)];
% Compute Stockwell Transform
ST=ifft(HW.*G,[],2); %Compute voice
%Add the zero freq row
st0=mean(h)*ones(1,N);
ST=[st0;ST];
end
Can anyone explain what is f is and why I always got a zero value when analysis the audio file (f=[0:nhaf -nhaf+1-odvn:-1]/N;)? Thank you so much!
0 个评论
采纳的回答
Abhimenyu
2023-12-8
Hi Jingyi,
I understand that you want to gain more information about the variable “f” used in the code of Stockwell transformation provided by you. The Stockwell transform (ST) is a method of time-frequency analysis that provides frequency-dependent resolution and preserves the phase information of the signal.
The variable “f” is a vector of normalized frequencies, ranging from 0 to 0.5 for the positive frequencies and from -0.5 to -1/N for the negative frequencies, where N is the length of the signal. The variable “f” is used to construct the frequency domain Gaussian windows that are applied to the Fourier transform of the signal. The expression “f= [0:nhaf -nhaf+1-odvn:-1]/N” constructs a symmetric frequency axis around 0 that ranges from 0 to “nhaf” and then from “-nhaf+1-odvn” to -1. Here, “nhaf” is the half-length of the input signal, “odvn” is a variable that is set to 1 if the length of the input signal is odd, and 0 if it's even, and “N” is the length of the input signal.
The frequency axis is a crucial parameter that affects the results of the transform. If you are getting a zero value when analysing an audio file, it might be because the frequency axis is not suitable for the audio signal.
One possible reason is that the frequency axis is normalized by the length of the input signal, which means that the frequency resolution is dependent on the signal length. For example, if the signal length is 1000 samples, then the frequency resolution is 0.001, which might be too coarse for some audio signals. On the other hand, if the signal length is 100000 samples, then the frequency resolution is 0.00001, which might be too fine for some audio signals.
Another possible reason is that the frequency axis is symmetric around 0, which means that it includes both positive and negative frequencies. However, for real-valued signals, such as audio signals, the negative frequencies are redundant and can be ignored. Therefore, only the positive frequencies for the Stockwell Transform are to be used, which would also reduce the computational cost and memory usage.
The below mentioned suggestions can improve the performance of the Stockwell Transform for the audio data:
I hope this helps to resolve the query.
Thanks,
Abhimenyu
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Continuous Wavelet Transforms 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!