mirror of
https://github.com/n5ac/mmtty.git
synced 2025-12-06 04:12:03 +01:00
206 lines
5.6 KiB
C++
206 lines
5.6 KiB
C++
//Copyright+LGPL
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
// This file is part of MMTTY.
|
|
|
|
// MMTTY is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
|
|
// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
|
|
// MMTTY is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see
|
|
// <http://www.gnu.org/licenses/>.
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include "FreqDisp.h"
|
|
//---------------------------------------------------------------------
|
|
#pragma resource "*.dfm"
|
|
//TFreqDispDlg *FreqDispDlg;
|
|
//---------------------------------------------------------------------
|
|
__fastcall TFreqDispDlg::TFreqDispDlg(TComponent* AOwner)
|
|
: TForm(AOwner)
|
|
{
|
|
FormStyle = ((TForm *)AOwner)->FormStyle;
|
|
Font->Name = ((TForm *)AOwner)->Font->Name;
|
|
Font->Charset = ((TForm *)AOwner)->Font->Charset;
|
|
|
|
m_H1 = NULL;
|
|
m_Tap1 = 0;
|
|
m_Over1 = 1;
|
|
m_H2 = NULL;
|
|
m_Tap2 = 0;
|
|
m_Over2 = 1;
|
|
m_Max = 0;
|
|
|
|
pBitmap = new Graphics::TBitmap();
|
|
pBitmap->Width = PaintBox->Width;
|
|
pBitmap->Height = PaintBox->Height;
|
|
if( Font->Charset != SHIFTJIS_CHARSET ){
|
|
CancelBtn->Caption = "Close";
|
|
BwBtn->Caption = "Width";
|
|
Caption = "frequency characteristic";
|
|
}
|
|
}
|
|
__fastcall TFreqDispDlg::~TFreqDispDlg()
|
|
{
|
|
delete pBitmap;
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::Execute(const double *H, int Tap, int Over)
|
|
{
|
|
m_type = 0;
|
|
m_H1 = H;
|
|
m_Tap1 = Tap;
|
|
m_Over1 = Over;
|
|
m_Tap2 = 0;
|
|
ShowModal();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::Execute(const double *H1, const double *H2, int Tap, int Over)
|
|
{
|
|
m_type = 0;
|
|
m_H1 = H1;
|
|
m_Tap1 = Tap;
|
|
m_Over1 = Over;
|
|
m_H2 = H2;
|
|
m_Tap2 = Tap;
|
|
m_Over2 = Over;
|
|
ShowModal();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::Execute(const double *H1, int Tap1, const double *H2, int Tap2, int Over)
|
|
{
|
|
m_type = 4;
|
|
m_H1 = H1;
|
|
m_Tap1 = Tap1;
|
|
m_Over1 = Over;
|
|
m_H2 = H2;
|
|
m_Tap2 = Tap2;
|
|
m_Over2 = Over;
|
|
ShowModal();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::Execute(double a10, double b11, double b12, double a20, double b21, double b22, int Over)
|
|
{
|
|
m_type = 1;
|
|
m_Over1 = Over;
|
|
m_a10 = a10;
|
|
m_b11 = b11;
|
|
m_b12 = b12;
|
|
m_a20 = a20;
|
|
m_b21 = b21;
|
|
m_b22 = b22;
|
|
ShowModal();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::Execute(CIIR *ip, int Over, double max)
|
|
{
|
|
m_type = 2;
|
|
m_piir = ip;
|
|
m_Over1 = Over;
|
|
m_Max = max;
|
|
ShowModal();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::Execute(const double *H, int Tap, int Over, double max)
|
|
{
|
|
m_type = 3;
|
|
m_H1 = H;
|
|
m_Tap1 = Tap;
|
|
m_Over1 = Over;
|
|
m_Tap2 = 0;
|
|
m_Max = max;
|
|
ShowModal();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::PaintBoxPaint(TObject *Sender)
|
|
{
|
|
if( m_type == 0 ){ // FIR
|
|
if( Timer->Enabled ){
|
|
memcpy(m_HT, m_H1, sizeof(double)*(m_Tap1+1));
|
|
DrawGraph(pBitmap, m_HT, m_Tap1, m_Over1, m_Max, 1, clBlue);
|
|
if( m_Tap2 ){
|
|
memcpy(m_HT, m_H2, sizeof(double)*(m_Tap2+1));
|
|
DrawGraph(pBitmap, m_HT, m_Tap2, m_Over1, m_Max, 0, clRed);
|
|
}
|
|
}
|
|
else {
|
|
DrawGraph(pBitmap, m_H1, m_Tap1, m_Over1, m_Max, 1, clBlue);
|
|
if( m_Tap2 ){
|
|
DrawGraph(pBitmap, m_H2, m_Tap2, m_Over2, m_Max, 0, clRed);
|
|
}
|
|
}
|
|
}
|
|
else if( m_type == 1 ){ // IIR Tank
|
|
DrawGraphIIR(pBitmap, m_a10, 0, 0, -m_b11, -m_b12, m_Over1, m_Max, 1, clBlue);
|
|
DrawGraphIIR(pBitmap, m_a20, 0, 0, -m_b21, -m_b22, m_Over1, m_Max, 0, clRed);
|
|
}
|
|
else if( m_type == 2 ){ // IIR
|
|
#if 1
|
|
DrawGraphIIR(pBitmap, m_piir, m_Over1, m_Max, 1, clBlue);
|
|
#else
|
|
CIIR iir;
|
|
iir.MakeIIR(2600, SampFreq, 10, 0, 0);
|
|
m_Max = 6000.0;
|
|
DrawGraphIIR(pBitmap, &iir, 1, m_Max, 1, clBlue);
|
|
#endif
|
|
}
|
|
else if( m_type == 3 ){ // FIR-Avg
|
|
DrawGraph(pBitmap, m_H1, m_Tap1, m_Over1, m_Max, 1, clBlue);
|
|
}
|
|
else if( m_type == 4 ){ // two-FIR
|
|
DrawGraph2(pBitmap, m_H1, m_Tap1, m_H2, m_Tap2, m_Over1, m_Max, 1, clBlue);
|
|
}
|
|
PaintBox->Canvas->Draw(0, 0, (TGraphic*)pBitmap);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
void __fastcall TFreqDispDlg::BwBtnClick(TObject *Sender)
|
|
{
|
|
if( m_type >= 2 ){
|
|
switch(m_Max){
|
|
case 100:
|
|
m_Max = 200;
|
|
break;
|
|
case 200:
|
|
m_Max = 400;
|
|
break;
|
|
case 400:
|
|
m_Max = 800;
|
|
break;
|
|
case 800:
|
|
m_Max = 3000;
|
|
break;
|
|
default:
|
|
m_Max = 100;
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
switch(m_Max){
|
|
case 3000:
|
|
m_Max = 4000;
|
|
break;
|
|
case 4000:
|
|
m_Max = 6000;
|
|
break;
|
|
case 6000:
|
|
m_Max = 2000;
|
|
break;
|
|
default:
|
|
m_Max = 3000;
|
|
break;
|
|
}
|
|
}
|
|
PaintBoxPaint(NULL);
|
|
}
|
|
//---------------------------------------------------------------------------
|