Двухканальный набор фильтров является особым случаем типового набора фильтров M-канала, где существует две ветви фильтра. Реализуйте аналитический фрагмент полуполосы использования набора фильтров decimators. Реализуйте фрагмент синтеза интерполяторов полуполосы использования набора фильтров.
Эти функции реализуют полуполосу decimators и интерполяторы полуполосы в DSP System Toolbox™.
dsp.FIRHalfbandDecimator
и КИХ-Полуполоса Decimator: Реализуйте аналитический фрагмент набора фильтров при помощи КИХ-полуленточного фильтра.
dsp.IIRHalfbandDecimator
и БИХ-Полуполоса Decimator: Реализуйте аналитический фрагмент набора фильтров при помощи БИХ-полуленточного фильтра.
dsp.FIRHalfbandInterpolator
и КИХ-Интерполятор Полуполосы: Реализуйте фрагмент синтеза набора фильтров при помощи КИХ-полуленточного фильтра.
dsp.IIRHalfbandInterpolator
и БИХ-Интерполятор Полуполосы: Реализуйте фрагмент синтеза набора фильтров при помощи БИХ-полуленточного фильтра.
Двухканальный аналитический набор фильтров принимает широкополосный сигнал как вход и разделяет этот сигнал в lowpass и highpass сигналы поддиапазона. Двухканальный набор фильтров синтеза принимает lowpass и highpass сигналы поддиапазона как входные параметры и восстанавливает широкополосный сигнал с помощью этих двух поддиапазонов.
Используйте или полуполосу FIR или БИХ-полуленточные фильтры в наборе фильтров. Каждый фильтр имеет свои собственные преимущества и недостатки, и ваш выбор должен зависеть от вычислительных требований приложения. БИХ-фильтры требуют, чтобы меньше коэффициентов, чем КИХ-фильтры выполнило подобные операции фильтрации. БИХ-фильтры работают быстрее и требуют меньшего пространства памяти. Однако КИХ-фильтры всегда устойчивы. Когда коэффициенты КИХ-фильтра симметричны или антисимметричны, фильтр показывает линейный фазовый отклик.
Используйте вход звукового файла и сравните спектр мощности набора фильтров выход с тем из входного сигнала. Затем сравните стоимость реализации и КИХ и БИХ-банки полуленточного фильтра.
Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным step
синтаксис. Например, obj(x)
становится step(obj,x)
.
Примечание: audioDeviceWriter
Система object™ не поддерживается в MATLAB Online.
Настройте средство записи средства чтения и устройства звукового файла. Создайте полуполосу FIR decimator и интерполятор, чтобы спроектировать фильтр минимального порядка с шириной перехода 2 000 Гц и затуханием в полосе задерживания 80 дБ. Наконец, настройте спектр анализатор, чтобы отобразить спектры мощности ввода и вывода набора фильтров.
AF = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024); AP = audioDeviceWriter('SampleRate',AF.SampleRate); filterspec = 'Transition width and stopband attenuation'; TW = 2000; Astop = 80; firhalfbanddecim = dsp.FIRHalfbandDecimator(... 'Specification',filterspec, ... 'StopbandAttenuation',Astop,... 'TransitionWidth',TW, ... 'SampleRate',AF.SampleRate); firhalfbandinterp = dsp.FIRHalfbandInterpolator(... 'Specification',filterspec, ... 'StopbandAttenuation',Astop,... 'TransitionWidth',TW, ... 'SampleRate',AF.SampleRate/2,... 'FilterBankInputPort',true); SpecAna = dsp.SpectrumAnalyzer('SampleRate',AF.SampleRate,... 'PlotAsTwoSidedSpectrum',false,'ReducePlotRate',false,... 'ShowLegend',true,... 'ChannelNames',{'Input signal','Filtered output signal'});
Считайте аудио 1 024 выборки за один раз. Отфильтруйте вход, чтобы получить lowpass и highpass сигналы поддиапазона, подкошенные на коэффициент два. Это - аналитический фрагмент набора фильтров. Используйте интерполятор полуполосы FIR в качестве набора фильтров синтеза. Отобразите рабочий спектр мощности аудиовхода и выход набора фильтров синтеза. Проигрывайте выход с помощью средства записи аудио устройства.
while ~isDone(AF) audioInput = AF(); [xlo,xhigh] = firhalfbanddecim(audioInput); audioOutput = firhalfbandinterp(xlo,xhigh); spectrumInput = [audioInput audioOutput]; SpecAna(spectrumInput); AP(audioOutput); end release(AF); release(AP); release(SpecAna);
Создайте полуполосу IIR decimator и интерполятор. Фильтры имеют минимальный порядок, имеют ширину перехода 2 000 Гц и затухание в полосе задерживания 80 дБ. Настройте спектр анализатор, чтобы отобразить спектры мощности входа набора фильтров и выхода.
AF = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024); AP = audioDeviceWriter('SampleRate',AF.SampleRate); filterspec = 'Transition width and stopband attenuation'; TW = 2000; Astop = 80; iirhalfbanddecim = dsp.IIRHalfbandDecimator(... 'Specification',filterspec,'StopbandAttenuation',Astop,... 'TransitionWidth',TW,'SampleRate',AF.SampleRate); iirhalfbandinterp = dsp.IIRHalfbandInterpolator(... 'Specification',filterspec,'StopbandAttenuation',Astop,... 'TransitionWidth',TW,'SampleRate',AF.SampleRate/2,... 'FilterBankInputPort',true); SpecAna = dsp.SpectrumAnalyzer('SampleRate',AF.SampleRate,... 'PlotAsTwoSidedSpectrum',false,'ReducePlotRate',false,... 'ShowLegend',true,... 'ChannelNames',{'Input signal','Filtered output signal'});
Считайте аудио 1 024 выборки за один раз. Отфильтруйте входной сигнал, чтобы получить lowpass и highpass сигналы поддиапазона, подкошенные на коэффициент два. Это - аналитический фрагмент набора фильтров. Используйте интерполятор полуполосы IIR в качестве набора фильтров синтеза. Отобразите рабочий спектр мощности аудиовхода и выход набора фильтров синтеза. Проигрывайте выход с помощью средства записи аудио устройства.
while ~isDone(AF) audioInput = AF(); [xlo,xhigh] = iirhalfbanddecim(audioInput); audioOutput = iirhalfbandinterp(xlo,xhigh); spectrumInput = [audioInput audioOutput]; SpecAna(spectrumInput); AP(audioOutput); end release(AF); release(AP); release(SpecAna);
Сравните стоимость реализации полуполосы FIR и IIR decimators использование cost
функция. Вы видите, что полуполоса IIR decimator в вычислительном отношении более эффективна.
cost(firhalfbanddecim)
ans = struct with fields:
NumCoefficients: 27
NumStates: 50
MultiplicationsPerInputSample: 13.5000
AdditionsPerInputSample: 13
cost(iirhalfbanddecim)
ans = struct with fields:
NumCoefficients: 5
NumStates: 7
MultiplicationsPerInputSample: 2.5000
AdditionsPerInputSample: 5
Сравните стоимость реализации интерполяторов полуполосы FIR и IIR. Снова, вычислительная стоимость реализации интерполятора полуполосы IIR намного меньше по сравнению с вычислительной стоимостью реализации полуполосы IIR decimator.
cost(firhalfbandinterp)
ans = struct with fields:
NumCoefficients: 26
NumStates: 25
MultiplicationsPerInputSample: 26
AdditionsPerInputSample: 25
cost(iirhalfbandinterp)
ans = struct with fields:
NumCoefficients: 5
NumStates: 7
MultiplicationsPerInputSample: 5
AdditionsPerInputSample: 10
Можно также сравнить групповую задержку КИХ и БИХ-полуленточных фильтров.
Используйте fvtool
отобразить ответ групповой задержки полуполосы FIR и БИХ-полуленточных фильтров в decimator. КИХ-полуленточный фильтр имеет линейный фазовый отклик с групповой задержкой 25 выборок. БИХ-полуленточный фильтр имеет нелинейный фазовый отклик, особенно вокруг частоты среза фильтра. Постоянная групповая задержка гарантирует, что все частотные составляющие задерживаются то же самым значением.
h = fvtool(firhalfbanddecim,iirhalfbanddecim,'grpdelay'); legend('FIR','IIR') title('Group Delay response of Halfband Decimators') h.CurrentAxes.YLim = [0, 40];
Так же в интерполяторе, КИХ-полуленточный фильтр имеет линейный фазовый отклик, в то время как БИХ-полуленточный фильтр имеет нелинейный фазовый отклик.
h = fvtool(firhalfbandinterp,iirhalfbandinterp,'grpdelay'); legend('FIR','IIR') title('Group Delay response of Halfband Interpolators') h.CurrentAxes.YLim = [0, 40];
dsp.AudioFileReader
| audioDeviceWriter
| dsp.FIRHalfbandDecimator
| dsp.FIRHalfbandInterpolator
| dsp.IIRHalfbandDecimator
| dsp.IIRHalfbandInterpolator