f=4000; %訊號頻率為4khz
fs=48000; %取樣率為48khz
t=(0:1/fs:1000/fs); %定義訊號的時間範圍
x=cos(2*pi*f*t); %生成訊號
fir濾波器中的頻響是0~pi,因此如果取樣率是48khz,如上圖所示通帶中心在0.168附近,那通帶的訊號頻率應該是(48/2)*0.168 = 4khz左右。
fir ip的輸出實際的位寬和有效位寬可能不一致,如下圖所示的ip輸出位寬為40bit,實際有效位寬為36bit。有效頻寬內包含兩bit符號位,因此實際截位為bit34~bit19(擷取16bit)。
本例中可以輸入乙個4khz的正弦波,由於在通帶內因此不會衰減,看輸出的最高有效位在哪,實際測試最高有效位也是bit33,符號位為bit34.
fft使用:
fft的ip使用和fix16_15還是fix16_0沒有關係,不影響計算的結果,重點在於量化的精度,如果精度差太大就和matlab的結果差太大導致數值上對不上。
影響fft精度的因素:
1. phase factor 旋轉因子的位寬
2. 輸入資料的位寬(資料有效位寬為16bit時,fft的輸入放到只24bit,相當於輸入資料乘以256,也可以改善精度)
3. 輸入資料的範圍過小也影響精度,應該同比例放大至位寬範圍內最大值。
4. 動態配置ip時,需要仔細檢視文件pg109,page55 講的注意事項及方法。
5. 對於non-realtime以及realtime的不同模式,ip輸出的介面訊號是不一樣的,動態配置也和這個模式有關係。
6. 沒啥特殊情況,建議使用realtime模式
7. 某些情況下,fft和ifft的輸出結果實部可能很接近,不必糾結於此,看matlab對應的結果即可,另外此時虛部相差很大。
8. 輸入是16bit的情況下,如果輸入值很小(比方最大兩三百這種),那麼輸出的值和matlab的偏差會很大,極有可能連符號位都對不上,其實是因為精度導致的,
此時把fft的輸入設定成24bit,將16bit資料對映到高16bit,低8bit可以理解為作為fft運算中間值的精度擴充套件位,運算的結果再取高32位,可以極大的改善精度,基本能和matlab對應上。
訊號的取樣以及matlab實現
在matlab當中對乙個連續訊號進行取樣,往往不是那麼容易的理解,這是因為在matlab中畫一條連續曲線其實已經進行了取樣,matlab中所有的曲線都是用點擬合出來的,點越密,畫出來的曲線也就越清晰,下面用程式說明 close clear all fd 1000 fd就是取樣頻率,只有fd取得越大,...
Matlab生成各種偽隨機訊號 idinput指令
只要是在訊號系統這條道上混過的童鞋都知道,衝激訊號是測試系統的最理想訊號。因為時域的卷積相當於頻域的乘積,而衝擊訊號的頻域擁有最廣泛的頻譜,可以 暴露 系統最完整的資訊,那麼問題來了?這麼好的東西,你咋就不用呢?傻 還真不是這樣,能讓我們計算機產生乙個理想的衝激訊號那是多難的事啊!想象狄拉克,就被難...
matlab訊號處理
閒暇時間寫了一些關於訊號處理的東西,基於matlab.訊號時域分析時的常用函式 方法 1.impulse impulse用於求連續系統衝激響應,並繪製其時域波形。呼叫格式 impulse b,a or impulse b,a,t or impulse b,a,t1 t2 b,a 系統方程對應的係數矩...