필터 지우기
필터 지우기

Unable to see fft output during co-simulation.

조회 수: 23 (최근 30일)
Jaykishan Solanki
Jaykishan Solanki 2024년 7월 9일 4:13
답변: Sahas 2024년 7월 11일 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

채택된 답변

Sahas
Sahas 2024년 7월 11일 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.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Transforms에 대해 자세히 알아보기

제품


릴리스

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by