1. 程式人生 > >1.1補充——AD位數對檢測訊號的影響

1.1補充——AD位數對檢測訊號的影響

% 一、程式說明:
% 本程式是AD量化噪聲的例項
% 首先對單一訊號進行6位量化和32位量化,觀察兩個訊號的頻譜。
% 其次,產生兩個功率相差45dB的兩個訊號,觀察小位數量對弱訊號的影響。

%程式名:A/D位數的影響
% 一、程式說明:
%     本程式是例了AD倆量化噪聲
%     首先對單一訊號進行6位量化和32位量化,觀察兩個訊號的頻譜。
%     其次,產生兩個功率相差45dB的兩個訊號,觀察小位數量對弱訊號的影響。
    
 clear;%清除記憶體
 close all;%關閉所有圖形
 x=sin(2*pi*(0:200)*0.042/10);%產生單載波的正弦訊號
 figure;
 plot(30:90,x(30:90),'b');
 grid on;
 ylabel('x(n)','FontSize',14);
 xlabel('n','FontSize',14);%標註XY座標名稱
 hold on;
 
 xd=intbR(x,5);%對訊號進行6位數量化
 plot(30:90,xd(30:90),'r');
 title('16位和6位時域數量化結果圖','FontSize',14);
 
 
 xf=fft(x,512);%求大位數量化訊號的頻譜
 xdf=fft(xd,512);%求小位數量化訊號的頻譜
 figure;
 plot((0:255)*10/512,20*log10(abs(xf(1:256))));
 grid on;
 ylabel('訊號頻譜','FontSize',14);
 xlabel('KHz','FontSize',14);
 title('16位數量化頻譜圖','FontSize',14);
 
 figure;
 plot((0:255)*10/512,20*log10(abs(xdf(1:256))));
 grid on;
 ylabel('訊號頻譜','fontsize',12);
 xlabel('KHz','FontSize',14);%標註XY軸座標
 title('6位數量化頻譜圖','FontSize',14);
 %---------------------------------------------------------------
 N=512;
 x=sin(2*pi*(0:N/2-1)*0.042/10)+0.0055*sin(2*pi*(0:N/2-1)*2.3/10);
 %產生大小不同的兩個正弦訊號
 %-----------------------------------------------------------------
 
 
  %產生大小不同的兩個正弦訊號,增加了一個很小的高頻訊號在裡面
 %-----------------------------------------------------------------
figure;
plot(0:N/2-1,x(1:N/2),'b');
grid on;
ylabel('X(N)','fontsize',14);
xlabel('N','fontsize',14);
title('隱藏微弱高頻訊號在裡面');




 xd=intbR(x,5);
 xf=fft(x,N);
 xdf=fft(xd,N);
 figure;
 plot((0:N/2-1)*10/N,20*log10(abs(xf(1:N/2))));
 grid on;
 ylabel('訊號頻譜','FontSize',14);
 xlabel('KHz','fontsize',14);%標註XY軸座標
 title('16位數量化頻譜圖','FontSize',14);
  
 figure;
 plot((0:N/2-1)*10/N,20*log10(abs(xdf(1:N/2))));
 grid on;
 ylabel('訊號頻譜','FontSize',14);
 xlabel('KHZ','fontsize',14);%標註XY軸的座標
 title('6位數量化頻譜圖','FontSize',14);
  
  

自定義函式部分:

  function br=intbR(d,b)%將十進位制數d利用舍入法得到b位(不包含符號位)二進位制數,然後
%   再將二進位制數轉換為十進位制數br
  m=1;dr1=abs(d);
  while fix(dr1)>0
      dr1=abs(d)/(2^m);
      m=m+1;
  end
  br=fix(dr1*2^b+.5);
  br=sign(d).*br.*2^(m-b-1);
  end
  

首先,我們來看第一部分

x=sin(2*pi*(0:200)*0.042/10);%產生單載波的正弦訊號
figure;
plot(0:200,x(1:201),'b');

這裡,在上一節已經講過,0.042是單載波正弦訊號的頻率,10是取樣率,於是生成了單載波的離散序列正弦訊號X
然後進行畫圖

在這裡程式中取的點範圍是【30:90】


下面進行量化,量化後的結果為紅色
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
由此我們可以看到解析度高的AD,頻譜是非常平滑的
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
現在我們來看在頻譜上,能否監測上述訊號含有高頻訊號,也就是說位數越多,解析度越高,越容易檢測到微弱訊號
在這裡插入圖片描述
在這裡插入圖片描述