深度剖析MATLAB信號處理仿真-基帶脈衝成形

2020-11-21 電子發燒友

本次我們探討另外一個在本科階段讓我們頭痛的東西,通信原理之必考曲目,拼死也要背下來的內容,基帶脈衝成形。然而俺對這個東西的理解和認識卻是在本科以後的事情。

早年(比如摩託羅拉手機時代)的基帶成形都是用模擬電路做的,那會兒的數字電路密度極低,想想大學本科數電實驗裡面的各種74系列晶片,如果用這個東西拼個數字濾波器估計會瘋掉。況且,就算有數字濾波器,高速高精度的ADC、DAC也是個問題。所以,早些年的數字電路課本的名字通常叫做「脈衝與數字電路」,言下之意,這東西用來處理脈衝信號的,而且,也就處理處理脈衝信號,千萬別想著整太複雜的東西,那會還是一個模擬電路統治著通信系統的時代。

問題在於,除了打電話這種事情,人們還是有傳送數據的需求的,比如說像尋呼機這種無線數字通信系統,更早的,比如鄭君裡老師在 《教與寫的記憶-信號與系統評註》提到的他年輕時候的神器「1200波特數傳機」這東西用現在的話講叫做「1200波特率數據機」,送你一臺上網用,你肯定嫌慢,但是在當時是要國家立項的重大課題。如果你願意去一些通信原理或是信號與系統的課本裡面考古,也許會看見有些習題專門探討如何設計一個模擬的升餘弦滾降濾波器。在那個時代裡,數字電路的任務是把要發送的比特信息變換成脈衝信號,就是一些列各種幅度(多進位調製)的方波,我們在信號與系統的課程裡知道,方波信號的帶寬是無窮大的,所以後級的模擬成形濾波器負責把這些方波的頻譜帶寬變小,同時又要滿足時域採樣點無失真的準則。

我們在數位訊號處理課程裡面學習過IIR濾波器,而且還有「雙線性變換法」,「衝擊響應不變法",以及各種讓我們頭暈的東西,我小時候第一次學這東西的時候在想,整這個玩意兒幹嘛,後來才明白,這東西是為了用數字的方法來實現以前的模擬濾波器,模擬濾波器都是有極點的,映射到數字域中,就是IIR濾波器,那麼為什麼要替換掉模擬濾波器呢,有兩個原因,一是為了提高通信產品的一致性,模擬元件比如電容、電阻的值是無法嚴格準確生產的,至於電感就是個更加不靠譜的東西,這就導致每個模擬電路元件被製造出來都不會完全一樣,如果系統中大量使用模擬元件,最後誤差的積累會是個大問題,所以設計者會預先在電路裡面加入一些參數可調的元件,在最後的組裝階段讓工人師傅看著測試儀器手動調節產品。數字電路則不同,一旦被生產出來,行為完全一致,後期的組裝調試環節大為簡化,所以更加有生產的效率,若你玩過紅色警報、星際爭霸應當知道,快速生產可是個大事情。 

以上這個行為一致性的優點只是一方面,另一方面,更加有吸引力的是,數字電路中有一個概念叫做」等比縮小「,比如最早的計算機有房子那麼大,可能連你手機裡面處理器計算能力的百分之一都沒有,我以前為了做某些算法,去70年代的IEEE trans 裡面考古,發現某些科學家在文章的末尾貼試驗數據的章節裡炫富,」俺這個快速算法在擁有1M字節內存的XX型號的IBM豪華大型機上的運行時間是12秒「,俺當時感到唏噓不已。所以,你在現在的港產警匪片裡面再也看不到大佬們要專門配備一個小弟替他拿電話並且大佬還要用行動電話砸人了。

如果不是為了替換模擬時代的濾波器,或是為了適應一些特殊的自適應濾波器的需求,我是會儘量迴避使用IIR濾波器的,尤其是在用FPGA作為實現手段的場合。為什麼?因為這個有極點的濾波器真是對量化噪聲極其敏感啊,動不動就自激振蕩啊,調過一次之後被折騰的七葷八素的,後來就再也不敢用了,還是乖乖的用FIR濾波器,讓領導給買個大晶片頂上先。如果是在處理器上,尤其是支持浮點的CPU,做做倒是無妨,但是也要注意濾波器如果階數高了,IIR這東西仍然是個危險品。

所以,在數位訊號處理的領域,基帶成形濾波器通常的選擇還是FIR,在用數字的方法進行基帶成形時,需要額外注意的一個事情就是多速率,這是容易混淆的地方,這種成形濾波器有兩個速率,一個是輸入的符號的速率,濾波器的輸入是一系列或正或負的脈衝串,這個脈衝串是由要傳輸的信息比特經過符號映射得到的,如果是多電平調製的方式,脈衝串會有多種幅度,最簡單的映射方式是:信息比特0映射為脈衝符號-1,信息比特1映射為脈衝符號+1,這個脈衝符號是什麼呢,就是「奈奎斯特準則」裡面所說的「採樣點無失真」的採樣點,這個採樣點指的就是脈衝符號。另一個速率呢,就是濾波器輸出波形的採樣率,根據採樣定理,不能小於2倍的信號帶寬,而且,有時候為了其他的原因,比如簡化濾波器的設計,可能會用更高的採樣率。

好了,這裡我們又要展示一個蹺蹺板了,如同短時傅立葉變換中的時域、頻域解析度是蹺蹺板的兩端。這個基帶成形設計也有個蹺蹺板,讓我們來看看。

所謂蹺蹺板,就是說,有若干個參數,而且相互之間有制約,調節了一個參數,另外的參數會隨之改變,通常我們的做法是,先固定一部分,然後調節另外的,再觀察調節的結果。

幸好,這裡只有三個參數,根據通信原理的課本,當採用升餘弦滾降濾波器進行成形的時候,這三個參數為:脈衝符號的速率 Rs,滾降係數beta,生成的窄帶信號的帶寬BW,課本上說了,BW=Rs(1+beta)/2,beta是一個介於0、1之間的小數,這個表達式很簡單,它說明了這樣一個事實:對於符號速率為Rs的脈衝串,如果要做到採樣點無失真,用一個帶限信號傳輸它,那麼這個帶限信號的帶寬將會介於0.5Rs和Rs之間。這時我們蹺蹺板的一頭是信號帶寬,另一頭是濾波器的頻響形狀,你看下面這個圖,從wiki拷貝下來的,這個beta=0的時候是「磚牆」牌的理想低通啊,這可不是鬧著玩的,所以說,如果要求傳輸固定速率的脈衝符號,要想節省帶寬,就要做一個能夠逼近「磚牆」的高性能濾波器,否則就得多佔用帶寬,這個被固定下來的符號速率呢,就是蹺蹺板的支點。另外,我們也可以舉出另外的案例,比如說,固定下來傳輸帶寬,這時蹺蹺板的兩頭分別是濾波器滾降係數和符號速率,這和之前的案例本質上都是一樣的,不失一般性,我們下面把符號速率當做蹺蹺板支點來討論。

此處,我們提供了一段代碼,這段代碼表達了一個1200波特/秒的脈衝串,在通過不同配置的成形濾波器後所產生信號的時頻特性。

成形濾波器採用的matlab函數是rcosine,除了要配置符號率、滾降係數、輸出波形的採樣率之外,還需要配置一個濾波器延遲,這個參數是幹啥的?通信原理的課本沒說,答案在數位訊號處理的課本中,因為我們知道,FIR濾波器在概念上是個多抽頭的移位寄存器,問題在於一旦你通過滾降係數指定了濾波器的頻響曲線形狀,另外還要決定的是,你準備用多少個抽頭的FIR來實現這個濾波器,抽頭越多,實現的FIR的頻響阻帶抑制越好,但是代價是,運算量和延遲。OK,是的,你又發現有蹺蹺板了。注意,這個函數的延遲參數的單位是脈衝符號的個數,即相對於輸入端的延遲。

下面我們開始玩弄這個代碼了。

先找一個比較中庸的配置,滾降係數0.5,採樣率是3倍的符號率,濾波器延遲是8(個脈衝符號),由於FIR是中心對稱的,你可以看到,總共的抽頭係數是3*8*2+1=49個,通過下面這張時域的圖你可以看到濾波器衝擊響應的時域波形,以及輸入的信息比特被映射為幅度是+1、-1的脈衝串,並且,被做了補零插值當做濾波器的輸入。然後,在濾波器輸出信號中你看看,是否實現了採樣點無失真呢(請關注那些幅度是+1,-1的樣點)?這個時域的信號的原始信息比特是0x47,數字衛星標準中的著名幀頭。噢,等等,你是否覺得有點眼熟,對了,其實數位化的成形濾波器就是一個多速率信號處理裡面的插值濾波器,這個我們在之前的系列文章中是有討論的。

滾降係數0.5

插圖,時域波形

然後我們看看頻域的幅頻曲線,分別是線性尺度和dB尺度,我們看到這個濾波器的設計截止頻率是900Hz,這符合公式的計算,而實現出來的濾波器的阻帶衰減是-60dB左右。

插圖,濾波器頻響

接下來,看看全部信號的加窗DFT頻譜,同樣,可以看到,在900Hz的位置衰減到-60dB

插圖,加窗DFT頻譜

然後我們關注一下短時的幅頻特性,上STDFT(短時傅立葉變換)頻譜。

插圖,瀑布圖頻譜

好,其它參數不變,我們改改滾降係數,首先是滾降係數為0的插圖,時域波形

磚牆是不可能完美實現滴,無限逼近吧,你看這個頻譜,還記得信號與系統課本裡面,有個詞彙叫做「吉布斯現象」麼?

注意看看濾波器的通帶寬度和阻帶衰減,慘不忍睹的-20dB啊

插圖,濾波器頻響

這信號帶寬是600Hz,帶外雜散很大。

插圖,加窗DFT頻譜

短時分析也是如此

插圖,瀑布圖頻譜

接下來,再把滾降係數為改為1。

插圖,時域波形

插圖,濾波器頻響

插圖,加窗DFT頻譜

插圖,瀑布圖頻譜

通信系統的確是複雜且零碎的一門學科,希望本文對您的學習能盡到綿薄之力,網絡上曾有詩曰:

天若有情天亦老,人學通信死得早。商女不知亡國恨,隔江猶看資訊理論。問君能有幾多愁,誤碼率都不會求。兩岸猿聲啼不住,互相討論譜密度。忽如一夜春風來,信號流圖不會排。洛陽親友如相問,直接去問韓聲棟。風蕭蕭兮易水寒,調製解調各種難。垂死病中驚坐起,明天要考載噪比!

以下是代碼片段:

%///////////////////////////////////////////////////////////% base band shaping use raised cosine FIR filter%///////////////////////////////////////////////////////////close all;clear;clc;

rate_symbol   = 1200                ; % input symbol raten_itp         = 3                   ; % num of interpolationfilter_delay  = 8                   ;roll_off      = 1.0                 ;

head_bit      = [0 1 0 0 0 1 1 1 ].';total_bit_len = 2048;bit_map       = [-1 1]              ;

head_bit_len  = length(head_bit);info_bit      = randint(total_bit_len-head_bit_len,1);

total_bit     = [head_bit; info_bit];

head_itp_len  = head_bit_len * n_itp;

fs_filter_out = n_itp*rate_symbol     % filter output sample rate

filter_delay_in_sample     = n_itp*filter_delay ; 

coeff = rcosine(rate_symbol, fs_filter_out, ...        'fir/normal', roll_off, filter_delay);

coeff       = coeff .'              ;

% map info_bit to multi-level signalsignal_1x       = bit_map(total_bit + 1) ;

len_1x          = length(signal_1x)     ;

len_itp         = len_1x * n_itp        ;signal_itp      = zeros(len_itp,1)      ;% write the original signal value into itp signalsignal_itp(1:n_itp:len_itp-n_itp+1) = signal_1x;

data_conv       = conv(coeff, signal_itp);data_conv       = filter(coeff,1, signal_itp);filter_out      = data_conv   ;

signal_itp_x_axis = [1:head_itp_len] + filter_delay*n_itp;

figure;head_itp  = signal_itp(1:head_itp_len);head_conv = data_conv(1:head_itp_len+filter_delay_in_sample);

subplot(3,1,1); plot(coeff, 'linewidth',1.5); grid on; ylim([-0.3, 1.2]);title('Filter Coeff', 'FontSize', 16);

subplot(3,1,2); stem(head_itp,...'--ms', 'MarkerEdgeColor','k','MarkerFaceColor','g', 'MarkerSize',6 );title('Header Bits Mapped to Symbol with Interpolation', 'FontSize', 16);ylim([-1.2, 1.2]);grid on;

subplot(3,1,3); stem(signal_itp_x_axis, signal_itp(1:head_itp_len), ...'--ms', 'MarkerEdgeColor','k','MarkerFaceColor','g', 'MarkerSize',6 );grid on; hold;subplot(3,1,3); plot(head_conv, 'linewidth',1.5);grid on;title('Header Bits after Pulse Shaping Filter Output ', 'FontSize', 16);

kaiser_beta     =  8    ;

kaiser_win_spectrum_plot(fs_filter_out, filter_out, kaiser_beta);title('Total Signal Spectrum', 'FontSize', 16);

len_w = floor(total_bit_len /8);  len_o = floor(len_w * 0.8); len_d = len_w    ;figure  ;% use tic toc get running timespectrogram(filter_out, len_w, len_o, len_d, fs_filter_out);title('Spectrogram', 'FontSize', 16);% get filter frequency reponse vector over 0~pi[f_rp_vec ,w_pi] = freqz(coeff);x_half_fs = w_pi/pi(fs_filter_out/2);f_rp_vec_norm_dB =  20log10(abs(f_rp_vec)+1E-10);f_rp_vec_norm_dB = f_rp_vec_norm_dB - max(f_rp_vec_norm_dB);

figure;ideal_f_rp_vec = (x_half_fs < fs_filter_out/(2n_itp))n_itp;

subplot(2,1,1);h1 = plot(x_half_fs, abs(f_rp_vec),  ...x_half_fs, ideal_f_rp_vec, '-r', 'linewidth', 1.5);grid on;

title('Filter frequency response, Linear Scale', 'FontSize', 16);legend('Actual filter response', 'Ideal filter response');subplot(2,1,2);plot(x_half_fs, f_rp_vec_norm_dB, 'linewidth', 1.5);grid on;title('Filter frequency response, dB Scale', 'FontSize', 16);ylim([-120, 5]);

相關焦點

  • 雷達知識三之雷達信號處理(2)
    仿真工具和其各種類型的算法,講解高校涉及matlab的相關課程,免費提供通信類、導航類的產品級物理層算法、數據統計分析算法、圖像處理算法、AI算法。系統仿真 第一章 信號和濾波器電氣信息類專業課程之matlab系統仿真 第二章 深入理解濾波器?
  • 基於MATLAB的數字基帶傳輸的 FIR濾波器的設計
    O 引言 目前,數字基帶傳輸已廣泛地應用於利用對稱電纜構成的近程數據通信系統之中。隨著數字通信技術的發展,基帶傳輸方式不僅可以用於低速數據傳輸,而且也可以用於高速數據傳輸。
  • 基於FPGA IP核的線性調頻信號脈衝壓縮-電子發燒友網
    如果是多目標環境,較大的旁瓣會埋沒附近的小目標信號,為了抑制旁瓣,可以採用加權技術。其實質就是對信號進行失配處理以抑制旁瓣,其副作用是使輸出信號的主瓣降低並展寬。   1.3 理論仿真        設匹配濾波器的輸入信號是線性調頻I/Q基帶信號,帶寬為40 MHz,採樣頻率為100 MHz,脈衝寬度為6μs,信號幅度為1,通過Matlab對其進行脈衝壓縮仿真。
  • 如何使用MATLAB仿真實現數位訊號調製的性能比較和分析
    數位訊號有兩種傳輸方式, 分別是基帶傳輸方式和調製傳輸方式, 即帶通,在實際應用中, 因基帶信號含有大量低頻分量不利於傳送, 所以必須經過載波和調製形成帶通信號, 通過數字基帶信號對載波某些參量進行控制, 使之隨機帶信號的變化而變化, 這這一過程即為數字調製。
  • 基於MATLAB軟體心跳呼吸模型建立與仿真設計
    在生命探測和醫學研究領域,都需要進行心跳呼模型的仿真。MATLAB是MathWorks公司於1982年推出的一款高性能的數值計算和可視化數學軟體。它可以用來求解各類學科問題,包括信號處理、圖象處理、神經網絡、控制系統辨識等。用MATLAB對心跳呼吸進行仿真,可以大大提高仿真工作效率。
  • 基於MATLAB GUI的數位訊號處理仿真平臺的設計
    1.引言本文引用地址:http://www.eepw.com.cn/article/227566.htm數位訊號處理,是現今應用成效最顯著、應用領域最廣的新科學之一,國內外各高校均開設了數位訊號處理課程。
  • 基於FPGA的脈衝壓縮仿真與實現
    本文引用地址:http://www.eepw.com.cn/article/192017.htm2 脈衝壓縮2.1 脈衝壓縮處理過程 脈衝壓縮處理有時域和頻域兩種方式。其中.時域處理是由數字有限衝擊響應(FIR)實現的過程,即信號與係數的卷積;而頻域處理則是先用FFT計算出數字回波信號的頻譜S(ω),再將其與匹配濾波器的頻響H(ω)相乘,最後進行快速傅立葉反變換(IFFT),得到脈壓結果。一般而言,對於大時寬帶寬信號,採用頻域處理較好;對於小時寬帶寬信號,採用時域處理較好。脈衝壓縮信號實現方法有:線性調頻信號、非線性調頻信號和相位編碼信號。
  • 三門問題及matlab仿真驗證
    今天看到一個問題——三門問題,感覺挺有趣的,自己也親自上手利用matlab仿真模擬了一下,分享給大家。【三門問題】三門問題出自美國的電視遊戲節目Let's Make a Deal,因為是由一個叫蒙提霍爾的人提出的,所以也叫蒙提霍爾問題。
  • 一種隨鑽泥漿脈衝信號的處理方法
    研究了泥漿脈衝信號特徵,設計了對其基於最大似然估計閾值去噪、平滑及去除基線漂移的信號處理方法。利用該方法進行信號處理,能較好的恢復信號的特徵。在井口採集到的信號是泥漿正脈衝信號與噪聲的加性混合信號。脈衝信號是一種常見的信號,其概率密度函數為典型的稀疏分布。
  • R&S矢量源及信號分析儀的無線系統仿真及設計
    但是,由於缺少實際的被測系統,在系統仿真和模塊仿真階段如何進行相應的驗證一直是困擾設計人員的主要問題。因此從設計初期開始就有必要引入相應的測試功能,這也是整個無線系統設計的重點和難點。本文引用地址:http://www.eepw.com.cn/article/194443.htm  基於羅德與施瓦茨(RS)公司的矢量源和信號分析儀可以充分利用仿真設計軟體的優勢,構建無線系統的通用仿真平臺,完成從天線設計、射頻電路與系統仿真、頻率合成仿真、基帶信號處理等全系統仿真任務
  • 脈衝信號測試對示波器帶寬的要求
    脈衝信號又分為基帶脈衝信號和射頻脈衝信號,本文將從這兩個方面著手定性的分析脈衝信號測試對示波器帶寬的要求。 1. 基帶脈衝信號測試:對於這類信號,有一個參數對示波器的帶寬要求極高,那就是上升/下降時間。如果比較關註上升/下降時間的測試精度,則示波器本身的上升時間一定要儘量小,這就要求帶寬足夠大,具體選擇方法可參考文章《選擇示波器時的「5倍法則」》。
  • MATLAB對AC/DC/AC電源的死區效應諧波仿真
    因此,可證明式(1)中,(θ1、θ2等為脈衝觸發時刻,即三角波與正弦波的交點),式中N為偶數。對上式各項求積分,可證明當k為任意奇數時。3 仿真實例首先由50Hz工頻電源引出,經過一個Y/Δ變換的變壓器,變為整流器可接受的低壓。再經整流和濾波後,送入IGBT逆變器,逆變器的觸發信號由帶死區的PWM信號送入。然後再經三相濾波後,送入負載。
  • Iphone11使用英特爾基帶,同高通基帶比,信號怎麼樣?
    從2017年蘋果高通事件以後,蘋果手機就開始大量使用英特爾的基帶,不少用戶總是抱怨,英特爾基帶的iphone手機信號特別差,不光是上網信號不好,而且打電話也經常掉線不在服務區內,很多使用英特爾基帶iphone手機的用戶可以說是深有體會。
  • UWB脈衝波形形成方法簡述
    首先介紹了UWB成形脈衝的算法,然後基於Hermite矩陣和Chirp信號得到了UWB的成形脈衝。在對Chirp脈衝的帶寬、中心頻率等性能參數比較分析的基礎上,將若干個Chirp脈衝信號進行線性疊加,通過仿真結果表明,隨之產生的脈衝信號不僅滿足FCC對UWB脈衝信號輻射功率要求,而且其脈衝信號的頻譜利用率也很高,同時還能有效抑制對其他窄帶系統的幹擾。 UWB是一種無載波通信技術,利用納秒至亞納秒級的非正弦波窄脈衝傳輸數據,所佔頻譜範圍很寬,適用於高速、近距離的個人無線通信。
  • 單相橋式整流電路在MATLAB中的建模與仿真
    加觸發脈衝,VT1和VT4導通,電流從電源a端經VT1、R、VT4流回電源b端。當u2過0的時候,流過晶閘管的電流也降到0,VT1和VT4關斷。2 單相橋式全控整流電路在MATLAB/Simulink的建模與仿真2.1 單相橋式電路的仿真模型單相橋式全控整流電路主要由交流電源、晶閘管、RLC負載等構成,其在MATLAB/Simulink仿真模型如圖2所示。
  • 精通信號處理設計小Tips(8):檢測淹沒在噪聲中的信號
    本文作者maxfiner,畢業於西安電子科技大學,擁有信號與信息處理專業碩士學位。  相應的matlab仿真驗證代碼如下,  fs = 5e3;  n = 0:1/fs:1;  len = length(n);  freq = 100;  s = sin(2*pi*freq*n);  n = randn(1,len);  x = s + n;  rr =
  • 易於工程實現的脈衝信號實時測頻算法
    易於工程實現的脈衝信號實時測頻算法 任季中 發表於 2017-11-17 17:12:57 脈衝信號是現代雷達主要採用的信號形式,脈衝信號頻率測量是雷達偵察中不可或缺的環節,對雷達對抗起著重要的作用。
  • 多通道相參矢量信號產生和分析系統
    1:利用ADS,Matlab, Signal Studio等軟體完成複雜調製信號波形建立,按照合成信號要求進行雷達脈衝調製信號計算,數字調製信號基帶編碼,時空編碼等。2:利用E4438C信號源或E8267D信號源構建多路相位相參矢量調製信號系統,輸出的各路信號間時間,相位和功率關係可控。
  • 基於MATLAB/Simulink的單相橋式整流電路建模與仿真
    仿真結果和理論分析一致,為單相橋式全控整流電路的研究打下了堅實的基礎。2 單相橋式全控整流電路在MATLAB/Simulink的建模與仿真2.1 單相橋式電路的仿真模型單相橋式全控整流電路主要由交流電源、晶閘管、RLC負載等構成,其在MATLAB/Simulink仿真模型如圖2所示。
  • 基於SystemView的調頻信號的調製解調仿真
    第一種變換:將消息變為原始電信號,由於原始電信號通常具有很低的頻率分量,一般不宜直接傳輸;第二種變換:將原始電信號(基帶信號)變為適合信道傳輸的頻帶信號,在接收端再進行相反變換。這種變換和反變換通常稱為調製和解調。調製解調技術在現代通信系統中起著十分重要的作用,他直接影響通信的質量和速度。