The experiment using this program is introduced on "Interface" No.3, CQ publishing Co.,Ltd, 2015. 本プログラムを使った実験は,CQ出版社のインターフェース 2015年3月号で紹介しています.

Dependencies:   DSProcessingIO mbed

FreqConv.cpp

Committer:
CQpub0Mikami
Date:
2014-12-27
Revision:
2:0b15cd2b79e3
Parent:
0:a5a171eda3f8

File content as of revision 2:0b15cd2b79e3:

//--------------------------------------------------------------
// Frequency converter
// Copyright (c) 2014 MIKAMI, Naoki,  2014/06/23
//--------------------------------------------------------------

#include "mbed.h"
#include "AdcInternal.hpp"
#include "MCP4922Single.hpp"
#include "HilbertTransform.hpp"
#include "coefsHilbert94.hpp"
#include "DC_Cut_Coefficients.hpp"
#include "Biquad.hpp"
#include "TwoPhaseGenerator.hpp"

using namespace Mikami;

const float FS_ = 10.0e3f;
Adc adc_(A0);
Dac dac_(Dac::DAC_A);

Ticker timer_;          // for timer interrupt

Hilbert<ORDER_> ht(hm_);
Biquad DcCut(c1_);      // DC cut filter
TwoPhaseGenerator sinCos_(100.0f, FS_); // 100.0 Hz

void TimerIsr()
{
    float yI, yQ, cosx, sinx;

    float xn = adc_.Read(); // input
    
    xn = DcCut.Execute(g0_*xn);     // DC cut
    ht.Execute(xn, yI, yQ);         // Hilbert transform
    sinCos_.Generate(cosx, sinx);   // cos and sin generator
    float yn = yI*cosx - yQ*sinx;   // conversion
    
    dac_.Write(yn);    // output
}

int main()
{
    timer_.attach_us(&TimerIsr, 1.0e6f/FS_);
    while (true) {}    // infinite loop
}