|
|
  |
Помогите с фильтрацией сигнала., QPSK --> matlab --> delphi |
|
|
|
Dec 8 2007, 20:22
|
Группа: Участник
Сообщений: 14
Регистрация: 24-03-05
Пользователь №: 3 658

|
В матлабе в симулинке есть ДЕМО QPSK сигнала. После некоторых нехитрых блоков ( q/i разделение, фильтр и блока вывода значений в workspace) получил txt файл с нефильтрованной компонентой I. Далее моя задача состоит в фильтрации сигнала. (точнее я должен сделать алгоритм фильтрации) Беру для примера или фильтр Гаусса или raised cosine ( приподнятый косинус ). Коэффициенты могу рассчитать матлабе. У меня возник вопрос по применению этих коэффициентов к сигналу. Я так понимаю, что если ввести в матлабе rcosfir(0.5) то получится массив коэффиентов фильтра b[i] размером от 1 до 31. У меня же в файле 500 значений ( вытащенных из матлаба ). Как правильно применить эти коэффиенты к сигналу? Сверткой нельзя т.к. длина массивов разная.
Кто бы мог толково сказать как я в данном случае должен применить фильтр к сигналу? Я пытался брать Импульсную х-ку для rcosfir ( из справки матлаба ), считатть по ней 500 значений и делать conv() но у меня не получилось ничего вразумительного.
Мне нужно понять как правильно посчитать коэффиенты фильтра и применить их сигналу. ( сейчас 500 точек, но это пример чтоб не заморачиваться с написанием QPSK модулятора на дельфи ).
В данный момент у меня ограничен доступ к интернету. Про книгу Теория и применение цифровой обработки сигналов. Л.Рабинер, Б.Гоулд я слышал, но скачать пока немогу. Помогите кто может, а то скоро сдавать, а спросить, кроме как тут, негде. Спасибо всем откликнувшимся.
|
|
|
|
|
Dec 8 2007, 21:00
|
Участник

Группа: Свой
Сообщений: 52
Регистрация: 13-11-07
Пользователь №: 32 296

|
Фильтр применяется по формуле y(n) = СУMM(x(n-i)*h(i)), i = 0..N-1 Так получаете каждый n - ый отсчет выхода y, используя N-1 предыдущих, где N- длина фильтра. Что вы привязались к длине сигнала, непонятно.
|
|
|
|
|
Dec 9 2007, 07:11
|
Группа: Участник
Сообщений: 14
Регистрация: 24-03-05
Пользователь №: 3 658

|
Tue как в матлабе понятно, мне надо это повторить в дельфи. SInger спасибо, сейчас попробую.
Singer т.е. я так понимаю, что N никак не привязано к количеству взятых точек сигнала, т.е. матдаб вернул порядок фильтра - 31 и это будет N, так ? А дальше просто y(n) Где n и будет число точек сигнала?
|
|
|
|
|
Dec 9 2007, 08:22
|
Участник

Группа: Свой
Сообщений: 52
Регистрация: 13-11-07
Пользователь №: 32 296

|
Цитата(drcham @ Dec 9 2007, 10:11)  Tue как в матлабе понятно, мне надо это повторить в дельфи. SInger спасибо, сейчас попробую.
Singer т.е. я так понимаю, что N никак не привязано к количеству взятых точек сигнала, т.е. матдаб вернул порядок фильтра - 31 и это будет N, так ? А дальше просто y(n) Где n и будет число точек сигнала? Именно так. Главное чтобы чтобы длина выборки сигнала не была меньше порядка фильтра N. З.Ы. Только n - не число точек, а текущая позиция в выборке сигнала.
Сообщение отредактировал Singer - Dec 9 2007, 08:24
|
|
|
|
|
Dec 9 2007, 17:35
|
Группа: Участник
Сообщений: 14
Регистрация: 24-03-05
Пользователь №: 3 658

|
Спасибо, с фильтром разобрался. А как фильтровать комплексный сигнал? Отдельно I и Q понятно, а комплексный через Re и Im и обратно собирать в комплексный?
|
|
|
|
|
Dec 9 2007, 21:13
|
Группа: Новичок
Сообщений: 1
Регистрация: 9-12-07
Пользователь №: 33 134

|
Цитата(drcham @ Dec 9 2007, 21:35)  Спасибо, с фильтром разобрался. А как фильтровать комплексный сигнал? Отдельно I и Q понятно, а комплексный через Re и Im и обратно собирать в комплексный? 1. Самый простой способ фильтрации - это свертка сигнала и фильтра 2. есть сигнал длины N и фильтр длины М - массивы коэффициентов. 3. И сигнал и фильтр дополняются нулями справа до длины L (степень двойки), так L >=N+M-1 4. Вычисляешь ДПФ (преобразование Фурье) этих двух сигналов. 5. Почленно перемножаешь полученные спектры. 6. Вычисляешь обратное ДПФ полученного спектра и получаешь сигнал из L точек - результат фильтрации
|
|
|
|
|
Dec 10 2007, 05:50
|
Участник

Группа: Свой
Сообщений: 52
Регистрация: 13-11-07
Пользователь №: 32 296

|
Цитата(artri @ Dec 10 2007, 00:13)  1. Самый простой способ фильтрации - это свертка сигнала и фильтра 2. есть сигнал длины N и фильтр длины М - массивы коэффициентов. 3. И сигнал и фильтр дополняются нулями справа до длины L (степень двойки), так L >=N+M-1 4. Вычисляешь ДПФ (преобразование Фурье) этих двух сигналов. 5. Почленно перемножаешь полученные спектры. 6. Вычисляешь обратное ДПФ полученного спектра и получаешь сигнал из L точек - результат фильтрации Вы описали хотя и самый быстрый, но не самый простой способ - т.н. быстрая свертка...самый простой способ для новичка это все таки свертка в лоб, по вышеуказанной формуле, там только умножение с накоплением без ДПФ и ОДПФ...ну это и так и понятно. Насчет IQ - нужно фильтровать эти компоненты отдельно, как если бы это были два разных канала данных. Зачем что-то собирать? На входе два канала, на выходе 2 канала...
Сообщение отредактировал Singer - Dec 10 2007, 05:52
|
|
|
|
|
Dec 10 2007, 07:02
|
Группа: Участник
Сообщений: 14
Регистрация: 24-03-05
Пользователь №: 3 658

|
Большое спасибо!! Библиотека, которая делает FFT и iFFT у меня есть, но почему-то мне показалось, что это гиморней. А код свертки как показал Singer потребовал 15мин на расчет руками чтоб понять, что значения совпадают с матлабом и 15 мин на реализаию. Но за алгоритм для FFT спасибо.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|