Jump to content

    

Знатоки ЦОС, в двух соснах заблудился

Recommended Posts

des00

Вот такой пример: децимация сигнала в 2 раза методом отбрасывания отсчетов и децимация за счет сложения половинок фурье.

close all; 
clear all; 

n = 0:1023;

f1 = 12; 
f2 = 600; 

% complex signal 
x =      cos((2*pi/1024)*f1*n) + 1i*sin((2*pi/1024)*f1*n)  +...
    0.1*(cos((2*pi/1024)*f2*n) + 1i*sin((2*pi/1024)*f2*n)) + ...
    0.01*randn(size(n)) ;
X   = fft(x, 1024); 

% true decimation
x2d = x(1:2:end);
X2d = fft(x2d, 512);

% decimation througth FFT 
Y2d = (X(1:512) + X(513:end))/2; 
y2d = ifft(Y2d);

subplot(3,2,1);
plot(1:1024, x);
subplot(3,2,2);
plot((0:1023), 20*log10(abs(X)));

subplot(3,2,3);
plot(1:512, x2d);
subplot(3,2,4);
plot((0:511), 20*log10(abs(X2d)));

subplot(3,2,5);
plot(1:512, y2d);
subplot(3,2,6);
plot((0:511), 20*log10(abs(Y2d)));

fprintf("compare result = %0d\n", sum(x2d-y2d));

Теперь собственно вопросы,

fft.thumb.png.cb433b386af21a91f0ecf1d10b89d327.png

1. Почему частота f2 отображается не зеркально, относительно частоты найквиста децимированного домена? Ведь при рассчете децимирующих фильтров, обеспечивают затухание в полосе Fn-BW : Fn, где Fn - частота найквиста исходного домента, BW - полоса сигнала.

2. Почему для децимации через FFT складываются непосредственно две половинки (математически это верно, т.к. для коэффциентов старшей половинки, будет умножение на exp(-1*2pi) = 1, но, по логике вопроса 1 там же  должно быть зеркальное отображение старшей половинки спектра перед сложением?

Понимаю что матлаб считает верно, но логика здравого смысла говорит что это не соответствует действительности и проблема либо в трактовании результатов, либо в использовании матлаба. Что я делаю не так?

Спасибо.

 

 

Share this post


Link to post
Share on other sites

RobFPGA

Приветствую!

Но вы же выводите на график децимированного спектра сумму с исходного (не децимированного) спектра,   а на сколько я помню  там формат  0.. Fs/2,-Fs/2..0.

Удачи! Rob.

Share this post


Link to post
Share on other sites

andyp

Как-то так

%Y2d = (X(1:512) + X(513:end))/2; 
Y2d = [X(1:256) X(1024 - 256 + 1:end)]; 

Твоя вторая палка не попадает в полосу после децимации и должна быть отфильтрована до, иначе завернется, что и видно на рисунках.

К вопросам 

1. Потому что отражается от частоты Найквиста до децимации

2. Зачем что-то складывать вместо того, чтобы просто  взять нужные точки?

 

 

 

 

Share this post


Link to post
Share on other sites

des00
On 8/10/2020 at 7:26 PM, andyp said:

Как-то так

%Y2d = (X(1:512) + X(513:end))/2; 
Y2d = [X(1:256) X(1024 - 256 + 1:end)]; 

Сравнил СКО(sum(abs(x2d-y2d))^2) обоих вариантов, с сигналом, который децимирован во временном домене.

Мой вариант: СКО = 1.473579e-26

Ваш вариант: СКО = 2.636617e+05

Quote

Твоя вторая палка не попадает в полосу после децимации и должна быть отфильтрована до, иначе завернется, что и видно на рисунках.

Я специально ее туда поставил, чтобы посмотреть завороты и вот тут, что-то пошло не так с пониманием)

Quote

К вопросам 

1. Потому что отражается от частоты Найквиста до децимации

Вчера пришел к выводу что не правильно трактую результат работы FFT и @RobFPGA это подвердил). Изначально я считал что FFT в матлабе дает результат в диапазоне [0:FS/2], т.е. в попугаях частота найквиста исходная 1024, децимированная 512. Отсюда и не понятка. 

Quote

2. Зачем что-то складывать вместо того, чтобы просто  взять нужные точки?

да я полез в CP-SC модуляцию, FS эквалайзирование и возник вопрос отображения ошибки в домене 1sps на коэффициенты в домене Nsps.

Share this post


Link to post
Share on other sites

andyp
3 hours ago, des00 said:

Сравнил СКО(sum(abs(x2d-y2d))^2) обоих вариантов, с сигналом, который децемирован во временном домене.

Мой вариант: СКО = 1.473579e-26

Ваш вариант: СКО = 2.636617e+05

Ну так у меня ж вторая палка отфильтрована, так что ничего удивительного.

Share this post


Link to post
Share on other sites

des00
18 hours ago, andyp said:

Ну так у меня ж вторая палка отфильтрована, так что ничего удивительного.

ага, понял, пасибо. покрутил модельку, ваш метод относится к децимации с полной фильтрацией зеркала, а изначальный просто к децимации. Для моей задачи, демодуляция спектра со скруглением по найквисту, ваш метод не подходит, т.к. теряется часть спектра.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.