How to N'-band channelizer (filter bank) via Sliding FFT
6 views (last 30 days)
Show older comments
Hello,
I'm trying to figure out how to perform N'-band channelizer for SSCA (strip spectral correlation analyzer) via sliding FFT. I have already understood that I have to take N points of signal in time domain x(t) and apply windowing function and take another N points by shift the window by L (L=1 in my case). Then I apply fourier transform to those points. But how many of those windowed vectors I need ? I tried to follow code in commP25ssca.m but I cant understand steps between the final result (and then can't set proper input values to mentioned function).
SSCA blog:
Documentation for matlab function:
My code for simple sliding fft via following this paper:
clc
clear all
close all
ef = 0.1;
ef_vz = 1;
Td = 1000;
time = 0:1/ef_vz:Td;
freq = 0:1/Td:ef_vz;
sig = 1*exp(1j*2*pi*ef.*time);
spek = abs(fft(sig));
N = 512;
num_blocks = floor((length(sig)-N) / 1);
x = sig;
counter = 0;
for i = 1:length(x)
k = [i:i+N-1];
window = x(k);
if i == 1
Xk(i,:) = fft(x(k));
else
Xk(i,:) = (Xk(i-1,:)-x(i)+x(i+N-1)).*exp((1j*2*pi*(k-1))/N);
end
counter = counter + 1;
if counter == 1
break
else
continue
end
end
p = linspace(0,ef_vz,N);
figure(1)
plot(p,abs(Xk))
In the matlab function (commP25ssca) they applied this type of channelizer:
ef = 0.1;
ef_vz = 1;
Td = 1000;
time = 0:1/ef_vz:Td;
freq = 0:1/Td:ef_vz;
sig = 1*exp(1j*2*pi*ef.*time);
spek = abs(fft(sig));
N = 512;
k = [0:N-1];
b = hamming(N)';
Nciar = fftshift(fft(b.*sig(1:N)));
XT = Nciar.*exp(-1j*2*pi*k./N);
p = linspace(0,ef_vz,N);
figure(2)
plot(p,abs(XT))
0 Comments
Answers (1)
Naren
on 16 Jan 2024
Hello,
It seems you're trying to implement a Strip Spectral Correlation Analyzer (SSCA) using a sliding FFT approach.
The number of windowed vectors you need depends on the resolution you want in the cyclic frequency domain and the total time duration of the signal you are analyzing. You will have to compute this for each cyclic frequency of interest (alpha) and for each frequency bin (f).
Your current code seems to be a starting point for sliding FFT, but it does not yet compute the spectral correlation function. The spectral correlation function involves taking the product of an FFT at one time with the conjugate of an FFT at a different time, shifted by the cyclic frequency.
The number of windowed vectors (`num_blocks`) in your code should be the number of times you can slide the window across the signal, which is given by `floor((length(sig)-N)/L) + 1`. This will give you the number of FFTs you need to compute for a single cyclic frequency.
For a full SSCA implementation, you would need to perform this operation for each cyclic frequency of interest. The number of cyclic frequencies you analyze will depend on the signal's properties and your analysis goals.
To get a better understanding of the `commP25ssca` function and how to adapt it for your purposes, refer the documentation:
Regards,
Naren
0 Comments
See Also
Categories
Find more on Multirate Signal Processing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!