Таким образом, у меня есть 2 синусоидальные волны, одна из которых является входом в систему, а другая - выходом фильтра Бесселя сглаживания на выходе системы.Существует небольшая разность фаз, поэтому я использовал Matlab, чтобы определить разницу между двумя волнами.Затем я строю их оба, чтобы сравнить их - однако я получаю это:
Как видите, входная волна является синусоидальной, однако выходная волна, похоже,квантованной.Для сравнения, вот две волны, прежде чем я уберу разность фаз:
Как вы можете видеть, выход Бесселя также является гладкой синусоидальной волной.Вот код, который я использую для построения первого графика:
yyaxis left
plot(Time(1:length(s1a1)),CIN(1:length(s1a1)))
ylabel('CIN')
yyaxis right
plot(Time(1:length(s1a1)),Bessel(-lagDiff+1:end))
ylabel('Bessel Out')
xlabel('Time')
title('CIN vs Bessel')
А вот код для второго:
yyaxis left
plot(Time,CIN)
ylabel('CIN')
yyaxis right
plot(Time,Bessel)
ylabel('Bessel Out')
xlabel('Time')
title('CIN vs Bessel')
Я использую точно такие же переменные, толькоРазница в том, что вместо использования всей длины данных я использую только часть.Странно то, что это прекрасно работает для CIN - это совершенно нормально, только когда я делаю это для Бесселя, он делает эту странную вещь квантования.
Был бы признателен, если бы я мог найти решение - я уже попробовалФункция interp1 со сплайном в качестве метода, и это ничего не меняет.Кроме того, мне нужно использовать эти данные за пределами MATLAB, поэтому я не могу их изменить.Любая помощь будет принята с благодарностью.
Некоторые правки для примера MCV.
Я примерно воспроизвел мою входную и выходную волны, используя следующие функции:
Time = 0:0.00002:4;
Bessel = 0.1+(sin(((2*pi*1).*Time)-1)).*0.05;
CIN = 4400+(sin((2*pi*1).*Time).*4000);
L = length(Bessel);
L = L/20;
L=round(L);
Value = Bessel(L);
Bessel(1:L) = linspace(0,Value,L);
Код являетсяиспользуется для удаления сдвига фазы:
Fs = 50000;
t1 = (0:length(Bessel)-1)/Fs;
t2 = (0:length(CIN)-1)/Fs;
[acor,lag] = xcorr(CIN,Bessel);
[~,I] = max(abs(acor));
lagDiff = lag(I);
timeDiff = lagDiff/Fs;
s1a1 = Bessel(-lagDiff+1:end);
t1a1 = (0:length(s1a1)-1)/Fs;
s2a2 = CIN(1:length(s1a1));
Когда я затем запускаю его через свой код, я получаю следующее:
Это работает для этих волн,используя точно такой же код.Но единственное изменение, которое я сделал, - это входная волна, которая, как было установлено выше на моей 2-й фигуре, не представляет собой проблему с входной волной, она возникает только тогда, когда я сдвигаю ее, как на моей 1-й фигуре.Я не знаю, в чем проблема, но это определенно не входная волна.