adnega 11 17 апреля, 2023 Опубликовано 17 апреля, 2023 · Жалоба Если у вас задачка учебная, то можно поэкспериментировать, но я все больше уверен, что ничего хорошего от сдвига точек не получится. Каких-то широкоизвестных приемов (для изменения Fs) я не припомню, и, думаю, вряд ли они есть, т.к. для безразмерного (деленного на Fs) фильтра это будет совсем другой фильтр. Если есть возможность пересчитать новый фильтр, то нужно пересчитывать - благо из временной области в частотную можно туда-сюда отображать. Лучше потратить усилия в этом направлении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 17 апреля, 2023 Опубликовано 17 апреля, 2023 · Жалоба Умножение / деление z на коэффициент еще не попробовал. Поворот нулей и полюсов на \(\phi_p/1.21\) и \(\phi_z/1.21 \) С виду работает. Но амплитуда АЧХ почему-то раза примерно в 2 больше. А не нужно доворачивать нули и полюса на половину угла? Типа ось растягивается на коэффициент 1.21. Но у нас по факту 2 интервала -Fs/2 ... 0 и 0 ... Fs/2. И комплексно сопряженных корня два. Мы каждый из них доворачивая на \(\phi_z/1.21 \) угол между корнями увеличивается в \(2\cdot\phi_z/1.21 \) раза. Есть здравый смысл в этом? 8 minutes ago, adnega said: Если у вас задачка учебная, то можно поэкспериментировать, но я все больше уверен, что ничего хорошего от сдвига точек не получится. Каких-то широкоизвестных приемов (для изменения Fs) я не припомню, и, думаю, вряд ли они есть, т.к. для безразмерного (деленного на Fs) фильтра это будет совсем другой фильтр. Если есть возможность пересчитать новый фильтр, то нужно пересчитывать - благо из временной области в частотную можно туда-сюда отображать. Лучше потратить усилия в этом направлении. Вас понял! Спасибо! ☺️ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 17 апреля, 2023 Опубликовано 17 апреля, 2023 (изменено) · Жалоба Методом тыка понял что . . . 1. Пересчитываю передаточную ф-цию в zpk (матлаб). Z - нули, P - полюса, K - коэффициет усиления. 2. Вращаю Z и P. 3. Конвертирую назад в передаточную ф-цию. Получалось, как писал выше не та амплитуда. 4. Добавил изменение К = К/1,21. Теперь по амплитуде до 3-го знака совпадает. Зато по частоте не очень совпадает. Вобщем пока разбираюсь дальше. Изменено 17 апреля, 2023 пользователем aBoomest Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 апреля, 2023 Опубликовано 17 апреля, 2023 · Жалоба В 17.04.2023 в 08:52, aBoomest сказал: Получалось, как писал выше не та амплитуда. Да, по частоте на первый взгляд сдвинется, но в АЧХ в области пропускания будут сильные колебания. Я не знаю простой трансформации, чтобы сохранить прежние расстояния до нулей и полюсов на новой диаграмме. Наверное, можно попробовать ввести частотную зависимость всех коэффициентов, а потом как-то обратить в многочлены, то там скорее всего тригонометрические функции будут которые нужно будет в ряд раскладывать и т.п. Наверное, проще все по правильному сразу сделать без хитрения. Кста, будут интересно сравнить новую и старую диаграммы - скорее всего ничего общего на них не будет (( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 18 апреля, 2023 Опубликовано 18 апреля, 2023 · Жалоба Похоже сдвигать надо не на \(1.21\), а на \(1.21\cdot\pi\) Ну т.е. делить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 апреля, 2023 Опубликовано 18 апреля, 2023 · Жалоба В 18.04.2023 в 12:23, aBoomest сказал: Похоже сдвигать надо не на 1.211.21 , а на 1.21⋅π1.21⋅π Ну т.е. делить. Почему? Т.е. если нужно преобразовать условно из 40 кГц в 40,001 кГц, то сдвигаем на 1,000025 * π - более чем в три раза?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 18 апреля, 2023 Опубликовано 18 апреля, 2023 (изменено) · Жалоба Не знаю честно говоря. Я пока не все моменты прочувствовал в задаче. Сдвигал на 1.21. Никак не попадало. От балды умножил 1.21 на Пи - сдвиг почти идеально совпал. Изменено 18 апреля, 2023 пользователем aBoomest Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 апреля, 2023 Опубликовано 18 апреля, 2023 · Жалоба В 18.04.2023 в 14:02, aBoomest сказал: Я пока не все моменты прочувствовал в задаче. Для полного погружения можно ниточки привязать от точки (нескольких точек) на окружности до всех нулей-полюсов. Потом точки на окружности сдвинуть в соответствии с изменением Fs - ниточки утянут нули-полюса куда-то в новое место. Это будет больше похоже на правду, но вряд ли такое получится для всех точек окружности. Можно попробовать две точки по краям фильтра... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 18 апреля, 2023 Опубликовано 18 апреля, 2023 (изменено) · Жалоба У нас же на диаграмме нулей и полюсов \(\pi\) соответствует частоте \(f_S \over 2\) на частотной оси? Если так должно было без умножения сдвига угла на \(\pi\) работать. Не могу для себя это объяснить. Попробую простой какой-нибудь пример, отпишусь. PS: Спасибо за ответы! Изменено 18 апреля, 2023 пользователем aBoomest Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 18 апреля, 2023 Опубликовано 18 апреля, 2023 · Жалоба 57 minutes ago, aBoomest said: Не могу для себя это объяснить. Попробую простой какой-нибудь пример, отпишусь. iirrateup говорят работает, не проверял: Spoiler function [b, a] = BiquadCoefficientConverter(b, a, inFS, outFS) d(1)=b(1)+b(2)+b(3); d(2)=2.0*(b(1)-b(3)); d(3)=b(1)-b(2)+b(3); c(1)=1+a(2)+a(3); c(2)=2.0*(1.0-a(3)); c(3)=1.0-a(2)+a(3); r=outFS/inFS; invc=1/(c(1)+r*(c(2)+r*c(3))); b(1)=(d(1)+r*(d(2)+r*d(3)))*invc; b(2)=2.0*(d(1)-r^2*d(3))*invc; b(3)=(d(1)-r*(d(2)-r*d(3)))*invc; a(1)=1; a(2)=2.0*(c(1)-r^2*c(3))*invc; a(3)=(c(1)-r*(c(2)-r*c(3)))*invc; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 апреля, 2023 Опубликовано 18 апреля, 2023 · Жалоба В 18.04.2023 в 16:01, _4afc_ сказал: iirrateup говорят работает, не проверял: Цитата Upsample IIR filter by integer factor В целое число раз? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 18 апреля, 2023 Опубликовано 18 апреля, 2023 · Жалоба 2 hours ago, adnega said: В целое число раз? можно и не в целое, например для 33 -> 40 Spoiler inFS = 33; outFS = 40; [b, a] = ellip(3,0.1,30,0.409); [alpnum,alpden] = allpasslp2lp(0.5, 0.5*(inFS/outFS)); [z2, p2, k2] = zpkftransf(roots(b), roots(a), b(1), alpnum, alpden); H=fvtool(b, a, k2*poly(z2), poly(p2)); H.Fs(1)=inFS; H.Fs(2)=outFS; legend(H,"OLD","NEW"); %% -- OLD ------------------------------------- % a = 1.0000 -0.1737 0.5160 -0.0588 % b = 0.1969 0.4449 0.4449 0.1969 %% -- NEW ------------------------------------- % a = 1.0000 -0.7183 0.6441 -0.1317 % b = 0.1386 0.2585 0.2585 0.1386 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 18 апреля, 2023 Опубликовано 18 апреля, 2023 (изменено) · Жалоба Спасибо! Завтра попробую! PS: Сразу интересно, почему нет ratedown? Изменено 18 апреля, 2023 пользователем aBoomest Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 18 апреля, 2023 Опубликовано 18 апреля, 2023 (изменено) · Жалоба Попробую еще на днях. Но 5 минут изучения этой ф-ции с целыми коэффициентами показали что это не то. Поднятие частоты искажает АФЧХ. По факту это просто добавление нулевых коэффициентов. Количество добавляемого пропорционально этому самому целому числу. Поэтому и ratedown наверно нету. Про не целое, спасибо. Обязательно посмотрю. Изменено 18 апреля, 2023 пользователем aBoomest Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aBoomest 0 19 апреля, 2023 Опубликовано 19 апреля, 2023 (изменено) · Жалоба Спасибо всем! 13 hours ago, _4afc_ said: можно и не в целое, например для 33 -> 40 Можете пожалуйста пояснить код? 1. Я не понимаю смысла ф-ции allpasslp2lp, которая возвращает alpnum alpden? 2. И не понимаю какое они значение играют в нижеследующей ф-ции zpkftransf? На сколько я понял, непосредственно предложенный код меняет параметры фильтра (т.е. если например полоснопропускающий фильтр, полоса нового фильтра для новой \(f_s\) будет другая, пик сместится). Это так? 18 hours ago, adnega said: Почему? Т.е. если нужно преобразовать условно из 40 кГц в 40,001 кГц, то сдвигаем на 1,000025 * π - более чем в три раза?! По поводу остального ранее написанного. На счет \(\pi\) - это была полная чушь с моей стороны. В коде была ошибка и так совпало отличие примерно было равно 3, поэтому чудом добавление \(\pi\) как будто помогло. Правильный подход тот, что задуман в начале дискуссии - сдвиг на относительную частоту (точно ставит АФЧХ туда куда надо). Изменено 19 апреля, 2023 пользователем aBoomest Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться