計算數字濾波器的頻率響應 (2)
將上次的程式用C++重寫了一遍。希望對大家有用。
下面是程式碼:
class IIR_BODE { private: double *m_pNum; double *m_pDen; int m_num_order; int m_den_order; complex<double> poly_val(double p[], int order, double omega); public: IIR_BODE(); void setPara(double num[], int num_order, double den[], int den_order); complex<double> bode(double omega); void bode(double omega[], int n, complex<double> resp[]); }; IIR_BODE::IIR_BODE() { m_pNum = NULL; m_pDen = NULL; m_num_order = -1; m_den_order = -1; } void IIR_BODE::setPara(double num[], int num_order, double den[], int den_order) { delete[] m_pNum; delete[] m_pDen; m_pNum = new double[num_order + 1]; m_pDen = new double[den_order + 1]; m_num_order = num_order; m_den_order = den_order; for(int i = 0; i <= m_num_order; i++) { m_pNum[i] = num[i]; } for(int i = 0; i <= m_den_order; i++) { m_pDen[i] = den[i]; } } complex<double> IIR_BODE::bode(double omega) { complex<double> h; h = poly_val(m_pNum, m_num_order, omega) / poly_val(m_pDen, m_den_order, omega); return h; } complex<double> IIR_BODE::poly_val(double p[], int order, double omega) { complex<double> z, sum = 0.0; z = complex<double>( cos(omega), -sin(omega) ); for (int i = order; i >= 0; i--) { sum = sum * z + p[i]; } return sum; } void IIR_BODE::bode(double omega[], int n, complex<double> resp[]) { for(int i = 0; i < n; i++) { resp[i] = bode(omega[i]); } }
下面是測試程式碼,測試的是一個4階切比雪夫低通濾波器的頻率響應:
#include <iostream> #include <math.h> using namespace std; int main() { double b[5] = {0.001836, 0.007344, 0.011016, 0.007344, 0.001836}; double a[5] = {1.0, -3.0544, 3.8291, -2.2925, 0.55075}; double argz, old_argz = 0, omega; complex<double> z; int len = 100; IIR_BODE bode; bode.setPara(b, 4, a, 4); for (int i = 0; i < len; i++) { omega = M_PI * i / (len); z = bode.bode(omega); argz = arg(z); argz = argz - round( (argz - old_argz) / M_PI ) * M_PI; old_argz = argz; cout << omega << ", " << abs(z) << ", " << argz << endl; } }
程式很簡答,沒什麼值得多說的。不過倒是用到了個小技巧使得計算出的相頻曲線是連續的。
相關推薦
計算數字濾波器的頻率響應 (2)
將上次的程式用C++重寫了一遍。希望對大家有用。 下面是程式碼: class IIR_BODE { private: double *m_pNum; double *m_pDen; int m_num_order; int m_den_ord
數字電視標準綜述(2)
信號源 努力 fec 業務 存在 帶寬 障礙 相關 接收 五、DVB與 ATSC的比較 歐洲“DVB標準”和美國“ATSC數字電視標準”的主要差別例如以下: (1)方形像素:在ATSC標準中採納了“方形像素”(Square Picture Eelem
數字訊號處理專題(2)——利用FPGA進行基本運算及特殊函式定點運算
一、前言 FPGA以擅長高速並行資料處理而聞名,從有線/無線通訊到影象處理中各種DSP演算法,再到現今火爆的AI應用,都離不開卷積、濾波、變換等基本的數學運算。但由於FPGA的硬體結構和開發特性使得其對很多演算法不友好,之前本人零散地總結和轉載了些基本的數學運算在FPGA中的實現方式,今天做一個系統的總
從互聯網+角度看雲計算的現狀與未來(2)
大數據平臺 堅強 隱藏 用戶管理 圖像識別 都是 人工智能 大致 統計數據 此文已由作者劉超授權網易雲社區發布。歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。六、業務架構趨勢一:互聯網沖擊已成必然,快速變更成為核心競爭力,DevOps重構組織架構,流程,文化是必然選擇在
從網際網路+角度看雲端計算的現狀與未來(2)
此文已由作者劉超授權網易雲社群釋出。歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。六、業務架構趨勢一:網際網路衝擊已成必然,快速變更成為核心競爭力,DevOps重構組織架構,流程,文化是必然選擇在業務架構方面,我這裡強調的是服務化。是解決如何避免開發和運維的黑天鵝問題。所
濾波器設計(2):經典FIR數字濾波器的設計
引言以前有一篇IIR濾波器設計的文章。與IIR相對應,這篇文章主要講FIR濾波器的設計。以下一段摘自百度百科。FIR(Finite Impulse Response)濾波器:有限長單位衝激響應濾波器,又稱為非遞迴型濾波器,是數字訊號處理系統中最基本的元件,它可以在保證任意幅頻
數據清洗小記(2):全角數字轉換半角數字
大局觀 山東 轉載 亞洲 pop rpm包 stats mod 法律 原創作品。出自 “深藍的blog” 博客,歡迎轉載,轉載時請務必註明出處,否則有權追究版權法律責任。深藍的blog:http://blog.csdn.net/huangyanlong/article/d
shell腳本學習(2)比較兩個數字大小
$1 num centos7 錯誤 you equal shel 腳本 語句 註意:shell中對比字符串只能使用==、<、>、!=、-z、-n。對比字符串時,末尾一定要加上x(或者a、b等)一個字符,因為if [ $1x == "ab"x ]時如果沒有了x
計算beta分布並畫圖(2)
except ont cat pos 數據統計 文件內容 sta () actor import java.awt.Font; import java.awt.GridLayout; import java.io.BufferedReader; import java.i
(2)響應式流——響應式Spring的道法術器
響應式編程 Spring WebFlux 本系列文章索引:《響應式Spring的道法術器》。前情提要: 什麽是響應式編程 1.2 響應式流 上一節留了一個坑——為啥不用Java Stream來進行數據流的操作? 原因在於,若將其用於響應式編程中,是有局限性的。比如如下兩個需要面對的問題: Web
Vivado HLS實現FIR濾波器(2)——Vivado呼叫HLS生成的FIR IP核
系統框圖 器件xq7a50tfg484-2I,兩個DDS,輸入時鐘100MHz,輸出分別為8MHz和12MHz,位寬為16位,相乘後輸出位寬32位,三角函式積化和差得4MHz訊號和20MHz訊號,濾波器設計採用Filter Solutions 2015,截止頻率10MHz,取樣率10
Tensorflow之MNIST手寫數字識別:分類問題(2)
整體程式碼: #資料讀取 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np from tensorflow.examples.tutorials.mnist import input_data mnis
新手上手Tensorflow之手寫數字識別應用(2)
本系列為應用TensorFlow實現手寫數字識別應用的全過程的程式碼實現及細節討論。按照實現流程,分為如下幾部分: 1. 模型訓練並儲存模型 2. 通過滑鼠輸入數字並儲存 2. 影象預處理 4. 讀入模型對輸入的圖片進行識別 本文重點討論模型的儲存以及讀入問題。 關於Tens
在實際的開發工作中,對字串的處理是最常見的程式設計任務。本題目即是要求程式對使用者輸入的串進行處理。具體規則如下: (1)把每個單詞的首字母變為大寫。 (2)把數字與字母之間用下劃線字元(_)分開,使得更
在實際的開發工作中,對字串的處理是最常見的程式設計任務。本題目即是要求程式對使用者輸入的串進行處理。具體規則如下: (1)把每個單詞的首字母變為大寫。 (2)把數字與字母之間用下劃線字元(_)分開,使得更清晰; (3)把單詞中間有多個空格的調整為1個空格。 &
流式大資料計算實踐(2)----Hadoop叢集和Zookeeper
一、前言 1、上一文搭建好了Hadoop單機模式,這一文繼續搭建Hadoop叢集 二、搭建Hadoop叢集 1、根據上文的流程得到兩臺單機模式的機器,並保證兩臺單機模式正常啟動,記得第二臺機器core-site.xml內的fs.defaultFS引數值要改成本機的來啟動,啟動完畢後再改回來 2、清空資
流式大數據計算實踐(2)----Hadoop集群和Zookeeper
nts 環境變量 技術 文件創建 con mon orm rm2 sam 一、前言 1、上一文搭建好了Hadoop單機模式,這一文繼續搭建Hadoop集群 二、搭建Hadoop集群 1、根據上文的流程得到兩臺單機模式的機器,並保證兩臺單機模式正常啟動,記得第二臺機器c
終於有人把雲端計算、大資料和人工智慧講明白了! (2)
此文已由作者劉超授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3大資料時代,眾人拾柴火焰高 當資料量很小時,很少的幾臺機器就能解決。慢慢的,當資料量越來越大,最牛的伺服器都解決不了問題時,怎麼辦呢?這時就要聚合多臺機器的力量,大家齊心協力一起把這個事搞定,眾人拾柴火焰高。 對
tensorflow學習(2):計算圖,tf.get_default_graph(),tf.Graph()
一、基本概念 顧名思義,TensorFlow的名字已經出賣了它的“靈魂”,TensorFlow=tensor(張量)+flow(流動)。TensorFlow是一個通過計算圖的形式來表達計算的程式設計框架。其每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。 計算圖
第10章 網路安全(2)_應用層安全(數字簽名)
3. 應用層安全——數字簽名 3.1 數字簽名 (1)數字簽名細節 ①A有一個金鑰對(A的私鑰SK和公鑰PK)。傳送檔案前先使用雜湊函式生成該檔案的摘要,再使用A的私鑰加密摘要(這個過程稱為簽名,私鑰持有者才能做這個操作)。 ②然後將加密後的摘要、A的公鑰和檔案(不加密
Leetcode題解之數學問題(2) 計算質數
題目:https://leetcode-cn.com/problems/count-primes/ 題目描述: 統計所有小於非負整數 n 的質數的數量。 示例: 輸入: 10 輸出: 4 解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。