คำถามของฉันคือถ้าฉันต้องการ high-pass สัญญาณมันเหมือนกับสัญญาณ low-pass และลบมันออกจากสัญญาณหรือไม่? ในทางทฤษฎีมันเหมือนกันหรือไม่? มันเหมือนจริงหรือไม่?
ฉันค้นหาแล้ว (ทั้งบน google และ dsp.stackexchange) และฉันพบคำตอบที่ขัดแย้งกัน ฉันเล่นกับสัญญาณแล้วนี่คือผลลัพธ์ ฉันไม่สามารถเข้าใจได้ นี่คือสัญญาณที่มีความถี่การสุ่มตัวอย่างทุกๆสี่วินาที ฉันออกแบบตัวกรองสัญญาณความถี่วิทยุต่ำด้วยคลื่นความถี่ช่วงเปลี่ยนจาก 0.8 mHz ถึง 1 mHz และกรองสัญญาณ ฉันยังออกแบบตัวกรอง high-pass ที่มีช่วงการเปลี่ยนภาพเดียวกันและกรองสัญญาณ นี่คือผลลัพธ์
ภาพแรกนี้แสดงสัญญาณต้นฉบับเป็นสีดำและสัญญาณต่ำผ่านเป็นสีน้ำเงิน พวกเขาเกือบจะอยู่ด้านบนของกันและกัน แต่ไม่มาก เส้นโค้งสีแดงเป็นสัญญาณลบสัญญาณสูงผ่านซึ่งอยู่ด้านบนของสัญญาณ
ภาพที่สองนี้เป็นเพียงภาพแรกที่ซูมเข้าเพื่อแสดงสิ่งที่เกิดขึ้น ที่นี่เราเห็นว่าชัดเจนทั้งสองไม่เหมือนกัน คำถามของฉันคือทำไม มันเป็นเรื่องเกี่ยวกับวิธีที่ฉันใช้ตัวกรองทั้งสองหรือมันเป็นสิ่งที่ในทางทฤษฎีเป็นอิสระจากการนำไปใช้ ฉันไม่รู้มากเกี่ยวกับการออกแบบตัวกรอง แต่ฉันรู้ว่ามันเป็นวิธีที่ใช้งานง่าย นี่คือรหัส MATLAB เต็มรูปแบบในการทำซ้ำทั้งหมดนี้ ฉันใช้คำสั่ง filtfilt เพื่อกำจัดความล่าช้าเฟส แต่สิ่งอื่นที่ชี้ให้เห็นที่นี่คือตัวกรองไม่ได้ถูกทำให้เป็นมาตรฐาน เมื่อฉันรวม (Hd.Numerator) ฉันได้รับ 0.9930 สำหรับ low-pass และ 0.007 สำหรับ high-pass ฉันไม่เห็นวิธีการบัญชีสำหรับสิ่งนี้ ควรปรับขนาดเอาต์พุตอย่างใดเนื่องจากสัมประสิทธิ์ไม่ได้รวมกันหรือไม่ สเกลนี้มีส่วนเกี่ยวข้องกับสิ่งนี้หรือไม่?
close all
clear all
clc
data = dlmread('data.txt');
Fs = 0.25; % Sampling Frequency
N = 2674; % Order
Fpass = 0.8/1000; % Passband Frequency
Fstop = 1/1000; % Stopband Frequency
Wpass = 1; % Passband Weight
Wstop = 1; % Stopband Weight
dens = 20; % Density Factor
% Calculate the coefficients using the FIRPM function.
b = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], {dens});
Hd = dsp.FIRFilter('Numerator', b);
sum(Hd.Numerator)
datalowpassed = filtfilt(Hd.Numerator,1,data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs = 0.25; % Sampling Frequency
N = 2674; % Order
Fstop = 0.8/1000; % Stopband Frequency
Fpass = 1/1000; % Passband Frequency
Wstop = 1; % Stopband Weight
Wpass = 1; % Passband Weight
dens = 20; % Density Factor
% Calculate the coefficients using the FIRPM function.
b = firpm(N, [0 Fstop Fpass Fs/2]/(Fs/2), [0 0 1 1], [Wstop Wpass], {dens});
Hd = dsp.FIRFilter('Numerator', b);
sum(Hd.Numerator)
datahighpassed = filtfilt(Hd.Numerator,1,data);
figure
subplot(2,1,1)
plot(data,'-ko')
hold on
plot(datalowpassed,'-bo')
plot(data-datahighpassed,'-ro')
legend('Original Signal','Low-Passed','Signal - High-Passed')
subplot(2,1,2)
plot(data-datalowpassed,'-bo')
hold on
plot(datahighpassed,'-ro')
legend('Signal - Low-Passed','High-Passed')