我使用LMS的Matlab代码(最小均方算法)来均衡通道的效果,它适用于在MATLAB中生成的抽头延迟通道,但对于使用光谱系统程序的光纤通道,它不能正常工作,我认为问题在于光纤脉冲响应,因为它不是有限脉冲响应而且算法需要有限的脉冲响应但是如何解决这个问题呢?
在MATLAB通道和光纤通道的星座中,很明显第二个星座没有得到很好的均衡.
星座:

以下是LMS算法无法补偿其影响的噪声通道的示例,有没有办法在此SNR上增强其性能:
% // Set up parameters and signals.
M = 4; % // Alphabet size for modulation
msg = randint(15000,1,M); % // Random message
modmsg = pskmod(msg,M); % // Modulate using QPSK.
trainlen = 5000; % // Length of training sequence
chan = [.986; .845; .237; .123+.31i]; % // Channel coefficients
filtmsg = filter(chan,1,modmsg); % // Introduce channel distortion.
filtmsg=awgn(filtmsg,10,'measured');
% // Equalize the received signal.
eq1 = lineareq(8, lms(0.01)); % // Create an equalizer object.
eq1.SigConst …Run Code Online (Sandbox Code Playgroud) 我用c ++编写了一个程序来生成800Hz正弦波的.wav文件(1通道,8位,16000Hz采样,32000个样本,所以2秒长),但是当我在Audacity中播放或检查其频谱图时,它有弦外之音.
我认为问题在于将正弦波转换为PCM的算法; 我不知道在哪里放置'零'位移,在127,或127.5,或128等.
char data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = (char) (round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j / 20.0))));
}
Run Code Online (Sandbox Code Playgroud)
生成的文件是:output.wav
如有必要,这里是cpp文件:wavwriter.cpp
谢谢!
编辑2:我已将char更改为uint8_t
uint8_t data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j / 20.0)));
}
outfile.write((char *)&data[0], sizeof data);
outfile.close();
return true;
Run Code Online (Sandbox Code Playgroud)
避免未定义的行为.同样的问题仍然适用.
我正在考虑分析一些特定值的时间序列,因为它是调频信号。
我正在寻找 FM 解调器的 Python 实现。我知道Matlab和Octave中有解调器功能;对于Python,我找到了这个FreqDemod包,但它似乎没有做我想做的事情。
帮助将不胜感激。