freqoffset.m

来自「频率恢复的matlab实现方法」· M 代码 · 共 67 行

M
67
字号
function opfilename = freqoffset(ipfilename, carroff)%  add carrier frequency offset to a file of 'SYSCLK' sampled complex data%%  opfilename = freqoffset(ipfilename, carroff)%  ipfilename: input file (*.bce), output filename is ipfilename with 'no_' prepended%  carroff: carrier offset in Hz%  ---------------------------------------------------------------------------switch nargincase 2  % nullotherwise  error('incorrect argument count');endglobal SYSCLK% open filesipfilename = setfiletype(ipfilename, 'bce');opfilename = ['fo_' ipfilename];opfilename = setfiletype(opfilename, 'bce');ipfid = fopen(ipfilename, 'r');if ipfid <= 0, error('unable to open source file'); endopfid = fopen(opfilename, 'w');if opfid <= 0  fclose(ipfid);  error('unable to open the destination file')end% process data in memory in BlockSize size blocksBlockSize = 50E3;LastPhase = 0;%added by huanglou[IF_PID, msg] = fopen('IF_DATA', 'w');if (IF_PID == -1), error(msg); end% process until run out of file datawhile ~feof(ipfid)  [data, datalen] = fread(ipfid, 2*BlockSize, 'float32');  if datalen ~= 0    datalen = datalen/2;    % convert data to complex    data =  [ 1 1i ] * reshape(data, 2, datalen);        % add the frequency shift    LoscPhase = LastPhase + 2*pi*carroff*(1:datalen)/SYSCLK;    LastPhase = mod(LoscPhase(end),2*pi);    data=data.*exp(j*LoscPhase);        % write out the result    count = fwrite(opfid, [real(data);imag(data)], 'float32');    count_if= fwrite(IF_PID, [real(data);imag(data)], 'float32');    if count ~= 2*datalen      error('unable to write data completely');    end  endendfclose(IF_PID);fclose(ipfid);fclose(opfid);%  ------------------------------------END------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?