Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中的MFSK(多级频移键控)_Matlab_Wireless - Fatal编程技术网

MATLAB中的MFSK(多级频移键控)

MATLAB中的MFSK(多级频移键控),matlab,wireless,Matlab,Wireless,首先,我要指出这是一项家庭作业。我没有要求任何人为我做作业,我会证明我一直在这里工作,但我遇到了一个我似乎无法解决的问题。我是MATLAB新手,所以这可能与我的一些问题有关 我试图使用MATLAB对给定的数据集执行MFSK。我在计算实际信号时遇到了一个问题。当我试图找到arccos时,我得到了奇怪的结果,其中包括我无法绘制的虚数。我将在编写代码后提供这些结果 我得到以下数据: 10 01 01 10 01 11 我将创建四个M=4信号,使用 fc=5 KHz,fd=500 Hz 为了创建四个M=

首先,我要指出这是一项家庭作业。我没有要求任何人为我做作业,我会证明我一直在这里工作,但我遇到了一个我似乎无法解决的问题。我是MATLAB新手,所以这可能与我的一些问题有关

我试图使用MATLAB对给定的数据集执行MFSK。我在计算实际信号时遇到了一个问题。当我试图找到arccos时,我得到了奇怪的结果,其中包括我无法绘制的虚数。我将在编写代码后提供这些结果

我得到以下数据:

10 01 01 10 01 11

我将创建四个M=4信号,使用

fc=5 KHz,fd=500 Hz

为了创建四个M=4信号,我将使用方程7.3,可以在这里看到:

最后,我将对代表两位模式的FSK信号进行采样并绘制样本。假设每个符号的时间段为1 ms

到目前为止,我所做的工作是:根据方程式7.3,我已将fc、fd和M.I循环从1初始化为4,并计算fi。这将产生四个值:3500、4500、5500、6500。根据我的理解,“00”对应3500,“01”对应4500,“10”对应5500,“11”对应6500

使用这些值,我现在可以将它们应用于方程7.3。我循环通过FSK信号mfsk,对于每个两位样本,我运行方程7.3。这是Acos2*pi*fi*t方程。根据我的理解,如果当前样本是'01',我会使用4500,例如

这种方法给了我奇怪的结果,我不明白

我的代码如下:

mfsk = {'10', '01', '01', '01', '10', '10', '01', '11'};

fc = 5000;
fd = 500;
M = 4;

fi = [];

%Equation 7.3 used to create 4 M=4 signals
%fi(1) = '00', %fi(2) = '01', %fi(3) = '10', %fi(4) = '11'
for i = 1:4
    fi = [fi, fc + ((2 * i) - 1 - M) * fd];
end

mfskSample = [];

for t = 1:8
    if char(mfsk(t)) == '00'
        mfskSample = [mfskSample, acosd(2 * pi * fi(1) * t)];
    elseif char(mfsk(t)) == '01'
        mfskSample = [mfskSample, acosd(2 * pi * fi(2) * t)];
    elseif char(mfsk(t)) == '10'
        mfskSample = [mfskSample, acosd(2 * pi * fi(3) * t)];
    else
        mfskSample = [mfskSample, acosd(2 * pi * fi(4) * t)];
    end
end
结果:

mfskSample=

1.0e+02*

第1列至第6列

0.0000+6.3848i 0.0000+6.6669i 0.0000+6.8993i 0.0000+7.0641i 0.0000+7.3069i 0.0000+7.4114i

第7列至第8列

0.0000+7.3847i 0.0000+7.6719i


感谢您的帮助。您的程序有两个主要问题

Matlab中的余弦函数是cos,而不是acosd。但我相信你是在尝试输入书中提到的振幅。 考虑奈奎斯特采样定理。您的载波频率为5k Hz,因此评估信号sit的最大时间间隔为0.2 ms。这将确保您可以看到载波的完整正弦波。然而,为了观察mfsk代码,您还必须确保每个mfsk位持续足够的时间;在我的例子中,为了直观地观察它,我将比特长度设置为调制差频的几个完整周期。因此,在单个mfsk比特的时间内,将有几个调制信号周期和数百个载波信号。 下面是一些可能满足您需要的代码

mfsk = {'10', '01', '01', '01', '10', '10', '01', '11'};
nfsk = length(mfsk); % length of mfsk string

fc = 5000;
fd = 500;
M = 4;

%Equation 7.3 used to create 4 M=4 signals
%fi(1) = '00', %fi(2) = '01', %fi(3) = '10', %fi(4) = '11'
fi = fc + ((2 * (1:M) ) - 1 - M) * fd;

tbit = 5e-3; % time per fsk bit [seconds]
nbit = tbit*fc*5; % # data points in one fsk bit, including Nyquist factor

tSample = linspace(0,nfsk*tbit, 1+nfsk*nbit);
% find frequency fi for every time points
freqSample = 0*tSample;
for nn = 1:nfsk
    nCurrentBit = (1+(nn-1)*nbit) : (nn*nbit);
    switch char(mfsk(nn))
        case '00'
            fCurrentBit = fi(1);
        case '01'
            fCurrentBit = fi(2);
        case '10'
            fCurrentBit = fi(3);
        case '11'
            fCurrentBit = fi(4);
        otherwise % wrong mfsk code
            fCurrentBit = 0;
    end
    freqSample(nCurrentBit) = fCurrentBit;
end
freqSample(end) = freqSample(end-1);

% evaluate carrier signal on each time point
A = 1; % amplitude
mfskSample = cos(2*pi * freqSample .* tSample);
plot(tSample, mfskSample)