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

📄 fft_t.cpp

📁 《无线通信系统仿真——c++使用模型》这本书的源代码
💻 CPP
字号:
//
//  File = dc_fft.cpp
//

#include <iostream> 
#include <fstream>
#include <complex>

#include "dit_pino_T.h"
#include "fft_T.h"
#include "cbitrev_T.h"
using namespace std;
//======================================================
template< class T>
void IFFT(  complex<T>* sample_spectrum,
            complex<T>* time_signal,
            int num_samps )
{
    int i;
    for(i=0; i<num_samps; i++){
        time_signal[i] = sample_spectrum[i];
    }
    ComplexBitReverse<T>(time_signal, num_samps);
    IfftDitPino<T>(time_signal, num_samps);
    return;
}
//======================================================
template <class T>
void FFT(   complex<T>* time_signal,
            complex<T>* sample_spectrum,
            int num_samps )
{
    int i;
    for(i=0; i<num_samps; i++){
        sample_spectrum[i] = time_signal[i];
    }
    ComplexBitReverse<T>(sample_spectrum,num_samps);
    FftDitPino<T>(sample_spectrum, num_samps);
    return;
}
//======================================================
template <class T>
void FFT(   complex<double>* time_signal,
            complex<T>* sample_spectrum,
            int num_samps,
            int fft_len )
{
    int i;
    for(i=0; i<num_samps; i++){
        sample_spectrum[i] = time_signal[i];
    }
    for(i=num_samps; i<fft_len; i++){
        sample_spectrum[i] = float_complex(0.0,0.0);
    }

#ifdef _FFT_SIGNAL_DUMP
    ofstream time_sig_file("wind_sig.txt", ios::out);
    for(i=0; i<fft_len; i++){
        time_sig_file << i << ", " << real(sample_spectrum[i]) << endl;
    }
    time_sig_file.close();
#endif

    ComplexBitReverse<T>(sample_spectrum, fft_len);
    FftDitPino<T>(sample_spectrum, fft_len);
    return;
}
//======================================================
template <class T>
void FFT(   complex<float>* time_signal,
            complex<T>* sample_spectrum,
            int num_samps,
            int fft_len )
{
    int i;
    for(i=0; i<num_samps; i++){
        sample_spectrum[i] = time_signal[i];
    }
    for(i=num_samps; i<fft_len; i++){
        sample_spectrum[i] = complex<T>(0.0,0.0);
    }

#ifdef _FFT_SIGNAL_DUMP
    ofstream time_sig_file("wind_sig.txt", ios::out);
    for(i=0; i<fft_len; i++){
        time_sig_file << i << ", " 
                      << real(sample_spectrum[i]) << endl;
    }
    time_sig_file.close();
#endif

    ComplexBitReverse<T>(sample_spectrum, fft_len);
    FftDitPino<T>(sample_spectrum, fft_len);
    return;
}
//======================================================
template <class T>
void FFT(   double* time_signal,
            complex<T>* sample_spectrum,
            int num_samps,
            int fft_len )
{
    int i;
    for(i=0; i<num_samps; i++){
        sample_spectrum[i] = 
                         complex<T>(time_signal[i],0.0);
    }
    for(i=num_samps; i<fft_len; i++){
        sample_spectrum[i] = complex<T>(0.0,0.0);
    }

#ifdef _FFT_SIGNAL_DUMP
    ofstream time_sig_file("wind_sig.txt", ios::out);
    for(i=0; i<fft_len; i++){
        time_sig_file << i << ", " 
                    << real(sample_spectrum[i]) << endl;
    }
    time_sig_file.close();
#endif

    ComplexBitReverse<T>(sample_spectrum, fft_len);
    FftDitPino<T>(sample_spectrum, fft_len);
    return;
}
//======================================================
template <class T>
void FFT(   float* time_signal,
            complex<T>* sample_spectrum,
            int num_samps,
            int fft_len )
{
    int i;
    for(i=0; i<num_samps; i++) {
        sample_spectrum[i] = complex<T>(time_signal[i],0.0);
    }
    for(i=num_samps; i<fft_len; i++) {
        sample_spectrum[i] = complex<T>(0.0,0.0);
    }
#ifdef _FFT_SIGNSL_DUMP
    ofstream time_sig_file("wind_sig.txt", ios::out);
    for(i=0; i<fft_len; i++) {
        time_sig_file << i << ", " << real(sample_spectrum[i]) << endl;
    }
    time_sig_file.close();
#endif
    ComplexBitReverse<T>(sample_spectrum, fft_len);
    FftDitPino<T>(sample_spectrum, fft_len);
    return;
}
//======================================================
template <class T> 
void FFT( complex<T>* signal,
          int num_samps )
{
 ComplexBitReverse<T>(signal, num_samps);
 FftDitPino<T>(signal, num_samps);
 return;
}
//======================================================
template void IFFT<double>( std::complex<double>* sample_spectrum,
                    std::complex<double>* time_signal,
                    int num_samps );
template void FFT<double>( std::complex<double>* time_signal,
                    std::complex<double>* sample_spectrum,
                    int num_samps );
template void FFT<double>( std::complex<float>* time_signal,
                            std::complex<double>* sample_spectrum,
                            int num_samps,
                            int fft_len );
template void FFT<double>( double* time_signal,
                            std::complex<double>* sample_spectrum,
                            int num_samps,
                            int fft_len );
template void FFT<double>( float* time_signal,
                            std::complex<double>* sample_spectrum,
                            int num_samps,
                            int fft_len );

⌨️ 快捷键说明

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