Перейти к содержанию
    

Matlab System generator. PDM модуляция

Может кто подскажет как в Matlab System generator  набрать схемку которая бы считала количество импульсов на входе? Хочу декодировать PDM сигнал с микрофона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сначала наберите такую схемку просто в Симулинке с помощью Симулинковских блоков и промоделируйте пока она не будет работать. Потом:

- введите в схему Gateway и поменяйте все блоки, которые пойдут в FPGA на блоки из блоксета System Generator

- приведите все floating point сигналы к fixed point с учетом квантизации и переполнения. Задайте типы, количество бит и позицию запятой для них.

- Промоделируйте и проверьте, что схема работает так, как вам нужно

- теперь включайте pipelining delay для сложных блоков, так как иначе будут проблемы с таймингом

- продолжайте моделировать

- генерите код

Примерно так, более подробно расписано и описано во всяких тренировочных мануалах.

 

Есть еще вариант сразу начать делать схему в system Generator, но это не для начинающих и требуется только в том случае, если знаете изначально, что будете использовать специализированные блоки от Xilinx.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо набрать схемку в SG чтобы считала количество импульсов (единиц). Можно ли задействовать для этого блок  Counter? чтобы он считал количество внешних тактов (импульсов)? Это вроде не сложно и поэтому я хотел бы сразу в SG. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Olegus said:

 Можно ли задействовать для этого блок  Counter? чтобы он считал количество внешних тактов (импульсов)? Это вроде не сложно и поэтому я хотел бы сразу в SG. 

Схема довольно элементарная.
Кидаете на схему фильтр-дециматор и все. Дальше только сгенерить сорсы остается. 

image.thumb.png.0f95e853f0b16bbc0910e68565d81663.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Olegus said:

Может кто подскажет как в Matlab System generator  набрать схемку которая бы считала количество импульсов на входе? Хочу декодировать PDM сигнал с микрофона.

Не получится считать импульсы, обычно в PDM есть постоянная составляющая, количество единиц, превышает нули и есть смещение спектра шума...

Только НЧ фильтр, как уже сказали!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, _4afc_ сказал:

Не получится считать импульсы, обычно в PDM есть постоянная составляющая, количество единиц, превышает нули и есть смещение спектра шума...

Только НЧ фильтр, как уже сказали!

 

Где бы почитать о том что за фильтр и как декодировать PDM? 

Неужели нет примеров по PDM в Matlab Simulink? Вроде известная штука?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть пример по PDM  в верилог

`timescale 1ns / 1ps

module Mic_Demo(
    output anout,
    output ampSD,
	output sclk,
	output ncs,
	input sdata,
    input clk
    );

reg [4:0]clk_cntr_reg;
reg pwm_val_reg;

always @(posedge clk)
begin
    clk_cntr_reg <= clk_cntr_reg + 1;
end

always @(posedge clk)
begin
    if(clk_cntr_reg == 5'b01111) begin
        pwm_val_reg <= sdata;
    end
end

//sclk = 100MHz / 32 = 3.125 MHz
assign sclk = clk_cntr_reg[4];

assign anout = pwm_val_reg;
assign ncs = 1'b0;      //mic LRSel
assign ampSD = 1'b1;


endmodule

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Olegus said:

Где бы почитать о том что за фильтр и как декодировать PDM? 

Неужели нет примеров по PDM в Matlab Simulink? Вроде известная штука?

Вот АЧХ сигнала 1кГц записанного микрофоном PDM 2МГц, очевидно, что для этого микрофона -  перед децимацией нужен НЧ фильтр убирающий частоты выше 20кГц, уровень подавления - зависит от требуемого сигнал/шум.

Вариантов построения фильтров - масса, каждый делает как ему нужно или насколько разбирается...

 

521_1k.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, _4afc_ said:

 очевидно, что для этого микрофона -  перед децимацией нужен НЧ фильтр убирающий частоты выше 20кГц

Не факт. Неизвестно чем вы сэмплировали.
Выбросы на графике больше похожи на погрешности или баги целочисленных операций. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, AlexandrY said:

Не факт. Неизвестно чем вы сэмплировали.
Выбросы на графике больше похожи на погрешности или баги целочисленных операций. 

Ничем не семплировал.    Это функция pwelch matlab "double" от однобитного цифрового потока длиной 4 секунды, полученного с микрофона 521, находящегося внутри заглушённых наушников на которые подан сигнал 1кГц с компьютера.

Всплески - это КНИ наушников, ну и в НЧ области, если хорошо почистить, можно найти вибрацию в здании ниже 10Гц...

 

Могу дать эту запись побаловаться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, _4afc_ said:

Это функция pwelch matlab "double" от однобитного цифрового потока длиной 4 секунды, полученного с микрофона 521, находящегося внутри заглушённых наушников на которые подан сигнал 1кГц с компьютера.

Вопрос чем вы записали (т.е. сэмплировали) этот самый однобитный поток? 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, AlexandrY said:

Вопрос чем вы записали (т.е. сэмплировали) этот самый однобитный поток? 
 

На микрофон подавался клок, с микрофона снимались данные. Оба сигнала подавались на spi МК, который писал данные на флеш питаясь от аккумулятора (чтоб 50Гц не ловить).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, _4afc_ said:

На микрофон подавался клок, с микрофона снимались данные. Оба сигнала подавались на spi МК, который писал данные на флеш питаясь от аккумулятора (чтоб 50Гц не ловить).

Вот там и надо ловить траблы. А дециматор сам является фильтром низкой частоты. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, AlexandrY said:

Вот там и надо ловить траблы. А дециматор сам является фильтром низкой частоты. 

Нет там никаких проблем с сигналом. А ФНЧ - ФНЧ рознь. Некоторые CIC используют, потом говорят что 60дБ SNR не получить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, _4afc_ said:

Нет там никаких проблем с сигналом. А ФНЧ - ФНЧ рознь. Некоторые CIC используют, потом говорят что 60дБ SNR не получить...

Читайте википедию - https://en.wikipedia.org/wiki/Cascaded_integrator–comb_filter

Если че и фильтруют, то после CIC дециматора, чтобы не тратить зря энергию. 

 

Кстати, CIC дециматор - это просто бегущее среднее, но если бегущее среднее изобразить в симулинк, то получится очень медленный фильтр.  

Так что лучше генерить исходники прямо из блока CIC дециматора.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...