Frequency shifter using Weaver modulator for ST Nucleo F401RE.

Dependencies:   UITDSP_ADDA mbed

Files at this revision

API Documentation at this revision

Comitter:
MikamiUitOpen
Date:
Sat Jul 25 09:03:13 2015 +0000
Parent:
0:c17cb8371b55
Commit message:
2

Changed in this revision

Coefficients.hpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r c17cb8371b55 -r 013f4e5762b1 Coefficients.hpp
--- a/Coefficients.hpp	Sat Jul 25 07:56:36 2015 +0000
+++ b/Coefficients.hpp	Sat Jul 25 09:03:13 2015 +0000
@@ -6,19 +6,25 @@
 using namespace Mikami;
 
 //--------------------------------------------------------------
-// 直流分除去フィルタの係数
+// 入力帯域制限用帯域通過フィルタの係数
 //--------------------------------------------------------------
-// 高域通過フィルタ
-// バタワース特性
-// 次数    :2 次
+// 帯域通過フィルタ
+// 連立チェビシェフ特性
+// 次数    :12 次
 // 標本化周波数: 10.00 kHz
-// 遮断周波数 :  0.05 kHz
-
-using namespace Mikami;
-
-const Biquad::Coefs c1_ =
-    { 1.955578E+00f, -9.565437E-01f, -2.0f, 1.0f};
-const float g0_ = 9.780305E-01f;
+// 遮断周波数1:  0.20 kHz
+// 遮断周波数2:  4.20 kHz
+// 通過域のリップル: 0.50 dB
+// 阻止域の減衰量 :60.00 dB
+const int ORDER_BPF_ = 12;   // 次数
+const Biquad::Coefs ckBP_[ORDER_BPF_/2] = {
+    {-6.875894E-01f, -2.860100E-01f,  1.987324E+00f,  1.0f},    // 1段目
+    { 1.642483E+00f, -7.033978E-01f, -1.999237E+00f,  1.0f},    // 2段目
+    {-1.476697E+00f, -7.844624E-01f,  1.920831E+00f,  1.0f},    // 3段目
+    { 1.915760E+00f, -9.375948E-01f, -1.995156E+00f,  1.0f},    // 4段目
+    {-1.715001E+00f, -9.524712E-01f,  1.874031E+00f,  1.0f},    // 5段目
+    { 1.972033E+00f, -9.874265E-01f, -1.992206E+00f,  1.0f} };  // 6段目
+const float g0Bpf_ = 2.768857E-01f;    // 利得定数
 
 //--------------------------------------------------------------
 // Weaver 変調器で使う低域通過フィルタの係数
@@ -30,12 +36,11 @@
 // 遮断周波数 :  2.30 kHz
 // 通過域のリップル: 0.50 dB
 // 阻止域の減衰量 :60.00 dB
-const int ORDER_ = 8;   // 次数
-const Biquad::Coefs ck_[ORDER_/2] = {
+const int ORDER_LPF_ = 8;   // 次数
+const Biquad::Coefs ckLP_[ORDER_LPF_/2] = {
     { 1.029119E+00f, -3.631409E-01f,  1.717298E+00f,  1.0f},    // 1段目
     { 6.358165E-01f, -6.464544E-01f,  6.744049E-01f,  1.0f},    // 2段目
     { 3.499033E-01f, -8.594617E-01f,  1.627564E-01f,  1.0f},    // 3段目
     { 2.400248E-01f, -9.645248E-01f, -1.001503E-03f,  1.0f} };  // 4段目
 const float g0Lpf_ = 1.930230E-02f;    // 利得定数
 
-
diff -r c17cb8371b55 -r 013f4e5762b1 main.cpp
--- a/main.cpp	Sat Jul 25 07:56:36 2015 +0000
+++ b/main.cpp	Sat Jul 25 09:03:13 2015 +0000
@@ -21,17 +21,18 @@
 DAC_MCP4922 myDac_;             // DAC を使うための設定
 DigitalIn sw_(D2, PullDown);    // ロータリ・ディップ・スイッチ用
 
+// 入力帯域制限用帯域通過フィルタ
+IIR_Cascade<ORDER_BPF_> bpf_(ckBP_, g0Bpf_);
+
 // Weaver 変調器で使う低域通過フィルタ 
-IIR_Cascade<ORDER_> lpfC_(ck_, g0Lpf_);
-IIR_Cascade<ORDER_> lpfS_(ck_, g0Lpf_);
-
-// 直流分除去フィルタ
-Biquad DcCut_(c1_);
+IIR_Cascade<ORDER_LPF_> lpfC_(ckLP_, g0Lpf_);
+IIR_Cascade<ORDER_LPF_> lpfS_(ckLP_, g0Lpf_);
 
 int main()
 {
     myDac_.ScfClockTim3(420000);    // 出力の LPF の遮断周波数を 4.2 kHz に設定
 
+    bpf_.Clear();
     lpfC_.Clear();
     lpfS_.Clear();
 
@@ -50,7 +51,7 @@
         float xn = adc_.Read();     // A5 からの入力信号を読み込む
         //-----------------------------------------------
 
-        xn = DcCut_.Execute(xn);    // DC 成分除去
+        xn = bpf_.Execute(xn);    // 帯域制限
         
         float mpyC = xn*cosf(phi1);
         float mpyS = xn*sinf(phi1);