des00 1 Posted August 10, 2020 · Report post Вот такой пример: децимация сигнала в 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)); Теперь собственно вопросы, 1. Почему частота f2 отображается не зеркально, относительно частоты найквиста децимированного домена? Ведь при рассчете децимирующих фильтров, обеспечивают затухание в полосе Fn-BW : Fn, где Fn - частота найквиста исходного домента, BW - полоса сигнала. 2. Почему для децимации через FFT складываются непосредственно две половинки (математически это верно, т.к. для коэффциентов старшей половинки, будет умножение на exp(-1*2pi) = 1, но, по логике вопроса 1 там же должно быть зеркальное отображение старшей половинки спектра перед сложением? Понимаю что матлаб считает верно, но логика здравого смысла говорит что это не соответствует действительности и проблема либо в трактовании результатов, либо в использовании матлаба. Что я делаю не так? Спасибо. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
RobFPGA 1 Posted August 10, 2020 · Report post Приветствую! Но вы же выводите на график децимированного спектра сумму с исходного (не децимированного) спектра, а на сколько я помню там формат 0.. Fs/2,-Fs/2..0. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andyp 0 Posted August 10, 2020 · Report post Как-то так %Y2d = (X(1:512) + X(513:end))/2; Y2d = [X(1:256) X(1024 - 256 + 1:end)]; Твоя вторая палка не попадает в полосу после децимации и должна быть отфильтрована до, иначе завернется, что и видно на рисунках. К вопросам 1. Потому что отражается от частоты Найквиста до децимации 2. Зачем что-то складывать вместо того, чтобы просто взять нужные точки? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
des00 1 Posted August 11, 2020 · Report post 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. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andyp 0 Posted August 11, 2020 · Report post 3 hours ago, des00 said: Сравнил СКО(sum(abs(x2d-y2d))^2) обоих вариантов, с сигналом, который децемирован во временном домене. Мой вариант: СКО = 1.473579e-26 Ваш вариант: СКО = 2.636617e+05 Ну так у меня ж вторая палка отфильтрована, так что ничего удивительного. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
des00 1 Posted August 12, 2020 · Report post 18 hours ago, andyp said: Ну так у меня ж вторая палка отфильтрована, так что ничего удивительного. ага, понял, пасибо. покрутил модельку, ваш метод относится к децимации с полной фильтрацией зеркала, а изначальный просто к децимации. Для моей задачи, демодуляция спектра со скруглением по найквисту, ваш метод не подходит, т.к. теряется часть спектра. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...