Clear Filters
Clear Filters

Unable to see fft output during co-simulation.

23 views (last 30 days)
Jaykishan Solanki
Jaykishan Solanki on 9 Jul 2024 at 4:13
Answered: Sahas on 11 Jul 2024 at 7:03
I am converting the following code to VHDL but after cosimulation I am only seeing validOut, how can I see the fft output as well?
function [yOut, validOut] = HDLFFT(yIn, validIn)
persistent fftObj;
if isempty(fftObj)
fftObj = dsphdl.FFT(FFTLength=128)
end
[yOut, validOut] = fftObj(yIn, validIn);
end
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*8*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));
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 testbench

Accepted Answer

Sahas
Sahas on 11 Jul 2024 at 7:03
As per my understanding, when the code file is executed, it does not return the required FFT “yOut” variable value.
I was able to verify the issue and have provided a modified script that executes FFT function with the required FFT “yOut” output.
The issue was arising because the function defined in the main code was “HDLFFT” and it was being called as “HDLFFT128_final” in the testbench.
% Modified script
function [yOut, validOut] = HDLFFT(yIn, validIn) %function name
persistent fftObj;
if isempty(fftObj)
fftObj = dsphdl.FFT('FFTLength', 128);
end
[yOut, validOut] = fftObj(yIn, validIn);
end
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*8*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)] = HDLFFT(signal_fixed(i), (loop <= N)); % function being called
end
signal_zeros = signal_zeros(validOut);
fft_reverse = bitrevorder(signal_zeros);
disp(fft_reverse);
figure(1)
stem(0:length(fft_reverse)-1, fft_reverse)
title('FFT Output')
Here are some documentation links which might be helpful:
  1. Compute fast Fourier transform (FFT) - MATLAB - MathWorks India – FFT using DSP HDL Toolbox
  2. Fast Fourier transform - MATLAB fft - MathWorks India – Basic understanding of FFT
I hope this is useful.

More Answers (0)

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!