|
Не получается цифровой LPF, (в Matlab) |
|
|
|
Feb 19 2018, 08:10
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Есть входной сигнал 5кГц напоминающий треугольник  Хотелось бы из него сделать что-то близкое к синусоиде. Для этого пропускаю его через фильтр НЧ. Код фильтра был сгенерирован калькулятором ЗДЕСЬ для параметров: -тип - Баттерворт -порядок - 4 -сэмплинг - 11025 -частота среза - 5500 Код #define NZEROS 4 #define NPOLES 4 #define GAIN 1.009351158e+00
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop() { for (;;) { xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4]; xv[4] = next input value / GAIN; yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3]; yv[3] = yv[4]; yv[4] = (xv[0] + xv[4]) + 4 * (xv[1] + xv[3]) + 6 * xv[2] + ( -0.9815567827 * yv[0]) + ( -3.9444991525 * yv[1]) + ( -5.9443270236 * yv[2]) + ( -3.9813846512 * yv[3]); next output value = yv[4]; } } Перевёл код в Матлаб  Но результат не понятен (верх - исходный,низ - результат):  Почему не получилась синусоида? Я не правильно применил фильтр? Я ошибся в коде Матлаба?
Сообщение отредактировал RG29 - Feb 19 2018, 08:11
|
|
|
|
|
Feb 19 2018, 08:17
|
Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243

|
Цитата(RG29 @ Feb 19 2018, 11:10)  Есть входной сигнал 5кГц напоминающий треугольник Ключевое слово - напоминающий треугольник. Теорема Котельникова Вам знакома?
|
|
|
|
|
Feb 19 2018, 08:40
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Я так предполагал, что мой фильтр срежет все высокочастотные составляющие и сигнал сгладится, станет более похож на синус, но сглаживания нет. Вы намекаете, что мой исходный сигнал не содержит гармоник выше 5500Гц, поэтому фильтр не работает?
|
|
|
|
|
Feb 19 2018, 08:58
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Не пойму за отсчёты. Исходный сигнал получен с АЦП оцифровкой сигнала 5000 Гц с частотой семплирования 11025 Гц. Где не соответствие Котельникову?
|
|
|
|
|
Feb 19 2018, 09:12
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Само собой, фильтр есть. Почему испорчен, частота 5КГц, сэмплинг 11КГц, разве не нормальный вид для такого количества выборок? Почему не подлежит, почему ФНЧ не сможет сгладить гармоники выше 5КГц?
|
|
|
|
|
Feb 19 2018, 09:23
|
Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243

|
Цитата(RG29 @ Feb 19 2018, 11:58)  Не пойму за отсчёты. Исходный сигнал получен с АЦП оцифровкой сигнала 5000 Гц с частотой семплирования 11025 Гц. Где не соответствие Котельникову? И какой сигнал можно оцифровать с такой частотой дискретизации? Когда у вас, чуть более, чем два отсчета на период? Цитата(RG29 @ Feb 19 2018, 12:12)  Почему не подлежит, почему ФНЧ не сможет сгладить гармоники выше 5КГц? А какие гармоники, по Вашему мнению, там присутствуют? Можете частоты привести?
|
|
|
|
|
Feb 19 2018, 09:31
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Попробовал построить спектр сигнала:  Получается, при такой частоте семплирования в цифровых данных сигнале не достаточно информации о высших гармониках, и поэтому, как написал Lmx2315, оцифрованный сигнал как бы повреждён и не может быть восстановлен до исходной синусоиды. Верно?
|
|
|
|
|
Feb 19 2018, 09:52
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(RG29 @ Feb 19 2018, 12:31)  Получается, при такой частоте семплирования в цифровых данных сигнале не достаточно информации о высших гармониках, и поэтому, как написал Lmx2315, оцифрованный сигнал как бы повреждён и не может быть восстановлен до исходной синусоиды. Верно? Спектр треугольника содержит нечетные гармоники фундаментальной частоты (в Вашем случае еще и постоянку), амплитуда которых убывает как квадрат их номера. Для того, чтобы синтезировать более-менее нормальны треугольник нужно взять хотя бы 5 гармоник (см https://en.wikipedia.org/wiki/Triangle_wave). Это даст полосу сигнала равную 10*(1/Период). Соответственно, для дискретизации такого сигнала требуется примерно 20-ти кратная частота дискретизации.
|
|
|
|
|
Feb 19 2018, 09:53
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Вот теперь (кажется) понял, спасибо  Тогда такой вопрос - можно как-то исправить искажения из-за низкой частоты семплирования программно?
Сообщение отредактировал RG29 - Feb 19 2018, 09:56
|
|
|
|
|
Feb 19 2018, 10:00
|
Местный
  
Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771

|
Цитата(RG29 @ Feb 19 2018, 12:53)  Вот теперь (кажется) понял, спасибо  Тогда такой вопрос - можно как-то исправить искажения из-за низкой частоты семплирования программно? Цель то всего этого? не понятно.. Или показать кому то наглядно надо? )) и еще.. как уже было сказано выше, это не искажения...
--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
|
|
|
|
|
Feb 19 2018, 10:09
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 31-10-17
Пользователь №: 99 993

|
Цитата(andyp @ Feb 19 2018, 12:52)  Спектр треугольника содержит нечетные гармоники фундаментальной частоты (в Вашем случае еще и постоянку), амплитуда которых убывает как квадрат их номера. Для того, чтобы синтезировать более-менее нормальны треугольник нужно взять хотя бы 5 гармоник (см https://en.wikipedia.org/wiki/Triangle_wave). Это даст полосу сигнала равную 10*(1/Период). Соответственно, для дискретизации такого сигнала требуется примерно 20-ти кратная частота дискретизации. Чисто из интереса, то есть, если я руками допишу по 20 промежуточных точек в исходные данные и в расчёт фильтра поставлю новую частоту 220500, то фильтр отработает как надо и на выходе получится синусоида?  Цитата(Realking @ Feb 19 2018, 13:00)  Цель то всего этого? не понятно..
Или показать кому то наглядно надо? ))
и еще.. как уже было сказано выше, это не искажения... Цель проста - постижение науки ЦОС
|
|
|
|
|
Feb 19 2018, 10:10
|
Местный
  
Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771

|
Цитата(RG29 @ Feb 19 2018, 13:05)  Чисто из интереса, то есть, если я руками допишу по 20 промежуточных точек в исходные данные и в расчёт фильтра поставлю новую частоту 220500, то фильтр отработает как надо и на выходе получится синусоида?  ))) да не треугольник у Вас но если допишите, то да - треугольник но и фильтровать (гасить) вы должны от 10 кГц и выше
--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
|
|
|
|
|
Feb 19 2018, 10:15
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(RG29 @ Feb 19 2018, 12:53)  Тогда такой вопрос - можно как-то исправить искажения из-за низкой частоты семплирования программно? Что значит исправить? В лучшем случае удастся отфильтровать те гармоники, которые завернулись в полосу сигнала при дискретизации. Только проще сразу формировать сигнал как сумму гармоник, которые укладываются в половину частоты дискретизации. Среднеквадратическая ошибка в этом случае будет минимальна.
|
|
|
|
|
Feb 19 2018, 10:18
|
Местный
  
Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771

|
Цитата(RG29 @ Feb 19 2018, 13:09)  Чисто из интереса, то есть, если я руками допишу по 20 промежуточных точек в исходные данные и в расчёт фильтра поставлю новую частоту 220500, то фильтр отработает как надо и на выходе получится синусоида?  Цель проста - постижение науки ЦОС  Fs = 220500; t = (0:250)/Fs; tri = sawtooth(2 * pi * 5000 * t, 0.5); windowSize = 15; b = (1 / windowSize)*ones(1,windowSize); a = 1; out = filter(b,a,tri); plot(tri); hold on; plot(out); грубый пример (фильтр однородный) поставьте Fs = 10000; и увидите первоначальную свою картинку )
--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|