FM調(diào)制是是恒包絡(luò)調(diào)制苫亦,基本沒有峰均比,PA利用率高枫耳,相對于幅度調(diào)制有更好的抗干擾性能乏矾,缺點(diǎn)是帶寬利用率低。
FM調(diào)制
FM調(diào)制信號(hào)表示如下迁杨,其實(shí)質(zhì)是差分頻率調(diào)制钻心,即該sample的頻率是前一個(gè)sample的頻率加上調(diào)制信號(hào)變化量,具體表現(xiàn)為每個(gè)sample相位的變化铅协。
假設(shè)|x(t)| ≤ 1捷沸,則fd是相對于中心頻點(diǎn)的最大頻偏。當(dāng)x(t)恒等于1時(shí)狐史,等效為上變頻fd痒给。
FM調(diào)制通常會(huì)拓展頻譜,這是因?yàn)轭l率調(diào)制的本質(zhì)是搬頻骏全,占用帶寬為最大的搬頻距離加上基帶帶寬苍柏,即R+2*fd,其中R為基帶信號(hào)帶寬(符號(hào)速率)姜贡,調(diào)制因子dm=fd/fmax序仙,fmax=R/2,|x(t)| ≤ 1
FM解調(diào)
FM解調(diào)使用差分解調(diào)鲁豪,提取相位變化量潘悼。
調(diào)制信號(hào)大小
根據(jù)FM調(diào)制原理律秃,t時(shí)刻調(diào)制的相位為
2*pi*fd*x(t-1)/fs+2*pi*fd*x(t)/fs
其中dt = 1/fs,相位增量為2*pi*fd*x(t)/fs治唤,需要滿足在[-pi pi]的范圍內(nèi)棒动,即x(t)*fd/fs的絕對值應(yīng)小于0.5,否則會(huì)造成相位溢出失真宾添。
在保證相位無失真的情況下調(diào)整x(t)的增益可直接調(diào)整調(diào)制信號(hào)帶寬船惨。
FM實(shí)現(xiàn)
FM實(shí)現(xiàn)需要框圖如下,解調(diào)時(shí)的fs可以不等于調(diào)制時(shí)的fs缕陕,具體通過延時(shí)N來調(diào)整粱锐,不能讓相位溢出
Matlab仿真
頻譜仿真
%% Plot Spectrum of FM Modulated Baseband Signal
% Apply FM baseband modulation to BPSK source and plot its
% spectrum.
clear;close all;
% Set the example parameters.
fs = 20e3;? ? ? ? ? ? ? % Sample rate (Hz)
ts = 1/fs;? ? ? ? ? ? ? % Sample period (s)
Rs = 1e3;? ? ? ? ? ? ? % Baseband symbol rate
dm = 1;? ? ? ? ? ? ? ? % FM modulation factor
fd = Rs/2*dm;? ? ? ? ? % Frequency deviation (Hz)
Nup = fs/Rs;? ? ? ? ? ? % Up-sampling times
%%
% Create a BPSK symbol source having a duration of 1s.
%%
Nsymb = 1*Rs;
symbBpsk = (randi([0 1],Nsymb, 1)-0.5)*2;
%%
% Upsampleing BPSK symbol to fs and shape it by Raised cosine FIR pulse-shaping filter
%%
rrcFilter = rcosdesign(0.25,20,Nup,'norm');
dataRrcIn = upsample(symbBpsk,Nup);
dataRrcTemp = conv(dataRrcIn,rrcFilter);
NtailRrc = floor(length(rrcFilter)/2);
dataRrcOut? = dataRrcTemp(NtailRrc+1:end-NtailRrc);
% Scale power, normalise the power of optimum sampling point, the scale
% of FM input signal will directly determine FM bandwidth
xOptSamp = dataRrcOut(1:Nup:end);
plot(xOptSamp,'*');
x = dataRrcOut/mean(abs(xOptSamp));
plot(x,'*');
%%
% Create an FM modulator System object and modulate the input signal.
%%
MOD1 = comm.FMModulator('SampleRate',fs,'FrequencyDeviation',fd);
y = step(MOD1,x);
%%
% Create another modulator object, |MOD2|, whose frequency deviation is
% two times larger and apply FM modulation.
%%
MOD2 = comm.FMModulator('SampleRate',fs,'FrequencyDeviation',2*fd);
z = step(MOD2,x);
%%
% Plot the spectra of the two modulated signals. The larger frequency deviation
% associated with channel 2 results in a noise level that is 10 dB higher.
%%
SA = dsp.SpectrumAnalyzer('SampleRate',fs,'ShowLegend',true);
step(SA,[x y z])
%%
調(diào)整信號(hào)大小仿真
% FM link
clear;close all;
fb = 1e3;?
dm = 1;
fd = Rs/2*dm;? ? ? ? ? % Frequency deviation (Hz)
fs = 8e3;
Nup = fs/fb;
data = (randi([0 1],1000, 1)-0.5)*2;? % BPSK
figure;plot(data,'-*');
% 成型濾波器
rrcFilter = rcosdesign(0.25,20,Nup,'norm');
dataRrcIn = upsample(data,Nup);
dataRrcTemp = conv(dataRrcIn,rrcFilter);
NtailRrc = floor(length(rrcFilter)/2);
dataRrcOut? = dataRrcTemp(NtailRrc+1:end-NtailRrc);
dataIn = dataRrcOut/mean(abs(dataRrcOut));? ? ? % Scale power
% 調(diào)制相位需要控制在[-pi pi],否則會(huì)造成相位失真,即 dataIn*fd/fs的絕對值不能超過0.5
dataIn = dataIn*fs/fd*0.5;? ?
maxDelta = max(abs(dataIn*fd/fs))
FMMethod = comm.FMModulator('SampleRate',fs,'FrequencyDeviation',fd);
modSymb = step(FMMethod,dataIn);
FMDeMethod = comm.FMDemodulator('SampleRate',fs,'FrequencyDeviation',fd);
demodSymb = step(FMDeMethod,modSymb);
isequal(fi(dataIn,1,13,10),fi(demodSymb,1,13,10))
return
% my function
addTemp = 0;
for i = 1:length(dataIn)
? ? addTemp = dataIn(i)+addTemp;
? ? modPhase(i,1) = 2*pi*fd*addTemp*(1/fs);
end
modSymbOut = exp(1j*modPhase);
dataDemodIn = modSymbOut;
% demod
dataDemodOut(1,1) = angle(dataDemodIn(1))/(2*pi*fd/fs);
Ndelay = 1;
for i = 1:length(dataDemodIn)-Ndelay
? ? deltaPhase = dataDemodIn(i+Ndelay)*conj(dataDemodIn(i));
? ? dataDemodOut(i+1,1) = angle(deltaPhase)/(2*pi*fd/fs);
end
isequal(fi(dataIn,1,13,10),fi(dataDemodOut,1,13,10))