數據量化與頻域分析


作者:桂。

時間:2017-03-24  18:46:24

鏈接:http://www.cnblogs.com/xingshansi/p/6612973.html 

聲明:歡迎被轉載,不過記得注明出處哦~


 

前言

本文的應用背景是:對序列信號進行頻域變換,從而估計頻率。但在信號處理中,通常需要對數據進行量化,以此減少量化位數從而減少數據量,另外在進行頻域變換時,對頻域的旋轉矩陣進行量化,同樣可以減少數據量。本文對應的專業術語:MonoDFT、單比特。全文主要分為:

  1)數據的量化;

  2)傅里葉旋轉矩陣量化;

之前朋友問我這個問題,覺得也算一種減少數據運算量的粗糙方式,記錄在此。

 

一、數據的量化

對采樣的數據進行量化,量化位數可以根據需求選定,正常數據量過大的話對於高頻采樣難以保證精度,此處以單比特為例。即$s_{quan} = sign(s)$。

以采樣率為$40Hz$為例,頻率為8的信號,對比采樣信號與單比特量化后的信號:

可以看出盡管由於單比特后信號成方波狀,引入諧波分量誤差以及其他頻率的雜波,但如果僅僅為了測頻——找到峰值點,則仍然是有效的。

 

二、旋轉矩陣的量化

該測頻方法有專業術語:MonoDFT.

即對矩陣W進行量化:

其實W對應在頻率圓周上采樣:

量化以后可以簡化運算(比如只用加減),具體不詳細討論,給出量化示意圖,以W量化成4個不同取值為例:

以8HZ信號進行頻率估計:

可以看出雖然引入誤差,但在信噪比合適的情況下,處理后的數據完全足以估計信號頻率。

但由於誤差的引入,只能對單個信號較為有效,以兩個為例:

這是兩個信號,但第二個頻率分量已經淹沒在噪聲中。

給出代碼:

clc;clear all;close all;
set(0,'defaultfigurecolor','w');
fs = 40;
f1 = 8;
f2 = 3;
t_end = 5;
t = 0:1/fs:t_end;
s1 = 0.35*sin(2*pi*f1*t);
s2 = sin(2*pi*f2*t);
s = s1+s2;
f = t/max(t)*fs;
N = length(t);
%====原數據-DFT
W = exp(-j*2*pi/N).^([0:N-1]'*[0:N-1]);
Sori = W*s';
%====單比特-DFT
s1 = sign(s);
Sori1 = W*s1';
%====單比特+旋轉因子量化
flag1 = real(W)>imag(W);
flag2 = real(W)>(-imag(W));
W1 = flag1.*flag2;
W2 = 1j*(~flag1).*flag2;
W3 = -(~flag1).*(~flag2);
W4 = -1j*flag1.*(~flag2);
Wnew = W1+W2+W3+W4;
Sori2 = Wnew*s1';
%====figure
figure;
subplot 321
stairs(t,s,'k');grid on;
xlim([0,t_end]);
ylim([-2,2]);
subplot 322
plot(f,abs(Sori),'k');grid on;title('原始信號');
subplot 323
stairs(t,s1,'k');grid on;
xlim([0,t_end]);
ylim([-2,2]);
subplot 324
plot(f,abs(Sori1),'k');grid on;title('單比特量化信號');
subplot 325
stairs(t,s1,'k');grid on;
xlim([0,t_end]);
ylim([-2,2]);
subplot 326
plot(f,abs(Sori2),'k');grid on;title('單比特量化+矩陣量化信號');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM