How to N'-band channelizer (filter bank) via Sliding FFT

3 views (last 30 days)
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))

Answers (1)

Naren
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

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!