- You can create multiple FFT objects, each with a different FFT length. Then, based on the required FFT length, you can select the appropriate FFT object for processing. This approach will consume more resources as multiple FFT objects need to be instantiated.
Fixed-point conversion error of dsphdl.FFT
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Jaykishan Solanki
il 9 Lug 2024
Risposto: Manikanta Aditya
il 9 Lug 2024
I am trying to convert the below given matlab scripts to VHDL, but during fixed-point conversion it is showing that dsphdl.FFT is a non-tunable property and hence it cannot be converted as it needs a constant value. Is there any way around it as i need a code whose FFTLength can be changed as per need?
function [yOut, validOut] = HDLFFT(yIn, validIn, FFTLength)
persistent fftObj;
if isempty(fftObj)
fftObj = dsphdl.FFT('FFTLength', FFTLength);
end
[yOut, validOut] = fftObj(yIn, validIn);
end
the above is the main function
N = 1024;
Fs = 800000;
number_of_samples = 0:N-1;
time = (0:N-1)*Fs;
signal = cos(2*pi*200000*time);
sampled_signal = cos(2*pi*200000*number_of_samples/Fs);
signal_fixed = fi(sampled_signal,0,32,24);
signal_zeros = zeros(1, N);
validOut = false(1,N);
for loop = 1:1:3*N
if (mod(loop, N) == 0)
i = N;
else
i = mod(loop, N);
end
[signal_zeros(loop),validOut(loop)] = HDLFFT128_final((signal_fixed(i)),(loop <= N),FFTLength);
end
signal_zeros = signal_zeros(validOut == 1);
fft_reverse = bitrevorder(signal_zeros);
disp(fft_reverse);
figure(1)
stem(0:N-1,fft_reverse)
title('FFT')
the above is the testbench
0 Commenti
Risposta accettata
Manikanta Aditya
il 9 Lug 2024
Hi,
The issue you’re encountering is due to the fact that the dsphdl.FFT object in MATLAB requires a constant FFT length. This is because the FFT algorithm is implemented in hardware, and the FFT length directly affects the hardware architecture. Therefore, it cannot be changed dynamically during runtime.
Try out following workaround and see if you can resolve the issue:
Here is the workaround code:
function [yOut, validOut] = HDLFFT(yIn, validIn, FFTLength)
persistent fftObj;
if isempty(fftObj)
fftObj = cell(1, 1024); % Create a cell array to hold FFT objects
end
if isempty(fftObj{FFTLength})
fftObj{FFTLength} = dsphdl.FFT('FFTLength', FFTLength); % Create FFT object if it doesn't exist
end
[yOut, validOut] = fftObj{FFTLength}(yIn, validIn); % Use the appropriate FFT object
end
Hope this helps!
0 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Transforms in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!