📄 cp4fskdemod.m
字号:
function BitStream = cp4fskdemod(I_Symbol,Q_Symbol)
% ---------------------------------------------------------------
% Continue Phase Four level FSK demodulation Program,used for DMR,ETSI
% Written by zhengliangde, HYT Co.,LTD. 2005.11.4
% Contact: zhld_308@163.com
% ---------------------------------------------------------------
nSamp = 8; % number of samples per symbol
Fd = 4800; % symbol rate
Fs = nSamp*Fd; % sample rate
pi_Def = 3.1416; % pi define
freq_sep = 648; % frequency deviation
M = 4; % four level fsk
if Fs<freq_sep*(M-1)
error('The max Frequency must be less than or equal to Fs/2.');
end
freqs = [-3 -1 1 3] * freq_sep;
t = [0 : 1/Fs : (nSamp-1)/Fs]';
phase = pi_Def*t*freqs;
tones = exp(-j*phase);
% ----------convert to column vector -----------
I_Symbol = I_Symbol(:);
Q_Symbol = Q_Symbol(:);
for iSym=1:length(I_Symbol)/nSamp
yTemp = I_Symbol((iSym-1)*nSamp+1:iSym*nSamp) + ...
j*Q_Symbol((iSym-1)*nSamp+1:iSym*nSamp);
% Replicate the received signal to multiply with the M tones
yTemp = yTemp(:, [1;1;1;1]);
yTemp = yTemp.*tones;
yInt = Intgrt_and_Dump(yTemp,nSamp);
yMag = abs(yInt);
[maxVal,maxIndx] = max(yMag,[],2); % the max one of one row
Symbol(iSym) = maxIndx - 1;
end
% ------- Symbol to bitstream --------
for k=1:length(Symbol)
BitStream(2*k-1) = floor(Symbol(k)/2);
BitStream(2*k) = mod(Symbol(k),2);
end
function y = Intgrt_and_Dump(x,nSamp)
% Intgrt_and_Dump Integrate and dump.
[xRow, xCol] = size(x);
x = mean(reshape(x, nSamp, xRow*xCol/nSamp), 1);
y = reshape(x, xRow/nSamp, xCol);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -