- 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
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jaykishan Solanki
am 9 Jul. 2024
Beantwortet: Manikanta Aditya
am 9 Jul. 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 Kommentare
Akzeptierte Antwort
Manikanta Aditya
am 9 Jul. 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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Transforms finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!