cp4fskdemod.m

来自「一个仿真测试4FSK信号的matlab环境GUI程序。可以查看基带IQ波形、眼图」· M 代码 · 共 53 行

M
53
字号
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 + =
减小字号Ctrl + -
显示快捷键?