⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outputcheck_c.m

📁 OFDM的fpga实现
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% file : outputcheck_c.m
%
% Description : Check if cyclic prefix insertion is correct.  Use Altera FFT MegaCore C Model
% to generate IFFT results.  Use the C model output as source to cyclic
% prefix. Compare with ModelSim simulation output to test bit reversal operation and CP insertion.
% 2001-2007 Altera Corporation, All Rights Reserved
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all
close all

DOUTWIDTH = 16;
DFFTOUTWIDTH = 31;

fft_tb;

fidnps = fopen('blksize_report.txt','r');
nps=fscanf(fidnps,'%d');
inverse=fscanf(fidinv,'%d'); 
fclose(fidnps); 
fclose(fidinv);

P = length(nps);

fidcps = fopen('cpsize_report.txt','r');
cps=fscanf(fidcps,'%d');
fclose(fidcps); 


% fft input data
fidr = fopen('real_input.txt','r');                                            
fidi = fopen('imag_input.txt','r');  
xreali=fscanf(fidr,'%d');                                                      
ximagi=fscanf(fidi,'%d');      
fclose(fidi);                                                                  
fclose(fidr);   

% fft c model output data  
fidro = fopen('real_output_c_model.txt','r');                                  
fidio = fopen('imag_output_c_model.txt','r');

xrealo=fscanf(fidro,'%d');                                                      
ximago=fscanf(fidio,'%d');      

xo = xrealo + j*ximago;

fclose(fidro);                                                                 
fclose(fidio);

% % fft core output data  
% fini = fopen('fft_imag_output_vhd.txt','r');
% finr = fopen('fft_real_output_vhd.txt','r');
% 
% dini = fscanf(fini, '%d');
% dinr = fscanf(finr, '%d');
% 
% din = dinr + j*dini;
% 
% fclose(fini);
% fclose(finr);

% % compare fft c model and fft core
% a = din - xo;
%     if length(find(a)) 
%         disp('fft mismatch');
%         pause;
%     else
%         disp('MATCH')
%         pause
%     end

% cp output data
fouti = fopen('imag_output_vhd.txt','r');
foutr = fopen('real_output_vhd.txt','r');

douti = fscanf(fouti,'%d');
doutr = fscanf(foutr,'%d');

dout = doutr + j*douti;

xind = 1; % start of current input packet index
yind = 1; % start of current output packet index
for k = 1:P
    x = xo(xind: xind + nps(k)-1); % current fft output packet in bit reversed order
    y = dout(yind: yind + cps(k) + nps(k)-1); % current cyclic prefix appended output packet
    xind = xind + nps(k);
    yind = yind + cps(k) + nps(k);
    % bit reversal
    s = zeros(nps(k),1);
    Bsize = log2(nps(k));
    for ii = 1:nps(k)
        B = dec2bin(ii - 1, Bsize);
        new_ii = bin2dec(flipud(B.').');
        s(new_ii+1) = x(ii); % s is in natural order, of 1 FFT packet
    end;
    cp = y(1:cps(k)); % cp symbols
    a = s(nps(k) - cps(k) + 1: end) - cp; %is cps correct? a: the last L(k) symbols of a packet
    b = s - y(cps(k) + 1:end); % are the main packet symbols correct?
    if length(find(a)) | length(find(b))
        disp('wrong cp insertion');
        pause;
    else
        disp('cyclic prefix insertion is correct')
        pause
    end
    clear a b cp s y x;
end

fclose(fouti);
fclose(foutr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -