Jump to content

    

stealthisname

Участник
  • Content Count

    28
  • Joined

  • Last visited

Community Reputation

0 Обычный

About stealthisname

  • Rank
    Участник

Recent Profile Visitors

322 profile views
  1. для того, чтобы определить отсутствие оборотов, можно сравнивать значение найденного максимума с порогом. порог для простоты можно рассчитывать по усредненным значениям fft. в качестве примера можно попробовать такой алгоритм на сигнале из Вашего файла hilda_15625Hz_zero_to_middle. я вычислил fft для 512 отсчетов на протяжении всего файла. для каждого результата убрал первые несколько отсчетов - в них мы ожидаем сильную низкочастотную помеху. получилась такая спектрограмма. для каждого результата нашел среднее значение, и умножил на 12 - это порог, с которым сравнивается найденный максимум в начале файла шум не превышает порог во время включения уже виден нужный пик, но частота слишком быстро изменяется на интервале одного fft, поэтому порог не превышен после выхода искомой частоты на постоянную все выборки дают максимум, превышающий порог таким образом отсутствие оборотов не прошло алгоритм, PID/ADRC точно не подхватит ложный пик. Единственное, чем пришлось пожертвовать - скоростью захвата, так как мы определили включение немного позже действительного включения устройства. вот как выглядит спектрограмма с порогом видно, что алгоритм четко определяет только нужные пики искомой частоты и срабатывает только при включенном устройстве. результат работы алгоритма - оценка частоты аналогичные результаты для сигнала из файла hilda_15625Hz_zero_to_low с тем же размером fft и с тем же множителем при вычислении порога
  2. если FFT выдает комплексные значения, то учитывать нужно и действительную и мнимую часть. по описанию алгоритма Вы ищете максимум из значений, поэтому вместо корня из суммы квадратов действительной и мнимой части, можно использовать просто сумму квадратов действительной и мнимой части. При этом положение максимума останется прежним, но можно будет сэкономить на операции взятия корня.
  3. спасибо я ошибся, сказав, что такая сумма не возможна на DSP. вычисления у автора темы могут быть реализованы так как указано на первой схеме. но в этой схеме есть незначительная неточность, которая может из-за невнимательности ввести в заблуждение. схема получается такая не считая обозначений входов, все было правильно
  4. на первой схеме у автора темы таких входов нет, есть X1 Y2 и перенос. Есть ли возможность суммировать числа в DSP так, как указано автором темы на первой схеме?
  5. "Результат всей суммы укладывается в 36 бит - это по мат. модели. " на последней DSP при таком суммировании будет приходить два сигнал с разрядностью 35 бит, а в блоке DSP только один сигнал переноса, который может вместить такую разрядность. Вам тоже, удачи!
  6. в схеме, которую Вы предлагаете реализовать, не укладываются входы DSP на последней стадии сложения если перенос с достаточной разрядностью для суммирования в DSP всего один, то такая схема не реализуемая
  7. по условию задачи и по обсуждению выше, в цифровой обработке допускается использовать БИХ фильтры второго порядка (только если нет высоких требований к точности коэффициентов и к точности вычислений) я отфильтровал сигналы из hilda_50kHz_rpm_high и hilda_50kHz_rpm_low в ВЧ фильтре с коэффициентами b = [1,-1]; a = [1,-0.9375]; с такой АЧХ: и затем отфильтровал в группе полосовых фильтров на разных частотах с такими коэффициентами: АЧХ фильтров: от результата фильтрации в группе полосовых фильтров взял по модулю и накопил процесс такого накопления в hilda_50kHz_rpm_high: результат такого накопления: результат накопления для hilda_50kHz_rpm_low: в сигнале hilda_50kHz_rpm_high больше всего накопил фильтр на частоте 3900. в сигнале hilda_50kHz_rpm_low больше всего накопил фильтр на частоте 400. если при других скоростях будут максимумы в фильтрах на соответствующих частотах, то таким образом можно будет приближенно вычислять скорость по частоте. если потребуется больше точность вычисления и будет позволять скорость вычислений, можно увеличить количество фильтров. больше фильтров - больше точность вычисления. если указанные коэффициенты не подходят по точности вычислений, то можно попробовать спроектировать фильтры попроще, но качество обработки может при этом снизиться.
  8. Здравствуйте! если рандомные "прострелы" длятся один такт и полоса полезного много меньше частоты дискретизации, то для очищения от таких рандомных "прострелов" может помочь медианный фильтр. я скачал файл hilda_50kHz_rpm_high.txt и попробывал применить медианный фильтр. оригинальный сигнал: результат обработки медианным фильтром третьего порядка: результат обработки медианным фильтром пятого порядка: по результатам обработки видно, что тут можно рассмотреть применение медианного фильтра до фильтрации ФНЧ и ФВЧ. к сожалению, в файле частота дискретизации уже пониженная до 50кГц. возможно, что применение медианного фильтра до понижения частоты лучше уберет рандомные "прострелы" и при этом меньше исказит полезный сигнал.
  9. если я правильно понимаю, по описанию работы шины генератор импульсов, счетчик и дешифратор (левый верхний в схеме) не могут переключаться во время передачи, так как иначе следующее в цепочке переключений устройство будет считать, что оно может передавать данные по общей шине. Как подобные коллизии решаются, если обратной связи устройств с генератором импульсов по схеме нет? что помешает счетчику переключиться во время передачи данных?
  10. представим, что у нас есть детализированная спектрограмма на длинном интервале времени, например вот такая s = 0:1e-2:1; t = 0:1e-2:100; z = sin(pi*s).*cos(pi*t.'+2*pi*10*s)+cos(pi*t.'/10)/2; surf(s,t,z,'EdgeAlpha',0); view(0,90); разглядеть детально небольшую область в таком масштабе действительно проблематично, поэтому выбираем Zoom In, Vertical Zoom любой участок спектрограммы приближается в пару кликов, все изменения графика вдоль оси времени - отлично отслеживаются для плавного скольжения по спектрограмме вдоль оси времени выбираем Pan, Vertical Pan довольно удобный способ исследования спектрограмм
  11. если уже есть вычисление данных и построение с помощью surf, например такое t = 0:1e-2:1; z = sin(2*pi*t).*cos(pi*t.'); surf(z); то получить двухмерный вариант можно например командой view(0,90), вот так t = 0:1e-2:1; z = sin(2*pi*t).*cos(pi*t.'); surf(z); view(0,90); таким образом будет выведен двухмерный вариант графика интенсивности, но так же сохранится возможность посмотреть и трехмерный график, с помощью кнопки Rotate 3D
  12. для проверки преобразования частоты с коэффициентом 7/5 я использовал импульсную характеристику по такому образцу b = firls(N, [0, 0.9*(1/7), 1.1*(1/7), 1], [1 1 0 0], [Wpass Wstop]); специально, чтобы фильтр оставлял примерно 1/7 полосы после интерполирования в 7 раз для преобразования частоты с коэффициентом 13/5 такая ИХ не подойдет, так как необходимо , чтобы фильтр оставлял примерно 1/13, с ИХ по такому образцу b = firls(N, [0, 0.9*(1/13), 1.1*(1/13), 1], [1 1 0 0], [Wpass Wstop]); при этом для достижения заданных характеристик фильтра потребуется больший порядок (N)
  13. удалось сгенерировать похожий в матлабе в Filter Designer после экспорта в .m файл генерируется с такого скрипта % MATLAB Code % Generated by MATLAB(R) 9.2 and the DSP System Toolbox 9.4. % Generated on: 25-Aug-2021 23:28:00 % FIR least-squares Lowpass filter designed using the FIRLS function. % All frequency values are in Hz. Fs = 14; % Sampling Frequency N = 70; % Order Fpass = 0.9; % Passband Frequency Fstop = 1.1; % Stopband Frequency Wpass = 1; % Passband Weight Wstop = 1; % Stopband Weight % Calculate the coefficients using the FIRLS function. b = firls(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop]); intf = 7; % Interpolation Factor decf = 5; % Decimation Factor Hd = dsp.FIRRateConverter( ... 'InterpolationFactor', intf, ... 'DecimationFactor', decf, ... 'Numerator', b, ... 'CoefficientsDataType', 'Custom', ... 'CustomCoefficientsDataType', numerictype([],16,17)); generatehdl(Hd, 'ResetType', 'Synchronous',... 'EDAScriptGeneration', 'off',... 'Name', 'Filter_fract_rate_fdatool',... 'TargetLanguage', 'Verilog',... 'InputDataType',numerictype(1,16,15)); результаты моделирования такого фильтра получились похожими в самом Filter Designer были выбраны такие настройки
  14. пользуюсь сгенеренными в симулинке HDL файлами, впечатления хорошие очень похоже, что для Вашего случая подойдет блок FIR Rate Conversion HDL Optimized для проверки блока с дискретизацией 7/5 я использовал такие параметры результаты моделирования с входной дискретизацией как в Вашем случае (входной отсчет раз в два такта)
  15. функция importhdl обещает Import Verilog code and generate Simulink model Introduced in R2018b